[R] surveillance de dossier et renommage de fichier
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- jl56
- Niveau 7
- Messages : 415
- Enregistré le : mer. 24 oct. 2007 22:42
- Localisation : 56000
- Status : Hors ligne
[R] surveillance de dossier et renommage de fichier
Bonjour à tous,
Je recherche un script pour la surveillance de dossier et notamment y surveiller le renommage de fichier. J'avais réaliser un script en 2011 approchant avec l'UDF FileSystemMonitor.au3 mais ça ne fonctionne plus, sur le forum us il n'y a pas de nouvelle version depuis 2010.
sur le forum FR je n'ai rien trouvé de récent.
Dans les WIN_API je n'ai rien trouvé de probant non plus. bref j’ appel à l'aide.
Auriez-vous, SVP, une idée , un exemple de script récent (fonctionnel) à me proposer
Merci de vos suggestions et remarques
Cordialement,
JL56
Je recherche un script pour la surveillance de dossier et notamment y surveiller le renommage de fichier. J'avais réaliser un script en 2011 approchant avec l'UDF FileSystemMonitor.au3 mais ça ne fonctionne plus, sur le forum us il n'y a pas de nouvelle version depuis 2010.
sur le forum FR je n'ai rien trouvé de récent.
Dans les WIN_API je n'ai rien trouvé de probant non plus. bref j’ appel à l'aide.
Auriez-vous, SVP, une idée , un exemple de script récent (fonctionnel) à me proposer
Merci de vos suggestions et remarques
Cordialement,
JL56
Modifié en dernier par jl56 le mer. 27 oct. 2021 19:25, modifié 1 fois.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [.] surveillance de dossier et renommage de fichier
Il me semble pourtant que _WinAPI_FindFirstChangeNotification ou _WinAPI_ReadDirectoryChanges avec par exemple le paramètre $FILE_NOTIFY_CHANGE_FILE_NAME pourraient convenirDans les WIN_API je n'ai rien trouvé de probant non plus
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jl56
- Niveau 7
- Messages : 415
- Enregistré le : mer. 24 oct. 2007 22:42
- Localisation : 56000
- Status : Hors ligne
Re: [.] surveillance de dossier et renommage de fichier
Bonjour Mikell,
Merci pour votre retour, pour honnête je n'avais pas vu cet api , j'avais regardé les API qui contenaient FILE
cette API fonctionne mais sans dissocier le renommage d'une création de fichier.
Je vais préciser ce que j'aimerais faire avec un script
J'ai eu quelques clients qui se sont fait crypter leur donnée alors qu'ils étaient équipés dans les règles de l'art (système et antivirus à jour (avec system anti crypto), boitier UTM ...). le constat est que des dossiers partagés sur le serveur exemple un dossier de bureautique peut être crypté par un poste infecté sans être détecté par l'antivirus du serveur. Nous avons réalisé une maquette de test la semaine passé avec un nouvelle génération d'antivirus basé sur de intelligence artificiel. un ramsoware sur le serveur a été détecté immédiatement mais le même ransomware sur un poste non protégé a crypté le dossier partagé!.
Le support de l'antivirus nous à confirmé que c'était normal car le poste n'était pas protégé ( La pallisse aurait dit la même chose)
Mon constat avec un ramsoware, c'est que dans les dossiers les fichiers sont renommés les .docs deviennent des .docx.tes-crypté etc..
si un script sur le serveur détecte plusieurs renommage on génère une action ( envoie d'un mail, arrêt du partage, désactivation de la carte réseau voir arrêt du serveur par exemple)
j'ai trouvé sur ce site https://www.nodesoft.com/foldermonitor un outil qui détecte le renommage en affichant l'ancien nom, le nouveau et l'action de renommage.
C'est ce que j'aimerais faire, détecter un renommage .docx en autre chose le confirmer sur un ou x autre fichier et déclencher les actions.
Pensez-vous SVP que l'on peut le faire en Autit ?
Merci encore pour votre aide
Cordialement,
JL56
Merci pour votre retour, pour honnête je n'avais pas vu cet api , j'avais regardé les API qui contenaient FILE
cette API fonctionne mais sans dissocier le renommage d'une création de fichier.
Je vais préciser ce que j'aimerais faire avec un script
J'ai eu quelques clients qui se sont fait crypter leur donnée alors qu'ils étaient équipés dans les règles de l'art (système et antivirus à jour (avec system anti crypto), boitier UTM ...). le constat est que des dossiers partagés sur le serveur exemple un dossier de bureautique peut être crypté par un poste infecté sans être détecté par l'antivirus du serveur. Nous avons réalisé une maquette de test la semaine passé avec un nouvelle génération d'antivirus basé sur de intelligence artificiel. un ramsoware sur le serveur a été détecté immédiatement mais le même ransomware sur un poste non protégé a crypté le dossier partagé!.
Le support de l'antivirus nous à confirmé que c'était normal car le poste n'était pas protégé ( La pallisse aurait dit la même chose)
Mon constat avec un ramsoware, c'est que dans les dossiers les fichiers sont renommés les .docs deviennent des .docx.tes-crypté etc..
si un script sur le serveur détecte plusieurs renommage on génère une action ( envoie d'un mail, arrêt du partage, désactivation de la carte réseau voir arrêt du serveur par exemple)
j'ai trouvé sur ce site https://www.nodesoft.com/foldermonitor un outil qui détecte le renommage en affichant l'ancien nom, le nouveau et l'action de renommage.
C'est ce que j'aimerais faire, détecter un renommage .docx en autre chose le confirmer sur un ou x autre fichier et déclencher les actions.
Pensez-vous SVP que l'on peut le faire en Autit ?
Merci encore pour votre aide
Cordialement,
JL56
Re: [.] surveillance de dossier et renommage de fichier
Il ne faut pas se limiter au paramètre $iFilter de la fonction _WinAPI_ReadDirectoryChanges, il faut en plus vérifier quel est le type de modification :
#include <APIFilesConstants.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIMem.au3>
Global $g_sPath = "c:\temp"
If Not FileExists($g_sPath) Then
MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create folder.')
Exit
EndIf
Local $hDirectory = _WinAPI_CreateFileEx($g_sPath, $OPEN_EXISTING, $FILE_LIST_DIRECTORY, BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_BACKUP_SEMANTICS)
If @error Then
_WinAPI_ShowLastError('', 1)
Exit
EndIf
Local $pBuffer = _WinAPI_CreateBuffer(8388608)
Local $aData
While 1
$aData = _WinAPI_ReadDirectoryChanges($hDirectory, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME), $pBuffer, 8388608, 1)
If Not @error Then
If $aData[0][0] Then
For $i = 1 To $aData[0][0]
If $aData[$i][1] = $FILE_ACTION_RENAMED_OLD_NAME Then
ConsoleWrite("Fichier renommé : " & $aData[$i][0] & " => " & $aData[$i + 1][0] & @CRLF)
EndIf
Next
EndIf
Else
_WinAPI_ShowLastError('', 1)
EndIf
WEnd
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIMem.au3>
Global $g_sPath = "c:\temp"
If Not FileExists($g_sPath) Then
MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create folder.')
Exit
EndIf
Local $hDirectory = _WinAPI_CreateFileEx($g_sPath, $OPEN_EXISTING, $FILE_LIST_DIRECTORY, BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_BACKUP_SEMANTICS)
If @error Then
_WinAPI_ShowLastError('', 1)
Exit
EndIf
Local $pBuffer = _WinAPI_CreateBuffer(8388608)
Local $aData
While 1
$aData = _WinAPI_ReadDirectoryChanges($hDirectory, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME), $pBuffer, 8388608, 1)
If Not @error Then
If $aData[0][0] Then
For $i = 1 To $aData[0][0]
If $aData[$i][1] = $FILE_ACTION_RENAMED_OLD_NAME Then
ConsoleWrite("Fichier renommé : " & $aData[$i][0] & " => " & $aData[$i + 1][0] & @CRLF)
EndIf
Next
EndIf
Else
_WinAPI_ShowLastError('', 1)
EndIf
WEnd
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- jl56
- Niveau 7
- Messages : 415
- Enregistré le : mer. 24 oct. 2007 22:42
- Localisation : 56000
- Status : Hors ligne
Re: [.] surveillance de dossier et renommage de fichier
Bonjour à tous,
waouh c'est très efficace même sur un disque entier, c'est exactement ce que je recherchais.
Merci beaucoup Jguinch
Est-ce qu'il est possible de surveiller plusieurs dossier en même temps ? (plusieurs scripts en paralélle sans doute) ?
Note: chez moi cette ligne #include <WinAPIMem.au3> provoque une erreur je l'ai désactiver et ça fonctionne
Merci encore une fois
Cordialement,
JL56
waouh c'est très efficace même sur un disque entier, c'est exactement ce que je recherchais.
Merci beaucoup Jguinch
Est-ce qu'il est possible de surveiller plusieurs dossier en même temps ? (plusieurs scripts en paralélle sans doute) ?
Note: chez moi cette ligne #include <WinAPIMem.au3> provoque une erreur je l'ai désactiver et ça fonctionne
Merci encore une fois
Cordialement,
JL56
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] surveillance de dossier et renommage de fichier
WinAPIMem.au3 est nécessaire pour la fonction _WinAPI_CreateBuffer mais l'include existe déjà dans WinAPIFiles.au3
Peut-être un _WinAPI_FreeMemory à la fin ?
Joli script jguinch, je garde (et joyeuse Toussaint !)
Peut-être un _WinAPI_FreeMemory à la fin ?
Joli script jguinch, je garde (et joyeuse Toussaint !)

" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [R] surveillance de dossier et renommage de fichier
pour le dernier flag $bSubtree[optionnel] Spécifie si la fonction doit surveiller les sous-répertoires du répertoire spécifié, les valeurs valides sont:
True - Surveille l'arborescence des répertoires don la racine est spécifié.
False - Surveille seulement le dossier spécifié (par défaut).
Jguich l'a mis à True (1) donc il y a une récursivité
Par contre, je n'arrive pas à stopper le script (sortir de la boucle) car _WinAPI_ReadDirectoryChanges() est bloquant tant qu'il n'y a pas de fichier renommé. une solution ?...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] surveillance de dossier et renommage de fichier
Pour ça il faudrait utiliser _WinAPI_ReadDirectoryChanges en mode asynchrone, j'ai regardé comment faire et j'ai vite laissé tomber
Sinon il faut utiliser un thread différent, personnellement j'utilise un moyen à la c.. mais qui marche : dans mon script compilé, en tête je mets
je relance le programme, et il se ferme lui-même s'il est déjà lancé (ça évite de faire un 2ème exe)

Sinon il faut utiliser un thread différent, personnellement j'utilise un moyen à la c.. mais qui marche : dans mon script compilé, en tête je mets
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [R] surveillance de dossier et renommage de fichier
Pour le mode asynchrone, c'est clair que c'est pas évident.
En cherchant un peu, je suis tombé sur un super post de Yashied qui explique qu'il faut passer par les threads pour que ça fonctionne correctement (donc pas possible nativement avec AutoIt). La solution proposée passe par l'utilisation d'une dll (fournie !).
Après quelques tests, je peux dire que c'est juste génial !
Voilà le script que j'ai utilisé (modifié à partir du script RDC_Ex_Simple (Loop).au3 présent dans l'archive) :
Edit : je viens de tester RDC_Ex_3.3.12.x.au3, c'est bluffant !
En cherchant un peu, je suis tombé sur un super post de Yashied qui explique qu'il faut passer par les threads pour que ça fonctionne correctement (donc pas possible nativement avec AutoIt). La solution proposée passe par l'utilisation d'une dll (fournie !).
Après quelques tests, je peux dire que c'est juste génial !
Voilà le script que j'ai utilisé (modifié à partir du script RDC_Ex_Simple (Loop).au3 présent dans l'archive) :
#Include <APIConstants.au3>
#Include <RDC.au3>
Local $aDir = ["C:\", "E:\"]
_RDC_OpenDll()
If @Error Then
ConsoleWrite('Error: _RDC_OpenDll() - ' & @Error & @CR)
Exit
EndIf
Local $ID[UBound($aDir)]
Local $aData
For $i = 0 To UBound($aDir) - 1
$ID[$i] = _RDC_Create($aDir[$i], 1, $FILE_NOTIFY_CHANGE_FILE_NAME)
If @Error Then
ConsoleWrite('Error: _RDC_Create() - ' & @Error & ', ' & @Extended & @CR)
Exit
EndIf
Next
While 1
For $i = 0 To UBound($ID) - 1
If $ID[$i] = -1 Then ContinueLoop
$aData = _RDC_GetData($ID[$i])
If @Error Then
ConsoleWrite('Error: _RDC_GetData() - ' & @Error & ', ' & @Extended & ', ' & _RDC_GetDirectory($ID[$i]) & @CR)
; Delete thread to avoid receiving this error!
_RDC_Delete($ID[$i])
$ID[$i] = -1
ContinueLoop
EndIf
For $j = 1 To $aData[0][0]
Switch $aData[$j][1]
Case $FILE_ACTION_ADDED
ConsoleWrite("Fichier créé : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & @CRLF)
Case $FILE_ACTION_REMOVED
ConsoleWrite("Fichier supprimé : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & @CRLF)
;~ Case $FILE_ACTION_MODIFIED ; ça, je sais pas pouquoi ça ne passe pas
;~ ConsoleWrite("Fichier modifié : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & @CRLF)
Case $FILE_ACTION_RENAMED_OLD_NAME
ConsoleWrite("FIchier renommé : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & " => " & $aData[$j+1][0] & @CRLF)
EndSwitch
Next
Next
Sleep(10)
WEnd
#Include <RDC.au3>
Local $aDir = ["C:\", "E:\"]
_RDC_OpenDll()
If @Error Then
ConsoleWrite('Error: _RDC_OpenDll() - ' & @Error & @CR)
Exit
EndIf
Local $ID[UBound($aDir)]
Local $aData
For $i = 0 To UBound($aDir) - 1
$ID[$i] = _RDC_Create($aDir[$i], 1, $FILE_NOTIFY_CHANGE_FILE_NAME)
If @Error Then
ConsoleWrite('Error: _RDC_Create() - ' & @Error & ', ' & @Extended & @CR)
Exit
EndIf
Next
While 1
For $i = 0 To UBound($ID) - 1
If $ID[$i] = -1 Then ContinueLoop
$aData = _RDC_GetData($ID[$i])
If @Error Then
ConsoleWrite('Error: _RDC_GetData() - ' & @Error & ', ' & @Extended & ', ' & _RDC_GetDirectory($ID[$i]) & @CR)
; Delete thread to avoid receiving this error!
_RDC_Delete($ID[$i])
$ID[$i] = -1
ContinueLoop
EndIf
For $j = 1 To $aData[0][0]
Switch $aData[$j][1]
Case $FILE_ACTION_ADDED
ConsoleWrite("Fichier créé : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & @CRLF)
Case $FILE_ACTION_REMOVED
ConsoleWrite("Fichier supprimé : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & @CRLF)
;~ Case $FILE_ACTION_MODIFIED ; ça, je sais pas pouquoi ça ne passe pas
;~ ConsoleWrite("Fichier modifié : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & @CRLF)
Case $FILE_ACTION_RENAMED_OLD_NAME
ConsoleWrite("FIchier renommé : " & _RDC_GetDirectory($ID[$i]) & '\' & $aData[$j][0] & " => " & $aData[$j+1][0] & @CRLF)
EndSwitch
Next
Next
Sleep(10)
WEnd
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [R] surveillance de dossier et renommage de fichier
Michel ta proposition ne fonctionne pas. Test.exe se lance et s’arrête aussi vite mais ça m'a donné des idées
et donc en relançant le code, le programme se stoppe
Ça me donne cela comme code
et comme résultat dans la console
ça se rapproche de beaucoup du code RDC_Ex_Advanced.au3 de Yashied. Merci à Jguinch pour l'info et son exemple

Code : Tout sélectionner
If WinExists("test","") Then
$pid = WinGetProcess("test","")
ProcessClose($pid)
Exit
EndIf
GUICreate("test",20,20,0,0)
Ça me donne cela comme code
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=test.exe
#AutoIt3Wrapper_Res_Comment=Relancer pour fermer
#AutoIt3Wrapper_Res_Description=Relancer pour fermer
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
If WinExists("test","") Then
$pid = WinGetProcess("test","")
ProcessClose($pid)
Exit
EndIf
GUICreate("test",20,20,0,0)
#include <APIFilesConstants.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIMem.au3>
#include <WinAPISys.au3>
Global $g_sPath = "C:\temp\"
If Not FileExists($g_sPath) Then
MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create folder.')
Exit
EndIf
Local $hDirectory = _WinAPI_CreateFileEx($g_sPath, $OPEN_EXISTING, $FILE_LIST_DIRECTORY, BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_BACKUP_SEMANTICS)
If @error Then
_WinAPI_ShowLastError('', 1)
Exit
EndIf
Local $pBuffer = _WinAPI_CreateBuffer(8388608)
Local $aData, $cpt
While 1
$aData = _WinAPI_ReadDirectoryChanges($hDirectory, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME,$FILE_NOTIFY_CHANGE_LAST_WRITE), $pBuffer, 8388608, 1)
If Not @error Then
If $aData[0][0] Then
For $i = 1 To $aData[0][0]
Local $fichier = "Fichier"
Select
Case $aData[$i][1] = $FILE_ACTION_RENAMED_OLD_NAME
$cpt += 1
If FileGetAttrib("C:\temp\" & $aData[$i + 1][0]) = "D" Then $fichier = " Dossier"
ConsoleWrite($cpt &" "& $fichier & " renommé : " & $g_sPath & $aData[$i][0] & " => " & $aData[$i + 1][0] & @CRLF)
Case $aData[$i][1] = $FILE_ACTION_REMOVED
$cpt += 1
If StringRegExp("C:\temp\" & $aData[$i][0],"(?:\.([^ :\\/.]*))$",0) = False Then $fichier = " Dossier"
ConsoleWrite($cpt &" "& $fichier & " déplacé : " & $g_sPath & $aData[$i][0] & @CRLF)
Case $aData[$i][1] = $FILE_ACTION_ADDED
$cpt += 1
If FileGetAttrib("C:\temp\" & $aData[$i][0]) = "D" Then $fichier = " Dossier"
ConsoleWrite($cpt &" "& $fichier & " ajouté : " & $g_sPath & $aData[$i][0] & @CRLF)
Case $aData[$i][1] = $FILE_ACTION_MODIFIED
$cpt += 1
If FileGetAttrib("C:\temp\" & $aData[$i][0]) = "D" Then $fichier = " Dossier"
ConsoleWrite($cpt &" "& $fichier & " modifié : " & $g_sPath & $aData[$i][0] & @CRLF)
EndSelect
Next
EndIf
Else
_WinAPI_ShowLastError('', 1)
EndIf
WEnd
Code : Tout sélectionner
+>Setting Hotkeys...--> Press Ctrl+Alt+Break to Restart or Ctrl+BREAK to Stop.
1 Dossier ajouté : C:\temp\Temp\Nouveau dossier
2 Dossier modifié : C:\temp\Temp
3 Dossier renommé : C:\temp\Temp\Nouveau dossier => Temp\Dossier
4 Dossier modifié : C:\temp\Temp
5 Fichier ajouté : C:\temp\Temp\Dossier\Nouveau document texte.txt
6 Dossier modifié : C:\temp\Temp\Dossier
7 Fichier renommé : C:\temp\Temp\Dossier\Nouveau document texte.txt => Temp\Dossier\texte.txt
8 Dossier modifié : C:\temp\Temp\Dossier
9 Fichier déplacé : C:\temp\Temp\Dossier\texte.txt
10 Fichier ajouté : C:\temp\Temp\texte.txt
11 Dossier modifié : C:\temp\Temp
12 Dossier modifié : C:\temp\Temp\Dossier
+>18:10:52 AutoIt3.exe ended.rc:0
+>18:10:52 AutoIt3Wrapper Finished.
>Exit code: 0 Time: 27.46
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- jl56
- Niveau 7
- Messages : 415
- Enregistré le : mer. 24 oct. 2007 22:42
- Localisation : 56000
- Status : Hors ligne
Re: [R] surveillance de dossier et renommage de fichier
Bonjour,
Merci JGUINCH pour ce partage très intéressant et votre script d'exemple, c'est l’idéal pour moi.
Merci également WALKSON pour votre exemple
Cordialement,
JL56
Merci JGUINCH pour ce partage très intéressant et votre script d'exemple, c'est l’idéal pour moi.
Merci également WALKSON pour votre exemple
Cordialement,
JL56