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.