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

29test-macro.xlsm (22.31 Ko)

Bonjour,

Une proposition à étudier.

Réalisée avec Power Query (intégré à Excel 2016).

Cdlt.

20mecre.xlsx (23.83 Ko)

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

Rechercher des sujets similaires à "vba completion automatique tableau base criteres"