Bonjour à tous !

J'ai un niveau très débutant en VBA, et le code obtenu est le résultat de parcours dans ce forum. Merci d'avance pour vos coups de main !

Je vais essayer de m'exprimer le plus clairement possible : l'objectif de ma macro est de parcourir un dossier de fichiers de domaines unitaires afin de vérifier s'ils ont rentré les données à une date précise, donc si l'update est fait (donnée non #N/A présente), on affiche "YES" avec le chiffre rentré et le mois en cours, et si non, afficher "NO" et remonter dans la colonne de la dite donnée pour chercher la dernière mise à jour effectuée, ainsi que le mois correspondant, donc voilà pour résumer.

La date du contrôle est rentrée par un userform et un combobox avec la liste des dates, puis après le choix et le clic sur OK, ma macro se lance. Elle commence par créer un onglet "template" avec comme non "Fin mm/aaaa" selon le choix effectué. Il y ensuite a l'étape choix du dossier ayant les fichiers à contrôler, ensuite le sub sur l'import des données commence et la partie ou je bloque c'est surtout les boucles à effectuer au sein du fichier de données, je n'arrive pas à trouver la bonne combinaison de boucles (If ? Do while ?) pour avoir le résultat que je désire.

Pour aider à comprendre le code, j'ai 3 types de données différentes, mais je cherche à récupérer leur somme (ex: la donnée 1 est sur 3 colonnes différentes, donc en résultat il faut la somme des données des 3 colonnes sur le mois correspondant). J'ai fait le code pour le 1er type de données uniquement, si je trouve une solution je pourrai l'étendre au reste.

J'espère avoir été assez clair, je joints le code du sub d'import ci-dessous en espérant qu'il soit assez compréhensible :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
Sub import()
'Application.DisplayAlerts = False
 
MsgBox "Choisir le répertoire des domaines"
sNomRepertoire = ChoisirRepertoire ' demande de sélectionner le dossier contenant les fichiers domaines
If sNomRepertoire = "" Then
Exit Sub
End If
 
Path = sNomRepertoire
 
fichier = Dir(Path & "\*.xlsx ") 'définit les fichiers à importer en l'occurence tous les fichiers excel se trouvant dans ce répertoire
 
Do While fichier <> "" 'démarre la boucle jusqu'au dernier fichier disponible dans le répertoire
    Dim plage As Range 'plage de dates à balayer dans fichier KPI
    Dim c As Range
    Dim n As Range
    Dim i As Variant
    Dim donnee_123 As Variant
    Dim donnee_45 As Variant
    Dim donnee_67 As Variant
    Dim l_donnee_123 As Variant
    Dim l_donnee_45 As Variant
    Dim l_donnee_67 As Variant
    Dim l_date As Variant
    Dim vdate As Variant
    Set vplage = Sheets("Vérification").Range("A2:A78")
    Set WbSource = Workbooks.Open(Path & "\" & fichier) 'ouvre le fichier actuel à contrôler
    Set wksNewSheet = WbSource.Sheets("Données") 'sélectionne la feuille de données à contrôler
    Set plage = wksNewSheet.Range("A2:A66") 'l'ensemble des dates des fichiers domaines unitaires
 
 
    wksNewSheet.Activate 'active cette feuille
    domaine = wksNewSheet.Range("AA2").Value
    'MsgBox domaine
 
    For Each c In plage
        If c.Value = rdate Then
        ligne = c.Row
        'MsgBox ligne
            For Each n In vplage
                If n.Value = domaine Then
                    vligne = n.Row
                    'MsgBox vlign
 
WbSource.Activate
                    For Each i In Array(5, 6, 7) ', 13, 14, 23, 25)
                        If IsError(c(ligne, i).Value) Then
                            Do While IsError(c(ligne, i).Value)
                                ligne = ligne - 1
                            Loop
 
                            Verif.Worksheets(Sheets.Count).Cells(vligne, 10) = "NO"
                            l_donnee_123 = c(ligne, i).Value + c(ligne, i + 1).Value + c(ligne, i + 2).Value
                            vdate = c(ligne, 1)
                            'MsgBox vdate
 
                            Else
                            donnee_123 = c(ligne, i).Value + c(ligne, i + 1).Value + c(ligne, i + 2).Value
                            'donnee_123 = WbSource.Worksheets("Données").Cells(ligne, i).Value + WbSource.Worksheets("Données").Cells(ligne, i + 1).Value + WbSource.Worksheets("Données").Cells(ligne, i + 2).Value
                            l_date = c(ligne, 1)
 
Verif.Activate
                            Verif.Worksheets(Sheets.Count).Cells(vligne, 10) = "YES"
                            Verif.Worksheets(Sheets.Count).Cells(vligne, 11) = l_date
                            Verif.Worksheets(Sheets.Count).Cells(vligne, 12) = donnee_123
 
'Else ? 
 
'Verif.Activate
                            'Verif.Worksheets(Sheets.Count).Cells(vligne, 11) = vdate
                            'Verif.Worksheets(Sheets.Count).Cells(vligne, 12) = l_donnee_123
 
                        End If
                    Next i
                End If
            Next n
        End If
    Next c
 
    WbSource.Close 'ferme le fichier source
    fichier = Dir 'va vers le fichier suivant à importer
'    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
 
'Une fois que la boucle fonctionne il faudra juste rajouter la recherche pour les 2 autres types de données
'        :=False, Transpose:=False
 
Loop 'recommence la boucle avec le fichier suivant
 
End Sub