J'ai une liste de fruits dans A1: A20, puis l'utilisateur de mon fichier Excel donnera la coche ("V") dans B1: B20 s'il veut choisir l'un des fruits dans la liste de la colonne A.
Le problème est que je veux résumer automatiquement dans la feuille 2 une liste de fruits que l'utilisateur coche dans la colonne B. Avez-vous une idée de comment le résoudre?
4 Réponses :
Cela utilise une "colonne d'aide". Dans la cellule C1 de la Sheet1
, entrez:
Sub qwerty() Dim i As Long, rng As Range, r As Range Dim s1 As Worksheet, s2 As Worksheet Set s1 = Sheets("Sheet1") Set s2 = Sheets("Sheet2") Set rng = s1.Range("B1:B20") i = 1 For Each r In rng If r.Value <> "" Then s2.Cells(i, 1).Value = r.Offset(0, -1).Value i = i + 1 End If Next r End Sub
Dans la cellule C2 de la Sheet1
, entrez:
=IF(ROWS($1:1)>MAX(Sheet1!C$1:C$20),"",INDEX(Sheet1!A$1:A$20,MATCH(ROWS($1:1),Sheet1!C$1:C$20),0))
et copiez vers le bas. Un exemple typique:
Notez que la colonne C marque les fruits sélectionnés avec une séquence inter séquentielle simple.
Enfin, dans la cellule A1 de la feuille Sheet2, entrez:
=IF(B2="","",1+MAX(C1:$C$1))
et copiez vers le bas.
Si vous avez besoin de VBA pour une autre raison, alors:
=IF(B1<>"",1,0)
Avec Microsoft365, Excel pour iPad, etc., vous avez accès à la fonction FILTER
:
Vous définissez la plage de données que vous souhaitez utiliser comme jeu de résultats, puis définissez les critères de filtrage par, dans votre cas Sheet1!A1:A20
et Sheet1!B1:B20="v"
respectivement.
Placez-le dans A1
sur la Sheet2
, et la liste est créée puis automatiquement mise à jour.
=FILTER(Sheet1!A1:A20,Sheet1!B1:B20="v")
vous pouvez le placer dans le volet de code Sheet1 (clic droit sur l'onglet Sheet1 et sélectionnez "Afficher le code")
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B1:B20")) Is Nothing Then Exit Sub With Sheet2 .Range("A1:A20").ClearContents Dim cel As Range For Each cel In Range("A1:A20") If cel.Offset(, 1) = "v" Then .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Value = cel.Value2 Next End With End Sub
de cette façon, chaque fois que l'utilisateur opère sur les cellules Sheet1 B1: B20, la liste Sheet2 est automatiquement mise à jour
quelle version d'Excel utilisez-vous ?? Si Excel365 vous pouvez utiliser
FILTER()
et aucun VBA n'est nécessaire.