VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/colo

Fox

XLDnaute Nouveau
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 :

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:

john

XLDnaute Impliqué
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Bonjour,

Ce serai peut-être bien de joindre un fichier exemple (même juste un extraite) qu'on puisse se rendre compte et tester directement sur le fichier en question !!

John
 

Fox

XLDnaute Nouveau
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Oui ok s'est en cours, il me faut du temps pour faire les modifications, je ne peux envoyer les fichiers en état.
Et le temps de voir si avec les modifications ça marche toujours.
 

Robert

XLDnaute Barbatruc
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Bonjour le fil bonjour le forum,

Fox, je n'ai pas de solution mais juste ton code optimisé (on cherchera une solution quand tu nous fourniras un fichier...). Il faut absolument éviter les Select inutiles qui ne font que ralentir le code. On peut faire la même chose sans aucune sélection :
Code:
Sub Compilation_1()
Dim clS As Workbook 'déclare la variable clS (CLasseur Source)
Dim clC As Workbook 'déclare la variable clC (CLasseur Cible)
Dim oS As Object 'déclare la variable oS (Onglet Source)
Dim oC As Object 'déclare la variable oC (Onglet Cible)


Set clS = Workbooks("BORDEAUX.xls") 'définit le classeur source
Set clC = Workbooks("T.B. (vierge).xls") 'définit le classeur cible
Set oS = clS.Sheets("Onglet1") 'définit l'onglet source
Set oC = clC.Sheets("Onglet1") 'définit l'onglet cible

Application.ScreenUpdating = False 'masque les changements à l'écran

clS.oS.Range("C30:V30").Copy
clC.oC.Range("C9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C59:E59").Copy
clC.oC.Range("T22").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("T22").Copy
clC.oC.Range("W9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("V22").Copy
clC.oC.Range("X9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("T22:W22").ClearContents

Set oS = clS.Sheets("Onglet2") 'redéfinit l'onglet source
Set oC = clC.Sheets("Onglet2") 'redéfinit l'onglet cible
clS.oS.Range("C32:R32").Copy
clC.oC.Range("C10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C59:F59").Copy
clC.oC.Range("S27").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("S27").Copy
clC.oC.Range("S10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("U27").Copy
clC.oC.Range("T10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("S27:V27").ClearContents

Set oS = clS.Sheets("Onglet3") 'redéfinit l'onglet source
Set oC = clC.Sheets("Onglet3") 'redéfinit l'onglet cible
clS.oC.Range("C33:Y33").Copy
clC.oC.Range("C10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C61:M61").Copy
clC.oC.Range("C27").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C92:Y92").Copy
clC.oC.Range("C50").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C120:Y120").Copy
clC.oC.Range("C71").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Set oS = clS.Sheets("Onglet5") 'redéfinit l'onglet source
Set oC = clC.Sheets("Onglet5") 'redéfinit l'onglet cible
clS.oS.Range("C32:P32").Copy
clC.oC.Range("C9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("R32:S32").Copy
clC.oC.Range("R9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C59:M59").Copy
clC.oC.Range("W9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("O59:P59").Copy
clC.oS.Range("AI9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Set oS = clS.Sheets("Onglet6") 'redéfinit l'onglet source
Set oC = clC.Sheets("Onglet6") 'redéfinit l'onglet cible
clS.oS.Range("C32:P32").Copy
clC.oC.Range("C9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("R32:S32").Copy
clC.oC.Range("R9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C59:K59").Copy
clC.oC.Range("X9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("M59:N59").Copy
clC.oC.Range("AH9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Set oS = clS.Sheets("Onglet7") 'redéfinit l'onglet source
Set oC = clC.Sheets("Mouvements collectifs") 'redéfinit l'onglet cible
clS.oS.Range("C30:P30").Copy
clC.oC.Range("C9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C56:F56").Copy
clC.oC.Range("Q22").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("Q22").Copy
clC.oC.Range("Q9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("S22").Copy
clC.oC.Range("R9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clC.oC.Range("Q22:T22").ClearContents

Set oS = clS.Sheets("Onglet8") 'redéfinit l'onglet source
Set oC = clC.Sheets("Onglet8") 'redéfinit l'onglet cible
clS.oS.Range("C31:P31").Copy
clC.oC.Range("C9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
clS.oS.Range("C65:U65").Copy
clC.Sheets("Onglet9").Range("C9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'pourquoi l'onglet9 ?
Application.ScreenUpdating = True 'affiche les changements à l'écran
End Sub
 

Fox

XLDnaute Nouveau
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Voilà le T.B. vierge et le 1er fichier
Il m'a fallu un peu de temps, je suis tombé sur une erreur sur ma macro...

PS: Je viens de voir le message, oui en effet c'est ce que j'avais lu en début de semaine pour le Select. Merci !

De plus j'ai changé le code dans le 1er post (enfin juste des petites corrections, la macro n'aurait pas fonctionné). Pour répondre au pourquoi de l'onglet 9. En fait le dernier onglet comporte 2 tableaux et le total de chaque tableau est collé sur 2 onglets différents du TBvierge.
 

Pièces jointes

  • tb.zip
    55.5 KB · Affichages: 28
Dernière édition:

john

XLDnaute Impliqué
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Si tu veux savoir où se trouve ton premier total sur chaque feuille, tu peux placer à un endroit cette formule et ainsi te servir de la valeur obtenue dans une variable et l'utiliser dans ton code VBA.

=EQUIV("TOTAL";A:A;0)

Ainsi si tu insères des lignes au-dessus du "TOTAL" le nombre sera mis à jour automatiquement ==> donc devra rien changer dans ton code VBA.

A voir ...

John
 

Fox

XLDnaute Nouveau
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Ok en effet ça peut fonctionner
Pour le premier total nous aurions donc :
=EQUIV("TOTAL";A:A;0) qui nous donne la ligne du 1er total
Et admettons que l'on mette la formule en cellule C1, pour obtenir la ligne du second total il suffirait d'écrire :
=EQUIV("TOTAL";A:A;C1) qui nous donne la ligne du 2nd total

Il suffirait donc de reprendre ceci comme variable.
En revanche je n'ai pas les connaissances pour le codage VBA, une idée de ce à quoi cela pourrait ressembler ?
J'ai encore du mal pour définir des variables en début de macro et leur utilisation par la suite.

Et encore merci de vous pencher sur mon cas !
 

john

XLDnaute Impliqué
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Faut que je me penche sur ce cas, car ici la formule cherche juste le premier "TOTAL" et pas les autres !!!

Plus le temps aujourd'hui, mais je regarderai ça demain si personne ne l'a fait d'ici là.

Sinon en VBA la formule est celle-ci ActiveCell.FormulaR1C1 = "=MATCH(""TOTAL"",C[-2],0)" mais si elle est mise en C1 bien entendu !!!

Bonne fin de journée.

John
 

Fox

XLDnaute Nouveau
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Bonjour !

J'ai bien avancé, je pense toucher au but, merci encore pour votre aide.
Il me reste une chose à mettre en place.

Donc je lance
ActiveCell.FormulaR1C1 = "=MATCH(""TOTAL"",C[-2],0)"
afin de trouver ma fameuse ligne "total". Pour l'exemple nous dirons qu'il s'agit de la ligne 30 (de la colonne A forcement).
J'ai donc en C1 le nombre "30" qui apparait.

A présent qu'elle est le codage VBA pour que ma macro utilise ce nombre pour se placer sur la cellule A30 ? svp
Et ainsi être en mesure de terminer =)
 

john

XLDnaute Impliqué
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Bonjour,

Sorry pas eu le temps de jeter un oeil sur le problème car eu bcps de boulot aujourd'hui.

Voici ce que tu demandes.

Cells(1, 3).FormulaR1C1 = "=MATCH(""TOTAL"",C[-2],0)" 'j'insère la formule dans la cellule C1
nbr = Cells(1, 3).Value 'je récupère la valeur de la cellule C1 et la mets dans la variable nbr
cells(nbr,1).select 'ici je sélectionne la cellule où se trouve le premier mot "TOTAL" à titre d'exemple :)

Bonne journée.

John
 
Dernière édition:

Fox

XLDnaute Nouveau
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Merci, et pas de soucis rien qu'hier tu m'as bien aidé pour avancer !
En tâtonnant j'avais fini par trouver (légèrement différent):
toto = Range("C1").Value
ActiveSheet.Cells(toto, 1).Select

Du coup je me suis retrouvé face à un problème que je pensais régler facilement (qui est cette fois le dernier) enfin j'espère :O (il me reste si peu de temps).
En gras mon soucis.

Range("C1").Select
ActiveCell.FormulaR1C1 = "=MATCH(""total"",C[-2],0)"
toto = Range("C1").Value
ActiveSheet.Cells(toto, 1).Select
ActiveCell.Offset(0, 3).Select ' déplace la selection de 3 cases a droite
Selection.Copy ' copie la donnée de la case



Cela marche très bien mais mon soucis étant que je ne veux pas seulement copier la cellule après mettre décaler de 3 colonnes...
Mais copier une plage continue de plusieurs colonne (exemple 5 colonnes).
Grosso modo, la macro active la cellule "total" se décale de 3 colonne sur la droite et doit copier les 5 colonnes (et pas seulement la 1ère).

Une idée ? svp

PS : je pense avoir trouvé ! Je fais les essais.
 

john

XLDnaute Impliqué
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Tu peux sélectionner de cette façon maintenant que tu connais le n° de la ligne : Range("C" & nbr & ":G" & nbr).Select
:eek:
 
Dernière édition:

Fox

XLDnaute Nouveau
Re : VBA - Simplification et Macro capable de fonctionner malgré des ajouts de lign/c

Oui c'est bien ça que j'ai fais ^^
C'était vraiment tout bête je me tracassais pour rien.

En revanche je pensais utiliser la variable "toto" pour avoir la ligne du 2nd "total"
La formule étant cette fois placé par la macro en D1
ActiveCell.FormulaR1C1 = "=MATCH(""total"",C[-3],toto)"
Mais cela ne marche pas, la variable n'est pas reconnu...

Je vais continuer de chercher comment faire reconnaître ma variable.

PS : Trouvé !
Range("D1").Select
ActiveCell.FormulaR1C1 = "=MATCH(""total"",C[-3], " & toto & " )"

Je fais toutes mes modifications et je vous pose ma macro terminée.

Merci pour votre aide.
 
Dernière édition:

Statistiques des forums

Discussions
299 850
Messages
1 979 570
Membres
206 781
dernier inscrit
BERTÉ