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.