Bonjour tout le monde,
Voici le lien: https://www.cjoint.com/c/FHcjfqWTWvG
Sauriez-vous comment faire pour mettre la liste déroulante dans une feuille et la Base de donnée ou la boucle s'effectue dans une autre feuille?
Pour empêcher, dans la suite, des utilisateurs de tripoter la BDD?
Merci d'avance.
J'ai code VBA: ci dessous:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Macro qui s'éxécute à chaque nouvelle sélection de cellule sur la feuille
Dim DL As Long, DC As Long 'Définition des variable (ne pas toucher)
DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'Détermine la dernière ligne (en fonction de la colonne A, mettre la colonne qui est remplie le plus bas)
DC = Cells(1, Application.Columns.Count).End(xlToLeft).Column 'Détermine la dernière colonne (en fonction de la ligne 1)
Range("F3").Validation.Delete 'Supprime la liste déroulante de la cellule J3
Range("G3:G2000").ClearContents 'Supprime les valeurs de G3 à G2000
With Range("F3").Validation 'Crée la liste déroulante en F3
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:="=" & Range(Cells(1, 2), Cells(1, DC)).Address 'Les valeurs de la liste déroulante vont de la cellule B1 (Celle(ligne, colonne)) à la cellule Dernière colonne 1 (Cells(ligne, DC donc dernière colonne)
End With
y = 3 'Définit la variable y = 3
For j = 2 To DC 'Boucle pour j allant de la colonne 2 à la dernière colonne
If Cells(1, j).Value = Range("F3").Value Then 'Si la cellule de la colonne j ligne 1 = Cellule J3 alors
For i = 2 To DL 'Boucle pour i allant de la ligne 2 à la dernière ligne
If Cells(i, j) = "X" Then 'Si la cellule de ligne i et de la colonne j = "x" alors
Range("G" & y).Value = Range("A" & i).Value 'La cellule de la colonne K et de la ligne y (définit comme étant égal à 3) = La cellule de la colonne A et de la ligne i (la machine quoi)
y = y + 1 'Incrémente y de 1, ce qui veut dire qu'à la prochaine condition, y sera égal à 4 puis 5 puis 6...
End If 'Fin de la condition
Next i 'Prochaine ligne de la boucle i
End If 'Fin de la condition
Next j 'Prochaine ligne de la boucle j
End Sub 'Fin de macro