Bonjour,

J'essaye actuellement de réaliser un code me permettant d'actualiser certaines données des lignes de mon Excel (les données se trouvant dans d'autres fichiers Excel). Pour cela je demande à mon code de prendre le CodeAffaire (qui est propre à chaque affaire) de ma ligne puis de trouver le CodeAffaire correspondant dans mon autre feuille intitulée FichiersSources où se trouve les emplacements des fichiers sources. A partir de là deux cas de figures : l'emplacement est toujours le même et l'actualisation se fait ou bien l'emplacement n'est plus bon et là une boite de dialogue s'ouvre afin de sélectionner le nouvel emplacement.
Mon problème est le suivant : mon code fonctionne bien dans les deux cas pour pour le premier CodeAffaire de ma feuille FichiersSources mais pour les suivants seul le cas de figure où l'emplacement est correct marche. Si l'emplacement n'est pas correct cela m'affiche une erreur d'automation.

Je ne comprends pas pourquoi ça marche bien pour le premier mais pas pour les autres.

Je vous mets mon code ainsi que des captures d'écran de mes feuilles excel pour que ce soit plus clair (j'espère).

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Sub ActualiserDonnees()
    Dim fichierDestination As Workbook
    Dim wsDestination As Worksheet
    Dim wsDestination2 As Worksheet
 
    ' Ouvrir le fichier destination (le fichier en cours d'utilisation)
    Set fichierDestination = ThisWorkbook
    Set wsDestination = fichierDestination.Worksheets(1)
    Set wsDestination2 = fichierDestination.Worksheets("FichiersSources")
 
    ' Récupérer les valeurs existantes dans le fichier destination
    Dim ligne As Long
    Dim lignebis As Long
    Dim CodeAffaire As String
    Dim cheminFichierSource As String
    Dim Credit As Double
    Dim Debit As Double
    Dim Aleas As Double
 
    For ligne = 5 To wsDestination.Range("STOP").Row
        CodeAffaire = wsDestination.Cells(ligne, 1).Value
 
        ' Vérifier si le CodeAffaire existe dans la colonne A du fichier destination
        If Not IsEmpty(CodeAffaire) Then
 
            For lignebis = 2 To wsDestination2.Cells(wsDestination2.Rows.Count, 1).End(xlUp).Row
 
                ' Chercher la correspondance dans la feuille FichiersSources
                If wsDestination2.Cells(lignebis, 1).Value = CodeAffaire Then
                    cheminFichierSource = wsDestination2.Cells(lignebis, 3).Value
 
                    ' Vérifier si le cheminFichierSource a changé
                    Dim fichierSource As Workbook
                    Dim wsSource As Worksheet
 
                    On Error Resume Next
                    Set fichierSource = Workbooks.Open(cheminFichierSource)
                    On Error GoTo 0
 
                    If fichierSource Is Nothing Then ' Le fichier source a changé
                        MsgBox "Le chemin du fichier source pour le CodeAffaire " & CodeAffaire & " a changé." & vbNewLine & "Veuillez sélectionner le nouveau fichier source."
 
                        ' Sélectionner le nouveau fichier source
                        Dim fichierSourceDialog As FileDialog
                        Set fichierSourceDialog = Application.FileDialog(msoFileDialogFilePicker)
 
                        ' Configurer les options de la boîte de dialogue
                        fichierSourceDialog.Title = "Sélectionner le nouveau fichier source pour le CodeAffaire " & CodeAffaire
                        fichierSourceDialog.AllowMultiSelect = False
                        fichierSourceDialog.Filters.Clear
                        fichierSourceDialog.Filters.Add "Fichiers Excel", "*.xlsx;*.xls"
 
                        ' Afficher la boîte de dialogue et récupérer le chemin du fichier source sélectionné
                        If fichierSourceDialog.Show = -1 Then
                            cheminFichierSource = fichierSourceDialog.SelectedItems(1)
 
                            ' Ouvrir le nouveau fichier source
                            Set fichierSource = Workbooks.Open(cheminFichierSource)
                            Set wsSource = fichierSource.Worksheets(1)
 
                            ' Actualiser les valeurs de Credit, Debit et Aleas
                            Credit = wsSource.Range("Credit").Value
                            Debit = wsSource.Range("Debit").Value
                            Aleas = wsSource.Range("Aleas").Value
 
                            ' Mettre à jour les valeurs dans le fichier destination
                            wsDestination.Cells(ligne, 4).Value = Credit
                            wsDestination.Cells(ligne, 7).Value = Debit - Aleas
                            wsDestination.Cells(ligne, 10).Value = Aleas
 
                            ' Mettre à jour le chemin du fichier source dans la feuille FichiersSources
                            wsDestination2.Cells(lignebis, 3).Value = cheminFichierSource
 
                            ' Fermer le fichier source sans enregistrer les modifications
                            fichierSource.Close False
                        Else
                            MsgBox "Aucun fichier source sélectionné. Les données pour le CodeAffaire " & CodeAffaire & " ne seront pas actualisées."
                        End If
                    Else ' Le fichier source n'a pas changé
                        Set wsSource = fichierSource.Worksheets(1)
 
                        ' Actualiser les valeurs de Credit, Debit et Aleas
                        Credit = wsSource.Range("Credit").Value
                        Debit = wsSource.Range("Debit").Value
                        Aleas = wsSource.Range("Aleas").Value
 
                        ' Mettre à jour les valeurs dans le fichier destination
                        wsDestination.Cells(ligne, 4).Value = Credit
                        wsDestination.Cells(ligne, 7).Value = Debit - Aleas
                        wsDestination.Cells(ligne, 10).Value = Aleas
 
                        ' Fermer le fichier source sans enregistrer les modifications
                        fichierSource.Close False
                    End If
 
                    Exit For ' Sortir de la boucle interne une fois la correspondance trouvée
                End If
 
            Next lignebis
 
        End If
 
    Next ligne
 
    ' Libérer la mémoire
    Set wsDestination = Nothing
    Set wsDestination2 = Nothing
    Set fichierDestination = Nothing
 
    MsgBox "Actualisation des données terminée !"
End Sub
Nom : Feuille Principale.png
Affichages : 86
Taille : 54,6 Ko
Nom : FichiersSources.png
Affichages : 82
Taille : 64,3 Ko