1
votes

Résumer les données avec une action en boucle

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?


1 commentaires

quelle version d'Excel utilisez-vous ?? Si Excel365 vous pouvez utiliser FILTER() et aucun VBA n'est nécessaire.


4 Réponses :


0
votes

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:

entrez la description de l'image ici

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.

entrez la description de l'image ici

Si vous avez besoin de VBA pour une autre raison, alors:

=IF(B1<>"",1,0)


0 commentaires

1
votes

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")


0 commentaires

1
votes

Essayez d'utiliser un tableau croisé dynamique

entrez la description de l'image ici

..........


0 commentaires

0
votes

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


0 commentaires