Bonjour,
Je suis une newbie en VBA, mais j'ai tout de même essayé de réaliser un code.
Tout d'abord, pour présenter le contexte: je suis en stage, et doit réaliser un outil de gestions où toutes les données se trouvent dans différents classeurs excel dans un même dossier.
La macro que je dois réaliser doit donc aller chercher la même ligne d'information dans tous les classeurs du dossier puis les inscrire dans un tableau récapitulatif. Ceci, j'avais réussi à le faire.
Seulement, il y a un hic: les classeurs excels contiennent des données de "différente importance" c'est pour cela qu'il y a une case (toujours la même) dans les classeurs qui les classe en importance 1, 2 ou 3. Et c'est là que mon programme bug.
Car les projets d'importance 1 doivent être mis les uns à la suite des autres dans le tableau, de même pour les autres importances...
J'ai donc essayé de codé ceci avec des "case". Théoriquement, je pense que ça marche mais en pratique, le programme oublie des fichiers quand il fonctionne, il me manque donc des données à la fin...
Comme je ne m'y connais pas trop trop, je me demandais si vous ne pouviez pas m'aider à regarder si je n'ai pas fait une erreur de débutante ou s'il y avait une façon plus simple de faire...
Je vous en remercie d'avance.
Voici mon code:
Option Compare Binary
Public Sub Programme1()
Application.ScreenUpdating = False '<- inhibe la fonction de rafraichissement de l'affichage dans excel (evite le clignotement de l'écran) et augmente aisni la rapidité de la fonction...
donnee1 = 0 '<- initialisation de la variable de retour
donnee2 = 0
donnee3 = 0
Dim importance As Byte
chemin = "C:\Users\JQ1214\Desktop\base de données\" '<- initialisation de la variable chemin donnant l'accès au repertoire ou sont les fichiers XL
nom = Dir(chemin & "*.xlsx") '<- la fonction dir(*.xls) permet de trouver la 1ère occurrence de fichier xls et renvoie le nom du fichier s'il existe.
Do While nom <> "" '<- le do while permet de boucler tant qu'une occurrence de fichier xls est trouvée (quand il n'y en a plus, la fonction dir() renvoie "")
Set mon_fichier = Excel.Workbooks.Open(chemin & nom) '<- on ouvre l'occurrence trouvée ... ce fichier pointe sur une variable objet qui est "mon_fichier" (utile pour plus tard)
importance = mon_fichier.Sheets(1).Cells(7, 2) ' on définit la valeur de la variable importance
Select Case (importance)
Case Is = 1 ' si c'est de première importance
donnee1 = mon_fichier.Sheets(1).Range("B7:L7") '<- on recupère la valeur désirée
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Range("B8:L8") = donnee1 'on colle la valeur trouvée à un endroit précis
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Rows(7).EntireRow.Insert 'on insère une ligne au dessus de la valeur copiée
Case Is = 2 ' si c'est d'importance secondaire
donnee2 = mon_fichier.Sheets(1).Range("B7:L7") '<- on recupère la valeur désirée
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Range("B9:L9") = donnee2 'on colle la valeur trouvée à un endroit précis
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Rows(8).EntireRow.Insert 'on insère une ligne au dessus de la valeur copiée
Case Is = 3 ' si c'est d'importance moindre
donnee3 = mon_fichier.Sheets(1).Range("B7:L7") '<- on recupère la valeur désirée
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Range("B10:L10") = donnee3 'on colle la valeur trouvée à un endroit précis
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Rows(9).EntireRow.Insert 'on insère une ligne au dessus de la valeur copiée
Case Else
MsgBox "remplissez la case importance dans le fichier"
End Select
nom = Dir() '<- on rècupère l'occurrence suivante ...voir plus bas
mon_fichier.Close '<- on ferme le fichier ouvert un peu plus haut.
Loop '<- on repète l'action autant de fois que de fichiers xls existent
Application.ScreenUpdating = True '<- reactive la fonction de rafraichissement de l'affichage dans excel
End Sub
Je suis une newbie en VBA, mais j'ai tout de même essayé de réaliser un code.
Tout d'abord, pour présenter le contexte: je suis en stage, et doit réaliser un outil de gestions où toutes les données se trouvent dans différents classeurs excel dans un même dossier.
La macro que je dois réaliser doit donc aller chercher la même ligne d'information dans tous les classeurs du dossier puis les inscrire dans un tableau récapitulatif. Ceci, j'avais réussi à le faire.
Seulement, il y a un hic: les classeurs excels contiennent des données de "différente importance" c'est pour cela qu'il y a une case (toujours la même) dans les classeurs qui les classe en importance 1, 2 ou 3. Et c'est là que mon programme bug.
Car les projets d'importance 1 doivent être mis les uns à la suite des autres dans le tableau, de même pour les autres importances...
J'ai donc essayé de codé ceci avec des "case". Théoriquement, je pense que ça marche mais en pratique, le programme oublie des fichiers quand il fonctionne, il me manque donc des données à la fin...
Comme je ne m'y connais pas trop trop, je me demandais si vous ne pouviez pas m'aider à regarder si je n'ai pas fait une erreur de débutante ou s'il y avait une façon plus simple de faire...
Je vous en remercie d'avance.
Voici mon code:
Option Compare Binary
Public Sub Programme1()
Application.ScreenUpdating = False '<- inhibe la fonction de rafraichissement de l'affichage dans excel (evite le clignotement de l'écran) et augmente aisni la rapidité de la fonction...
donnee1 = 0 '<- initialisation de la variable de retour
donnee2 = 0
donnee3 = 0
Dim importance As Byte
chemin = "C:\Users\JQ1214\Desktop\base de données\" '<- initialisation de la variable chemin donnant l'accès au repertoire ou sont les fichiers XL
nom = Dir(chemin & "*.xlsx") '<- la fonction dir(*.xls) permet de trouver la 1ère occurrence de fichier xls et renvoie le nom du fichier s'il existe.
Do While nom <> "" '<- le do while permet de boucler tant qu'une occurrence de fichier xls est trouvée (quand il n'y en a plus, la fonction dir() renvoie "")
Set mon_fichier = Excel.Workbooks.Open(chemin & nom) '<- on ouvre l'occurrence trouvée ... ce fichier pointe sur une variable objet qui est "mon_fichier" (utile pour plus tard)
importance = mon_fichier.Sheets(1).Cells(7, 2) ' on définit la valeur de la variable importance
Select Case (importance)
Case Is = 1 ' si c'est de première importance
donnee1 = mon_fichier.Sheets(1).Range("B7:L7") '<- on recupère la valeur désirée
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Range("B8:L8") = donnee1 'on colle la valeur trouvée à un endroit précis
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Rows(7).EntireRow.Insert 'on insère une ligne au dessus de la valeur copiée
Case Is = 2 ' si c'est d'importance secondaire
donnee2 = mon_fichier.Sheets(1).Range("B7:L7") '<- on recupère la valeur désirée
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Range("B9:L9") = donnee2 'on colle la valeur trouvée à un endroit précis
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Rows(8).EntireRow.Insert 'on insère une ligne au dessus de la valeur copiée
Case Is = 3 ' si c'est d'importance moindre
donnee3 = mon_fichier.Sheets(1).Range("B7:L7") '<- on recupère la valeur désirée
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Range("B10:L10") = donnee3 'on colle la valeur trouvée à un endroit précis
Excel.Workbooks("Outil plan de compte.xlsm").Sheets(2).Rows(9).EntireRow.Insert 'on insère une ligne au dessus de la valeur copiée
Case Else
MsgBox "remplissez la case importance dans le fichier"
End Select
nom = Dir() '<- on rècupère l'occurrence suivante ...voir plus bas
mon_fichier.Close '<- on ferme le fichier ouvert un peu plus haut.
Loop '<- on repète l'action autant de fois que de fichiers xls existent
Application.ScreenUpdating = True '<- reactive la fonction de rafraichissement de l'affichage dans excel
End Sub