Rendre un macro particulier, général.

Feitan

XLDnaute Nouveau
Bonjour tout le monde.

Tout d'abord, merci de m'accueillir sur ce forum, sur lequel j'espère trouver l'aide attendue.

Ma question est simple, la voici :

J'ai fait une macro sur Excel (je ne connais rien au VB, je l'ai fait directement en l'enregistrant). Rien de bien compliqué, je réalise plusieurs opérations (je copie une ligne que j'intègre dans mon tableau, puis je fais la somme des 2 lignes du dessus, que j'intègre dans la nouvelle ligne, puis j'efface les deux lignes qui ne me servent plus à rien).

Bref, le truc, c'est que j'aimerai que les opérations que réalisent ma macro s'appliquent sur la ligne que je selectionne, et non sur la ligne que j'ai sélectionné pour faire ma macro, vous voyez ?

Quand j'ai fabriqué ma macro, j'étais par exemple partie de la ligne 8. Du coup, a chaque fois que j'exécute ma macro, l'opération se fait uniquement à partir de la ligne 8 alors que j'aimerai qu'elle se fasse sur la ligne que j'ai sélectionné juste avant de réaliser ma macro, vous voyez ?

Que dois-je modifier ? Voici le texte de ma macro.

Touche de raccourci du clavier: Ctrl+p
'
Rows("7:7").Select
Selection.Copy
Rows("8:8").Select
Selection.Insert Shift:=xlDown
Range("F8").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
Range("F8").Select
Selection.AutoFill Destination:=Range("F8:H8"), Type:=xlFillDefault
Range("F8:H8").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("L8").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
Range("L8").Select
Selection.AutoFill Destination:=Range("L8:N8"), Type:=xlFillDefault
Range("L8:N8").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("M8").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = ""
Rows("6:7").Select
Range("D6").Activate
Selection.Delete Shift:=xlUp
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
End Sub

Merci d'avance pour votre aide.
 

porcinet82

XLDnaute Barbatruc
Re : Rendre un macro particulier, général.

Salut,

Est ce que tu pourrais plutot nous mettre un exemple en pièce jointe avec ce que tu as au départ et le résultat souhaité ?
Je viens d'essayer de modifier ton code, mais disons que ce n'est pas évident car je ne suis pas certains du résultat attendu...

@+
 

MJ13

XLDnaute Barbatruc
Re : Rendre un macro particulier, général.

Bonjour Feitan, Porcinet.

Lorsqu'on enregistre une macro avec l'enregistreur, il est important de choisir le type de référence absolu ou relatif (voir sur la barre d'outils arrêt de l'enregistrement l'icône avec un grile sachant qu'au départ on part en absolu et si on clique sur la grille, on passe en relatif.)

Feitan, dans ton cas, il faut choisir en relatif, mais attention, après, il faut vérifier ce qui se passe en débogant, c'est à dire mettre un stop dans ton code et appuyer sur F8 pour aller en mode pas à pas (avec ctrl+shift+F8, tu peux ensuite poursuivre la macro automatiquement). En plus tu peux modifier ler code si besoin.

L'enregisteur, c'est vraiment une aide utile, mais cela ne fait pas tout. Il faut interpréter voire modifier le code en fonction de ce qu'on veut.
 
Dernière édition:

Feitan

XLDnaute Nouveau
Re : Rendre un macro particulier, général.

Merci pour vos réponses.

MJ, j'ai essayé en mettant sur "relatif", mais la effectivement il y avait un bug dans la macro. Par contre je ne m'y connais pas en vb pour tripatouiller le code pour faire ce que tu expliques après.

Ci-joint mon dossier excel. La macro s'appelle "besoin d'aide" et s'active en avec ctrl + p.

J'ai coloré les deux lignes en jaune et en vert sur laquelle la macro va agir.

Ce que j'aimerai, c'est que ma macro ne s'applique pas sur les lignes en jaune et vert à chaque fois mais sur la ligne que je sélectionne (qui sera l'équivalente de la verte mais ailleurs). (les lignes en jaune et vert sont les lignes que j'ai utilisée pour enregistrer la macro).

Merci beaucoup du temps que vous m'accordez.
 

Pièces jointes

  • Copie de Mise en forme.xls
    48.5 KB · Affichages: 69

Feitan

XLDnaute Nouveau
Re : Rendre un macro particulier, général.

J'ai réussi !

En effectuant en relatif, ça marche, il fallait juste qu'avant que je ne débute le démarrage de l'enregistrement, je sélectionne au préalable la ligne sur laquelle l'action devait se produire :)

Merci pour votre aide en tout cas !
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 445
Membres
103 213
dernier inscrit
Poupoule