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 |
Partager