Boucle If

Bonjour à toutes et à tous,

Je suis débutant en VBA et je souhaiterai effectuer une modification dans ma boucle if. Elle fonctionne de la façon suivante : elle vient comparer les valeurs de deux cases d'un tableau : la 4eme et la 11eme. Si elles correspondent aux critères, on recopie certaines informations de cette ligne dans un autre tableau. Ma macro sert à la création d'un facturier et donc lorsqu'une ligne respecte les deux premiers critères, elle passe dans le deuxième tableau pour créer une facture prévisionnelle. J'ai un deuxième bouton me permettant de créer une facture réelle se basant sur des valeurs d'autres cases. Le but est de ne pas facturer la même ligne plusieurs fois.

Ma question est la suivante : est-il possible de modifier la boucle afin que, lorsque je "passe" une ligne dans mon deuxième tableau, il y ai un statu sur cette ligne qui puisse me permettre d'ajouter un critère sur lors de la création de la prochaine facture.

Je ne suis pas sur d'être suffisamment clair donc si besoin je peux ressayer d'expliquer plus en détail.

Ci-dessous le code:

Option Explicit

    Dim dico As Object, tablo, tabloR(), f As Worksheet, fe As Worksheet
    Dim i&, j&, k&

Private Sub OptionButton1_Click()

    Sheets("Invoice").Activate
    Range("A8:U8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlToLeft

    k = 0                                                                           'initialisation de la variable
    For i = 1 To UBound(tablo, 1) - 1                                               'On va passer toutes les lignes du tablo de la feuille ''Invoice Follow-up''
        If tablo(i, 4) = "APPR" And tablo(i, 11) = "" Then                                               'et ne s'intéresser qu'aux lignes qui répondent aux critéres choisis
            ReDim Preserve tabloR(1 To UBound(tablo, 2) + 9, 1 To k + 1)            'on initialise le tablo de résultats
            'On Error Resume Next                                                   'pour le cas de cellules vides contenant une date
            tabloR(1, k + 1) = "BT"
            tabloR(3, k + 1) = tablo(i, 9)
            tabloR(4, k + 1) = tablo(i, 5)
            tabloR(9, k + 1) = tablo(i, 3)
            tabloR(10, k + 1) = tablo(i, 2)
            tabloR(21, k + 1) = tablo(i, 12)
            tablo(i, 11) = "Prev"
            k = k + 1                                                                'on incrémente k
        End If
    Next i

    'Sheets("Invoice").Range("A8").Resize(UBound(tabloR, 2), UBound(tablo, 2) + 10) = Application.Transpose(tabloR)
    fe.Range("U4") = Date
    Unload Me
    MsgBox "Facture prête"

End Sub

Private Sub OptionButton2_Click()

    Sheets("Invoice").Activate
    Range("A8:U8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlToLeft

    k = 0                                                                           'initialisation de la variable
    For i = 1 To UBound(tablo, 1) - 1                                               'On va passer toutes les lignes du tablo de la feuille ''Invoice Follow-up''
        If tablo(i, 11) = "Oui" Then                                                 'et ne s'intéresser qu'aux lignes qui répondent aux critéres choisis
            ReDim Preserve tabloR(1 To UBound(tablo, 2) + 9, 1 To k + 1)            'on initialise le tablo de résultats
            'On Error Resume Next                                                   'pour le cas de cellules vides contenant une date
            tabloR(1, k + 1) = "BT"
            tabloR(3, k + 1) = tablo(i, 9)
            tabloR(4, k + 1) = tablo(i, 5)
            tabloR(9, k + 1) = tablo(i, 3)
            tabloR(10, k + 1) = tablo(i, 2)
            tabloR(21, k + 1) = tablo(i, 12)
            k = k + 1                                                               'on incrémente k
        End If
    Next i

    Sheets("Invoice").Range("A8").Resize(UBound(tabloR, 2), UBound(tablo, 2) + 10) = Application.Transpose(tabloR)
    fe.Range("U4") = Date
    Unload Me
    MsgBox "Facture prête"

End Sub

Private Sub UserForm_Initialize()

    Set f = Sheets("Invoice Follow-up")
    Set fe = Sheets("Invoice")
    tablo = f.Range("A5").CurrentRegion.Offset(1, 0)                                'Mise en mémoire-tableau des données du tableau de la feuille ''Invoice Follow-up''

End Sub

Merci pour votre aide.

Cordialement.

Pierro26.

Bonsoir Pierro26,

C'est vrai qu'avec Excel on peut faire tout et son contraire, mais ici, ça manque du fichier complet, anonymiser si tu crains qu'on puisse bidouiller tes factures.

Rechercher des sujets similaires à "boucle"