pepito78
Nouveau membre
Bonjour à toutes et à tous,
J'ai un travail de développement de macro et je suis totalement novice en la matière. Jusqu'à présent j'ai réussi à me nourrir de l'expérience de différents forumeurs et j'ai plus ou moins réussi à atteindre mon objectif, il y a juste un détail que je ne m'explique pas.
Je vous résume en gros mon projet : je dois créer une macro qui est capable de copier une colonne d'un groupe de fichiers .xlsm qui ont tous la même architecture, pour ensuite la coller dans un fichier "recueil de données". Une des difficultés pour moi était donc d'indiquer à la macro de coller les différentes colonnes aux bons endroits, c'est à dire en décalant à chaque fois la cible. J'ai donc écrit ce code qui s'exécute à l'ouverture d'un fichier "statistiques" :
Ce qui m'intrigue, c'est qu'à l'ouverture du fichier "statistiques", le collage des colonnes se fait effectivement avec le décalage de +1 comme indiqué, sauf pour la toute première colonne à coller. Pour celle-ci, il tient compte des précédentes ouvertures de fichiers et décale tout vers la droite. En gros, comme j'ai déjà fait plusieurs essais, la première colonne collée arrive maintenant sur la colonne AA et tout les reste s'affiche correctement sur la droite.
Quelqu'un serait-il capable de m'expliquer ça? Et surtout comment y remédier? C'est un détail car au final, j'arrive à extraire mes statistiques, mais bon après quelques mois d'utilisation, mes colonnes se colleront en ZZ...
Merci d'avance pour vos éclairages!
J'ai un travail de développement de macro et je suis totalement novice en la matière. Jusqu'à présent j'ai réussi à me nourrir de l'expérience de différents forumeurs et j'ai plus ou moins réussi à atteindre mon objectif, il y a juste un détail que je ne m'explique pas.
Je vous résume en gros mon projet : je dois créer une macro qui est capable de copier une colonne d'un groupe de fichiers .xlsm qui ont tous la même architecture, pour ensuite la coller dans un fichier "recueil de données". Une des difficultés pour moi était donc d'indiquer à la macro de coller les différentes colonnes aux bons endroits, c'est à dire en décalant à chaque fois la cible. J'ai donc écrit ce code qui s'exécute à l'ouverture d'un fichier "statistiques" :
Code:
Private Sub Workbook_Open()
Application.ScreenUpdating = False ' cache l'exécution du script
ActiveWorkbook.Worksheets("recueil").Activate
' Initialisation
' --------------
Cells.Delete 'supprime le contenu de toutes les cellules
Range("A1") = "Sexe" 'inscrit les titres de lignes
Range("A2") = "nombre d'ateliers"
Range("A3") = "nombre de A"
Range("A4") = "nombre de B"
Range("A5") = "nombre de C"
Range("A6") = "nombre de D"
Range("A7") = "nombre de E"
'.... je vous passe le détail car il y en plus de 200 comme ça
Cells.EntireColumn.AutoFit 'règle la largeur de colonne automatiquement
JaunePale = 13434879 'donne une couleur à la colonne
Range("A:A").Interior.Color = JaunePale
Range("A:A").Font.Bold = True 'caractères en gras pour la colonne A
' Parcours de tous les fichiers
' -----------------------------
Dim chemin As String
chemin = ActiveWorkbook.Path 'définit chemin comme l'endroit où se trouve le fichier excel
ChDir chemin & "\2016" 'choisit de travailler dans le répertoire 2016
ClasseurPatient = Dir(chemin & "\2016\*.xlsm") 'détermine les fichiers concernés par la suite du programme
While Len(ClasseurPatient) > 0 'prend les fichiers un par un
Workbooks.Open ClasseurPatient 'ouvre le fichier
ActiveWorkbook.Worksheets("recap").UsedRange.Cells(1, 3).EntireColumn.Copy 'copie la troisième colonne
Workbooks("Statistiques 2016.xlsm").Activate 'active l'onglet où le collage se fera
ActiveSheet.UsedRange.Cells(1, ActiveSheet.UsedRange.Columns.Count + 1).EntireColumn.Select 'sélectionne la colonne où le collage se fera
ActiveSheet.Paste 'colle la sélection
Application.CutCopyMode = False 'sort du mode couper/coller (pour éviter message presse papier)
Workbooks(ClasseurPatient).Close True 'ferme le fichier, true signifie qu'il choisira "enregistrer" à la demande
ClasseurPatient = Dir 'revient sur le répertoire source
Wend
' Fin des travaux
Cells.EntireColumn.AutoFit 'règle la largeur des colonnes
Sheets("recueil").Select 'sélectionne la feuille "recueil" et copie tout pour coller dans "recueil bis"
Columns("A:ZZ").Select
Selection.Copy
Sheets("recueil bis").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 'collage spécial pour ne prendre que les valeurs (pas de formules)
Application.CutCopyMode = False
Range("A1").Select
ActiveWorkbook.Worksheets("recueil").Activate 'replace les onglets et le curseur
Range("A1").Select
ActiveWorkbook.Worksheets("statistiques").Activate
Range("A1").Select
End Sub
Ce qui m'intrigue, c'est qu'à l'ouverture du fichier "statistiques", le collage des colonnes se fait effectivement avec le décalage de +1 comme indiqué, sauf pour la toute première colonne à coller. Pour celle-ci, il tient compte des précédentes ouvertures de fichiers et décale tout vers la droite. En gros, comme j'ai déjà fait plusieurs essais, la première colonne collée arrive maintenant sur la colonne AA et tout les reste s'affiche correctement sur la droite.
Quelqu'un serait-il capable de m'expliquer ça? Et surtout comment y remédier? C'est un détail car au final, j'arrive à extraire mes statistiques, mais bon après quelques mois d'utilisation, mes colonnes se colleront en ZZ...
Merci d'avance pour vos éclairages!