VBA - complétion automatique d'un tableau sur base de 3 critères
Bonjour à tous,
Je me permets de poster ici car je ne parviens pas à orienter mes recherches pour rédiger une macro sur excel (mon niveau frisant le 0 absolu, la seule expérience qui s'en rapproche le plus est le jour où j'ai créé une BDD et son interface avec un peu de vb.net, en suant à grosse goutte
Mon problème est le suivant: je veux automatiser une tâche que j'effectue de temps en temps avec des filtres et pas mal de copier/coller (la feuille "Table" est en réalité composée de plusieurs centaines de ligne et il y en a toujours de nouvelles...alors qu'il n'y a jamais de suppression), sans pour autant bidouiller dans la macro chaque fois qu'il y a des modifications au niveau du nombre de lignes.
En gros — je vais essayer d'expliquer au mieux —, je dois remplir ma feuille "Analyse" avec des codes (colonnes E, G, I, K et M) lorsqu'il y a une valeur dans les montants qui s'y rapportent.
Chaque code correspond à un type de prestation. Ces codes pour un même type de prestation diffèrent selon les lots de facture (il peut y avoir 3 factures dans un lot comme 100). Le code est formé de chiffres, d'un symbole et parfois d'une lettre.
J'ai un système de référence qui permet d'identifier actuellement les codes d'un lot de factures. Les références sont: l'année, le type (en réalité un code pour la langue) et le n° de facture qui doit être compris entre le 1er et le dernier numéro du lot (cf. feuille "Table", colonnes C et D, que j'ai ajouté pour mes tests).
Pour l'instant, j'ai compris que je devais effectuer une boucle (ou plusieurs?) jusqu'à la dernière ligne qui, s'il y a une valeur dans les colonnes (D, F, H, J, L) de la feuille "Analyse", copie le code correspondant à la prestation de la feuille "Table" dans la feuille "Analyse" sur base des critères Année ET Type ET n° de facture, n° de facture qui doit être compris entre les valeurs des colonnes C et D de la feuille "Table" (pour l'instant, je trouve uniquement de la documentation sur un critère entre deux nombres entiers fixes indiqués directement dans le code).
J'ai déjà fait un premier test "simple" sur base des premières recherches mais je ne parviens pas à voir un quelconque effet quand je clique sur le bouton (je pense que j'oublie justement une partie de code désignant une action):
Private Sub CommandButton1_Click()
Dim LastRow As Long, I As Long, ws2 As Worksheet
With Worksheets("Analyse")
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
For I = 2 To LastRow
If .Cells(I, 1) = "2018" And .Cells(I, 2) = "FR" And .Cells(I, 3) = "1" Then
With Worksheets("Table")
.Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0) = _
Worksheets("Analyse").Cells(I, 5).Value
End With
End If
Next I
End With
End Sub
Bref, quelqu'un aurait-il une piste ou deux pour moi?
Merci d'avance.
PS: je ne peux malheureusement pas le faire à partir de la base de données car je n'ai pas la main dessus et ne l'aurai jamais (ça aurait été trop facile...).
Bonjour,
Une proposition à étudier.
Réalisée avec Power Query (intégré à Excel 2016).
Cdlt.
Bonjour.
Merci pour cette piste. Je vais voir si je peux intégrer ça et si je dois adapter quelques trucs en fonction.
Merci beaucoup!
Bonjour,
D'après mon expérience, le code:
.Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0)
ne fonctionne pas bien dans une boucle. La recherche de la dernière cellule vide ne se met pas (toujours?) à jour à chaque itération...
Je crois que mieux serait de définir la première cellule vide au début de ton code et dans la boucle utiliser un counter avec +1 pour déterminer la ligne dans les itérations suivantes...
Bàt