Bonjour,
Cela fait longtemps que je passe sur ce forum, une véritable source d'inspiration. Mais je suis face à un problème qui m'oblige à poster.
J'ai créé pour le travail une longue macro (très lourde car créé avec l'enregistreur), cela fait plusieurs mois qu'elle fonctionne et évolue au fil du temps. Je quitte mon poste en fin de semaine ne me laissant que quelques jours pour finaliser certains points. (Du coup je suis pressé par le temps et j'ai fais un maximum de recherche sur internet mais rien qui n'a pu me suffire, ou du moins le temps qui m'ait imparti ne m'a pas permit de me poser pour comprendre...)
Nous possédons un fichier "T.B. (vierge)" possédant 9 onglets, et 10 autres fichiers comprenant 8 onglets.
Chaque macro permet de réaliser la compilation d'un des 10 fichiers sur le TBvierge le tout simplifier par une macro "Call". Il y a donc 10 macro + 1 macro "Call"
Les 10 macro reposent sur la même structure (seul les cellules sélectionnées changent).
Dans chaque onglet nous avons une liste (qui varient selon le fichier) et un total. La macro est créé pour prendre une ligne précise (exemple: "C30:V30") qui correspond à la ligne total (il n'y a que des chiffres dans le total) du fichier pour la coller sur le TBvierge.
Selon l'onglet, il peut y avoir 1, 2 voire 4 lignes total.
Le problème provient de la liste. Il peut nous arriver de rajouter une ligne (pour chaque onglet) sur l'un des 10 fichier. Or quand nous le faisons il nous faut le corriger dans la macro (C30:V30 devient donc C31:V31) ce qui prend un temps fou surtout lorsque vous voyez notre macro ci-dessous...
Le but serait donc que je trouve une alternative à cela (en moins de 2 jours :'\ ), par exemple que la macro prenne d'elle même la ligne du total des colonnes C à V. Ainsi en rajoutant une ligne nous ne soyons pas obliger de corriger toute la macro.
(j'ai essayé avec Find "total" mais rien de concluant avec mes connaissances et surtout le temps restant sans compter qu'il y a plusieurs lignes total dans un onglet)
Le second objectif serait évidemment de simplifier ma macro. Idem j'ai tenté des choses avec des variables mais le temps me rattrape.
Dans un premier temps je suis déjà en train d'épurer certaines choses inutiles tel que les "ActiveWindow.SmallScroll Down:=" et "ActiveWindow.ScrollColumn =" présent dans la macro (travail en cours) de plus j'ai trouvé sur votre forum comment simplifier l'écriture des .select (je n'ai modifié pour l'heure que la 1ère ligne de la macro, le travail est également en cours).
Ci-dessous je vous prie de trouver la macro qui s'occupe de la compilation d'un des fichiers.
J'ai mis en note 'compile 1er onglet pour aider à la lecture
Si vous pouviez m'aider pour la compilation du 1er onglet je devrai être en mesure de faire le reste de la macro.
Je vous remercie par avance de bien vouloir vous pencher sur mon cas. J'espère avoir fourni le maximum d'information pour aider à la compréhension de ma demande. Si cela n'est pas fais dans les temps tant pis.
Mais dans tout les cas merci.
La macro du 1er fichier :
Cela fait longtemps que je passe sur ce forum, une véritable source d'inspiration. Mais je suis face à un problème qui m'oblige à poster.
J'ai créé pour le travail une longue macro (très lourde car créé avec l'enregistreur), cela fait plusieurs mois qu'elle fonctionne et évolue au fil du temps. Je quitte mon poste en fin de semaine ne me laissant que quelques jours pour finaliser certains points. (Du coup je suis pressé par le temps et j'ai fais un maximum de recherche sur internet mais rien qui n'a pu me suffire, ou du moins le temps qui m'ait imparti ne m'a pas permit de me poser pour comprendre...)
Nous possédons un fichier "T.B. (vierge)" possédant 9 onglets, et 10 autres fichiers comprenant 8 onglets.
Chaque macro permet de réaliser la compilation d'un des 10 fichiers sur le TBvierge le tout simplifier par une macro "Call". Il y a donc 10 macro + 1 macro "Call"
Les 10 macro reposent sur la même structure (seul les cellules sélectionnées changent).
Dans chaque onglet nous avons une liste (qui varient selon le fichier) et un total. La macro est créé pour prendre une ligne précise (exemple: "C30:V30") qui correspond à la ligne total (il n'y a que des chiffres dans le total) du fichier pour la coller sur le TBvierge.
Selon l'onglet, il peut y avoir 1, 2 voire 4 lignes total.
Le problème provient de la liste. Il peut nous arriver de rajouter une ligne (pour chaque onglet) sur l'un des 10 fichier. Or quand nous le faisons il nous faut le corriger dans la macro (C30:V30 devient donc C31:V31) ce qui prend un temps fou surtout lorsque vous voyez notre macro ci-dessous...
Le but serait donc que je trouve une alternative à cela (en moins de 2 jours :'\ ), par exemple que la macro prenne d'elle même la ligne du total des colonnes C à V. Ainsi en rajoutant une ligne nous ne soyons pas obliger de corriger toute la macro.
(j'ai essayé avec Find "total" mais rien de concluant avec mes connaissances et surtout le temps restant sans compter qu'il y a plusieurs lignes total dans un onglet)
Le second objectif serait évidemment de simplifier ma macro. Idem j'ai tenté des choses avec des variables mais le temps me rattrape.
Dans un premier temps je suis déjà en train d'épurer certaines choses inutiles tel que les "ActiveWindow.SmallScroll Down:=" et "ActiveWindow.ScrollColumn =" présent dans la macro (travail en cours) de plus j'ai trouvé sur votre forum comment simplifier l'écriture des .select (je n'ai modifié pour l'heure que la 1ère ligne de la macro, le travail est également en cours).
Ci-dessous je vous prie de trouver la macro qui s'occupe de la compilation d'un des fichiers.
J'ai mis en note 'compile 1er onglet pour aider à la lecture
Si vous pouviez m'aider pour la compilation du 1er onglet je devrai être en mesure de faire le reste de la macro.
Je vous remercie par avance de bien vouloir vous pencher sur mon cas. J'espère avoir fourni le maximum d'information pour aider à la compréhension de ma demande. Si cela n'est pas fais dans les temps tant pis.
Mais dans tout les cas merci.
La macro du 1er fichier :
Code:
Sub Compilation_1()
'
' Compilation_1 Macro
'
'
Windows("BORDEAUX.xls").Activate 'compile 1er onglet BORDEAUX
Sheets("onglet1").Select
Range("C30:V30").Select
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet1").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C59:E59").Select 'Début bricolage pour récupérer les valeurs de cellules fusionnées
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("T22").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("T22").Select
Application.CutCopyMode = False
Selection.Copy
Range("W9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("V22").Select
Application.CutCopyMode = False
Selection.Copy
Range("X9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("T22:W22").Select
Application.CutCopyMode = False
Selection.ClearContents 'Fin bricolage les 2 cellules sont copiées
Windows("BORDEAUX.xls").Activate 'compile 2ème onglet BORDEAUX
Sheets("onglet2").Select
Range("C32:R32").Select
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet2").Select
Range("C10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C59:E59").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("S27").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("S27").Select
Application.CutCopyMode = False
Selection.Copy
Range("S10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("U27").Select
Application.CutCopyMode = False
Selection.Copy
Range("T10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("S27:V27").Select
Application.CutCopyMode = False
Selection.ClearContents
Windows("BORDEAUX.xls").Activate 'compile 3ème onglet
Sheets("onglet3").Select
Range("C33:Y33").Select
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet3").Select
Range("C10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C61:M61").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("C27").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C92:Y92").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("C50").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C120:Y120").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("C71").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate 'compile 4ème onglet
Sheets("onglet4").Select
Range("C32:P32").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet4").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("R32:S32").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("R9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C59:M59").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("W9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("O59:P59").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("AI9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate 'compile 5ème onglet
Sheets("onglet5").Select
Range("C32:P32").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet5").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("R32:S32").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("R9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C59:K59").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
ActiveWindow.ScrollColumn = 2
Range("X9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("M59:N59").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("AH9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate 'compile 6ème onglet
Sheets("onglet6").Select
Range("C30:P30").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet6").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C56:F56").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Range("Q22").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Q22").Select
Application.CutCopyMode = False
Selection.Copy
Range("Q9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("S22").Select
Application.CutCopyMode = False
Selection.Copy
Range("R9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Q22:T22").Select
Application.CutCopyMode = False
Selection.ClearContents
Windows("BORDEAUX.xls").Activate 'compile 7ème onglet
Sheets("onglet7").Select
Range("C31:P31").Select
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet7").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("BORDEAUX.xls").Activate
Range("C65:U65").Select
Application.CutCopyMode = False
Selection.Copy
Windows("T.B. (vierge).xls").Activate
Sheets("onglet8").Select
Range("C9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Dernière édition: