OVH Cloud OVH Cloud

Copie de formule automatique

7 réponses
Avatar
Yves Trudel
Bonjour
Je cherche à créer une macro qui s'active automatiquement lorsque
l'utilisateur insère une ligne. En gros, la macro copierait la formule de la
ligne précédente dans la nouvelle ligne. Ça se fait?

Merci d'avance
Yves Trudel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03

7 réponses

Avatar
Philippe
hello,

dans le code de la feuille, il faut mettre :

Private Sub Worksheet_Change(ByVal Target As Range)
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
End Sub

-----Message d'origine-----
Bonjour
Je cherche à créer une macro qui s'active automatiquement
lorsque

l'utilisateur insère une ligne. En gros, la macro
copierait la formule de la

ligne précédente dans la nouvelle ligne. Ça se fait?

Merci d'avance
Yves Trudel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:
2004-05-03



.



Avatar
Yves Trudel
Merci Philippe, j'ai inséré la macro dans la feuille (pas dans un module) et
effectivement quand j'insère une ligne, la macro copie toute la ligne
précédente. Le problème c'est qu'elle copie toutes les informations et pas
seulement les formules, en soit ce n'est pas trop grave, mais le pire c'est
que la macro tourne toujours en boucle sans s'arrêter. Tu as une
explication?

Merci d'avance

Yves
"Philippe" a écrit dans le message de
news:1043e01c43f46$4576f120$
hello,

dans le code de la feuille, il faut mettre :

Private Sub Worksheet_Change(ByVal Target As Range)
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
End Sub

-----Message d'origine-----
Bonjour
Je cherche à créer une macro qui s'active automatiquement
lorsque

l'utilisateur insère une ligne. En gros, la macro
copierait la formule de la

ligne précédente dans la nouvelle ligne. Ça se fait?

Merci d'avance
Yves Trudel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:
2004-05-03



.




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03

Avatar
Daniel.M
Hello,

Il faut désactiver les événements avant la copie et les réactiver ensuite sinon
l'action de copie invoque un nouvel Worksheet_Change et ainsi de suite:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
Application.EnableEvents = True
End Sub


Salutations,

Daniel M.

"Yves Trudel" wrote in message
news:
Merci Philippe, j'ai inséré la macro dans la feuille (pas dans un module) et
effectivement quand j'insère une ligne, la macro copie toute la ligne
précédente. Le problème c'est qu'elle copie toutes les informations et pas
seulement les formules, en soit ce n'est pas trop grave, mais le pire c'est
que la macro tourne toujours en boucle sans s'arrêter. Tu as une
explication?

Merci d'avance

Yves
"Philippe" a écrit dans le message de
news:1043e01c43f46$4576f120$
hello,

dans le code de la feuille, il faut mettre :

Private Sub Worksheet_Change(ByVal Target As Range)
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
End Sub

-----Message d'origine-----
Bonjour
Je cherche à créer une macro qui s'active automatiquement
lorsque

l'utilisateur insère une ligne. En gros, la macro
copierait la formule de la

ligne précédente dans la nouvelle ligne. Ça se fait?

Merci d'avance
Yves Trudel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:
2004-05-03



.




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03





Avatar
Yves Trudel
Mouais, ça va mal...
J'ai intégré ta macro et ça fonctionne bizarrement:
Quand j'insère une ligne, effectivement la ligne et les formules se
répètent. Mais si je veux l'effacer, c'est impossible. Si J'essaie d'insérer
d'autres lignes, il n'y a pas de problèmes, je peux en insérer autant que je
veux. Je peux ensuite effacer chacune des nouvelles lignes ajoutées jusqu'à
ce qu'il en reste 2 (l'originale et la première ligne ajoutée). À ce moment,
c'est comme si la ligne s'effaçait, mais se recréait aussitôt...
Et puis après une séquence inconnue, la macro cesse complètement de
fonctionner.
...Je ne désespère pas!
Merci encore de votre aide

"Daniel.M" a écrit dans le message de
news:%
Hello,

Il faut désactiver les événements avant la copie et les réactiver ensuite
sinon

l'action de copie invoque un nouvel Worksheet_Change et ainsi de suite:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
Application.EnableEvents = True
End Sub


Salutations,

Daniel M.

"Yves Trudel" wrote in message
news:
Merci Philippe, j'ai inséré la macro dans la feuille (pas dans un
module) et


effectivement quand j'insère une ligne, la macro copie toute la ligne
précédente. Le problème c'est qu'elle copie toutes les informations et
pas


seulement les formules, en soit ce n'est pas trop grave, mais le pire
c'est


que la macro tourne toujours en boucle sans s'arrêter. Tu as une
explication?

Merci d'avance

Yves
"Philippe" a écrit dans le message
de


news:1043e01c43f46$4576f120$
hello,

dans le code de la feuille, il faut mettre :

Private Sub Worksheet_Change(ByVal Target As Range)
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
End Sub

-----Message d'origine-----
Bonjour
Je cherche à créer une macro qui s'active automatiquement
lorsque

l'utilisateur insère une ligne. En gros, la macro
copierait la formule de la

ligne précédente dans la nouvelle ligne. Ça se fait?

Merci d'avance
Yves Trudel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:
2004-05-03



.




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03








---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03



Avatar
Daniel.M
Salut Yves,

Je ne réagissais qu'à la partie de ton énoncé qui requestionnait l'effet 'boucle
infinie' de la proc.

Puisque la procédure comme telle ne fait pas le travail, tu peux essayer
celle-là.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, C As Range
If Application.CountA(Cells(Target.Row, "A").Resize(1, 5)) = 5 Then
On Error Resume Next
Set Plage = Rows(Target.Row).SpecialCells(xlFormulas)
On Error GoTo 0
If Not Plage Is Nothing Then
Application.EnableEvents = False
For Each C In Plage.Cells
C.Copy C(2, 1)
Next C
Application.EnableEvents = True
End If
End If
End Sub

Je suis sûr que c'est loin d'être parfait. On pourrait notamment prévoir
d'autres cas.

Tu pourrais aussi mettre ceci dans le code de ton classeur (Workbook) :

Private Sub Workbook_Open()
Application.EnableEvents = True
End Sub

Salutations,

Daniel M.

"Yves Trudel" wrote in message
news:%
Mouais, ça va mal...
J'ai intégré ta macro et ça fonctionne bizarrement:
Quand j'insère une ligne, effectivement la ligne et les formules se
répètent. Mais si je veux l'effacer, c'est impossible. Si J'essaie d'insérer
d'autres lignes, il n'y a pas de problèmes, je peux en insérer autant que je
veux. Je peux ensuite effacer chacune des nouvelles lignes ajoutées jusqu'à
ce qu'il en reste 2 (l'originale et la première ligne ajoutée). À ce moment,
c'est comme si la ligne s'effaçait, mais se recréait aussitôt...
Et puis après une séquence inconnue, la macro cesse complètement de
fonctionner.
...Je ne désespère pas!
Merci encore de votre aide

"Daniel.M" a écrit dans le message de
news:%
Hello,

Il faut désactiver les événements avant la copie et les réactiver ensuite
sinon

l'action de copie invoque un nouvel Worksheet_Change et ainsi de suite:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
Application.EnableEvents = True
End Sub


Salutations,

Daniel M.

"Yves Trudel" wrote in message
news:
Merci Philippe, j'ai inséré la macro dans la feuille (pas dans un
module) et


effectivement quand j'insère une ligne, la macro copie toute la ligne
précédente. Le problème c'est qu'elle copie toutes les informations et
pas


seulement les formules, en soit ce n'est pas trop grave, mais le pire
c'est


que la macro tourne toujours en boucle sans s'arrêter. Tu as une
explication?

Merci d'avance

Yves
"Philippe" a écrit dans le message
de


news:1043e01c43f46$4576f120$
hello,

dans le code de la feuille, il faut mettre :

Private Sub Worksheet_Change(ByVal Target As Range)
Rows(Target.Row - 1).Copy
Rows(Target.Row).PasteSpecial xlPasteFormulas
End Sub

-----Message d'origine-----
Bonjour
Je cherche à créer une macro qui s'active automatiquement
lorsque

l'utilisateur insère une ligne. En gros, la macro
copierait la formule de la

ligne précédente dans la nouvelle ligne. Ça se fait?

Merci d'avance
Yves Trudel


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:
2004-05-03



.




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03








---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03







Avatar
Daniel.M
Yves,

J'ai oublié que cette procédure considère qu'une ligne est ajoutée lorsque les
colonnes A à E (les cinq premières) ont été renseignées. TA définition est
sûrement différente mais il suffit d'adapter la ligne Application.CountA().

J'attends ton feedback.

Salutations,

Daniel M.
Avatar
Yves Trudel
Merci Daniel,
J'ai dû sauter sur d'autres problèmes et laisser de côté celui-là.
Deux petits mots pour te dire que j'ai essayé ton code et je ne parviens
toujours pas à faire fonctionner la macro. Pour le moment je me suis créé un
bouton qui active une petite macro qui fait ce que j'espérais.
Je te l'envoie si par hasard tu as le temps de voir la source du problème.

En gros cependant je redoute que le problème se situe dans ma compréhension
des emplacements de macro... en plus de mon ignorance de beaucoup de
fonctions macro...
Au plaisir

Yves T

Application.ScreenUpdating = False
Dim nbr As Integer
Dim origine As String
origine = ActiveCell.Address


Cells.Find(What:="total des heures", After:¬tiveCell, LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:úlse).Activate
ActiveCell.Offset(0, 5).Range("a1").Select
nbr = ActiveCell.Row - 3
Range(origine).Select
If ActiveCell.Row < 3 Or ActiveCell.Row > nbr Then
MsgBox (" Vous ne pouvez pas ajouter de ligne dans cette zone" & vbLf &
"Vous pouvez ajouter des lignes à partir de la ligne no 3 jusqu'à 3 lignes
au-dessus du total des heures")
Exit Sub
End If
Selection.EntireRow.Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset(1, 0).Select
ActiveCell.EntireRow.Copy
ActiveCell.Offset(-1, 0).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Range("A1:E1").Select
Selection.ClearContents
ActiveCell.Offset(0, 5).Range("A1:B1").Select
Selection.ClearContents
ActiveCell.Offset(0, 3).Range("A1").Select
Selection.ClearContents
ActiveCell.Offset(0, 2).Range("A1:CB1").Select
Selection.ClearContents
ActiveCell.Offset(0, -10).Range("A1").Select
End Sub

"Daniel.M" a écrit dans le message de
news:OrZ%
Yves,

J'ai oublié que cette procédure considère qu'une ligne est ajoutée lorsque
les

colonnes A à E (les cinq premières) ont été renseignées. TA définition est
sûrement différente mais il suffit d'adapter la ligne
Application.CountA().


J'attends ton feedback.

Salutations,

Daniel M.





---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 2004-05-03