Private test As Boolean 'déclare la variable test
Private Sub Worksheet_Change(ByVal Target As Range)
Dim o As Object 'déclare la variable o (Object)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim vl As String 'déclare la variable vl (Valeur Ligne)
Dim vc As String 'déclare la variable vc (Valeur Colonne)
Dim deb As Range 'déclare la variable deb (DEBut)
Dim fin As Range 'déclare la variable fin (FIN)
Dim li As Byte 'déclare la variable li (LIgne)
Dim col As Byte 'déclare la variable col (COLonne)
If test = True Then test = False: Exit Sub 'si test est "Vrai" alors test="Faux", sort de la procédure
'si le changement à lieu ailleurs que dans la plage B5:F5, sort de la procédure
If Application.Intersect(Target, Range("B5:F5")) Is Nothing Then Exit Sub
If Range("D5").Value = "" Then Exit Sub 'si la cellule D5 est vide, sort de la procédure
Set o = Sheets(Range("D5").Value) 'définit l'onglet o
Select Case Range("B5").Value 'agit en fonction de la valeur de B5
Case "IMPORT" 'cas "IMPORT"
Set pl = o.Cells.Find("RETOUR", , xlValues, xlWhole).CurrentRegion 'définit la plage pl
With Range("E5").Validation 'prend en compte la validation de données de la cellule E5
.Delete 'supprime une éventuelle validation de données existante
.Add Type:=xlValidateList, Formula1:="=dest_1" 'utilise "dest_1" comme liste de validation de données
End With 'fin de la prise en compte de la validation de données de la cellule E5
With Range("F5").Validation 'prend en compte la validation de données de la cellule F5
.Delete 'supprime une éventuelle validation de données existante
.Add Type:=xlValidateList, Formula1:="=dest_2" 'utilise "dest_2" comme liste de validation de données
End With 'fin de la prise en compte de la validation de données de la cellule F5
vl = Range("E5").Value: vc = Range("F5").Value 'définit les variables vl et vc
Case "EXPORT" 'cas "EXPORT"
Set pl = o.Cells.Find("ALLER", , xlValues, xlWhole).CurrentRegion 'définit la plage pl
With Range("E5").Validation 'prend en compte la validation de données de la cellule E5
.Delete 'supprime une éventuelle validation de données existante
.Add Type:=xlValidateList, Formula1:="=dest_2" 'utilise "dest_2" comme liste de validation de données
End With 'fin de la prise en compte de la validation de données de la cellule E5
With Range("F5").Validation 'prend en compte la validation de données de la cellule F5
.Delete 'supprime une éventuelle validation de données existante
.Add Type:=xlValidateList, Formula1:="=dest_1" 'utilise "dest_1" comme liste de validation de données
End With 'fin de la prise en compte de la validation de données de la cellule F5
vl = Range("F5").Value: vc = Range("E5").Value 'définit les variables vl et vc
End Select 'fin de l'action en fonction de la valeur de B5
'si le changement a lieu en B5, test="Vrai", efface la plage E5:G5, sort de la procédure
If Target.Address = "$B$5" Then test = True: Range("E5:G5").ClearContents: Exit Sub
'si le nombre de valeur dans la plage B5:F5 est inférieure à 5, test=vrai,efface la cellule G5, sort de la procédure
If Application.WorksheetFunction.CountA(Range("B5:F5")) < 5 Then test = True: Range("G5") = "": Exit Sub
For Each cel In Application.Intersect(pl, o.Columns(1)) 'boucle sur toutes les cellules cel de la colonne A de plage pl
'condition : si la cellule est fusionnée et sa valeur contient la valeur de la cellule C5
If cel.MergeCells = True And cel.Value Like Range("C5").Value & "*" = True Then
Set deb = o.Cells(cel.Row, 1) 'définit la cellule deb
Set fin = o.Cells(cel.Row + 7, 17) 'définit la cellule fin
Set pl = o.Range(deb, fin) 'redéfinit la plage pl
GoTo la 'va à l'étiquette la
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
test = True: Range("G5").Value = "" 'test="Vrai", G5 est effacée
la: 'étiquette
li = pl.Find(vc, , xlValues, xlWhole).Row 'définit la ligne li
col = pl.Find(vl, , xlValues, xlWhole).Column 'définit la colonne col
Range("G5").Value = o.Cells(li, col) 'place en G5 la valeur de la cellule ligne li, colonne col de l'onglet o
End Sub