Aide sur macro
Bonjour le Forum,
avec la macro suivante, j'effectue la comparaison de 2 feuilles Excel sur 2 fichiers différents ( qui ont exactement
la même structure) et qui correspondent à un suivi de charge de production.
Je récupère les valeurs d'une feuille "Charge" d'un fichier réalisé le lundi que je colle dans un autre fichier réalisé le jeudi
, toujours dans une feuille "Charge", puis j'effectue une comparaison pour voir l'évolution de la charge, et enfin je supprime
les valeurs que j'ai récupérées (j'espère que j'ai été clair).
Mon problème est que dans la requête, je récupére les valeurs de la feuille "Charge" mais pas les
couleurs associées à certaines cellules.
Comment modifier cette macro pour récupérer aussi les couleurs et la mise en forme.
Merci pour votre aide.
Voici la macro que j'ai pu développer (en me servant de macro trouvée sur le web)
Sub RequeteClasseurFerme()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Dim i, j, Nbligne%
Application.ScreenUpdating = False
'Définit le classeur fermé servant de base de données et la feuille
Fichier = "C:\Users\Patrick\Desktop\Patrick\APP\Macro APP\Extraction essai - Copie.xls"
NomFeuille = "Charge"
Set Cn = New ADODB.Connection
'--- Connection ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
End With
'---requête---
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)
'Ecrit le résultat de la requête dans la cellule L2
Range("L2").CopyFromRecordset Rst
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
'---Comparaison ligne par ligne---
Sheets("Charge").Select
Nbligne = Application.CountA(Range("B:B"))
Application.ScreenUpdating = False
For i = 2 To Nbligne
For j = 1 To Nbligne
If Cells(i, 2).Value = Cells(j, 13).Value Then Cells(i, 2).Interior.ColorIndex = Cells(j, 13).Interior.ColorIndex And _
Cells(i, 10).Value = Cells(j, 21).Value
Next j
Next i
'Efface le résultat de la requête
Range("L2:U300").ClearContents
Application.ScreenUpdating = True
ThisWorkbook.Save
End SubBonjour Patrick,
Pas sûr que l'on puisse copier les formats de cellules tels que les couleurs lors d'une connexion ADO.
Une solution consiste à ouvrir le fichier temporairement pour en copier le contenu.
Sub RequeteClasseur()
Dim Fichier As String, NomFeuille As String
Dim i As Long, j As Long, Nbligne As Long
Application.ScreenUpdating = False
'Définit le classeur servant de base de données et la feuille
Fichier = "C:\Users\Patrick\Desktop\Patrick\APP\Macro APP\Extraction essai - Copie.xls"
NomFeuille = "Charge"
'la méthode ici consiste à ouvrir la source, à copier les données et à la refermer
Workbooks.Open Filename:=Fichier
'Copie le résultat dans la cellule L2 de la feuille cible dans le classeur actuel
Sheets(NomFeuille).Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets(NomFeuille).Range("L2")
ActiveWorkbook.Close False 'on ferme le classeur source sans enregistrer
'---Comparaison ligne par ligne---
Sheets("Charge").Select
Nbligne = Application.CountA(Range("B:B"))
'Application.ScreenUpdating = False 'inutile
For i = 2 To Nbligne
For j = 1 To Nbligne
If Cells(i, 2).Value = Cells(j, 13).Value Then Cells(i, 2).Interior.ColorIndex = Cells(j, 13).Interior.ColorIndex And _
Cells(i, 10).Value = Cells(j, 21).Value
Next j
Next i
'Efface le résultat de la requête
Range("L2:U300").ClearContents
Application.ScreenUpdating = True
ThisWorkbook.Save
End SubBonjour vba-new,
cela fonctionne parfaitement.
J'ai juste modifier la macro pour supprimer le remplissage en couleurs des cellules.
Merci encore.
NB: si quelqu'un pouvait me répondre sur la copie des formats de cellules avec la connexion ADO, je
suis preneur.