Re : Macro ajuster le nombre de ligne
Jérémy à dit:
Merci Bcp Gorfael! Voici donc le code que j'ai mis grâce à toi:
Private Sub worksheet_activate()
Dim X As Long
Dim Y As Long
For X = 16 To Sheets("comparer des matériaux").Range("F65536").End(xlUp).Row - 1
Rows(6 & ":" & 8).Copy
Y = Range("D65536").End(xlUp).Row
Rows(Y + 1 & ":" & (Y + 3)).Insert Shift:=xlDown
Rows(Y + 1 & ":" & (Y + 3)).PasteSpecial Paste:=xlPasteFormulas
Next X
Application.CutCopyMode = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Le problème ce juste que cela se produit dès que j'arrive sur la page, donc si je reviens sur cette page plus tard ça rajoute de nouveaux des lignes! par conséquent il me faudrait un moyen pour que cela ne se produise qu'une seule fois et seulement si on change les données de la premièer feuille! donc je sollicite votre aide à ce propos!
Merci
Jérémy
salut
Les macros automatiques, celles qui se lancent toutes seules, c'est bien, mais il faut en user et ne pas en abuser
😉.
Pour ton cas, pourquoi ne pas faire une macro simple que tu ne lances que quand tu en as besoin ?
1er
😛rivate Sub worksheet_activate(),se lance automatiquement dès que tu reviens dans ta feuille, d'où le problème.
2me : il faut commencer à prendre de bonnes habitudes :
For X = 16 To Sheets("comparer des matériaux").Range("F65536").End(xlUp).Row - 1
Je suppose que tu es sur la feuille "comparer des matériaux". mais si ce n'st pas le cas, tu vas dans le mur : admettons que tu sois sur la feuille 'Test' tes instructions se lisent comme ça:
For X = 16 To Sheets("comparer des matériaux").Range("F65536").End(xlUp).Row - 1
sheets("Test").Rows(6 & ":" & 8).Copy
Y = sheets("Test").Range("D65536").End(xlUp).Row
sheets("Test").Rows(Y + 1 & ":" & (Y + 3)).Insert Shift:=xlDown
sheets("Test").Rows(Y + 1 & ":" & (Y + 3)).PasteSpecial Paste:=xlPasteFormulas
Next X
Application.CutCopyMode = False
sheets("Test").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
soit, en début, tu définis ta feuille, soit tu la définis à chaque instruction (c'est lourd)
donc, tu sélectionnes ou active ta feuille au début, et tant qu'une autre n'est pas sélectionnée ou activée, elle le reste et tu n'as pas besoin de la redéfinir
Sheets("comparer des matériaux").activate
For X = 16 To Range("F65536").End(xlUp).Row - 1
Rows(6 & ":" & 8).Copy etc.....
ou comme elle est définie dans le module liée à la feuille, tu ne le précise pas, c'est ta feuille qui est la feuille active, les Macros Private ne peuvent pas être lancées d'une autre feuille
pour le lancement de ta macro, tu changes son nom, et tu peux faire un bouton (barre d'outils contrôle, pas formulaire) qui la lance
-----------------------------------------------------
pour la macro
Private Sub worksheet_change()
ActiveSheet.Unprotect
Range(D16).Value = 0
End Sub
si la feuille
protégée[/] change, je la déprotège et je mets D16=0
euh.... Si tu protège ta feuille, c'est pour pas la changer, tu veux faire quoi ?