OVH Cloud OVH Cloud

Recopier les formules automatiquement

19 réponses
Avatar
dimitry83
Bonjour,
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha

10 réponses

1 2
Avatar
MichDenis
Bonjour dimitry83,

Si tu utilisais la grille (ou formulaire selon les versions d'excel), cela se fait de façon automatique sans que tu aies besoin
d'intervenir de quelques façons que ce soient. C'est d'ailleurs un de ces avantages !

Si tu donnes un peu de détail sur l'organisation de tes données, et que tu ne désires pas utiliser la Grille, il doit y avoir un
moyen de faire ce travail par programation.


Salutations!



"dimitry83" a écrit dans le message de news:
Bonjour,
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha
Avatar
ChrisV
Bonjour dimitry83,

A partir de la cellule active...

Sub zaza()
Dim aCr As Long
Dim derC As Integer
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
derC = Selection.SpecialCells(xlCellTypeLastCell).Column
Rows(aCr - 1).Copy Destination:=Rows(aCr)
ActiveCell(2).Select
Do
If Not ActiveCell.HasFormula Then ActiveCell.Clear
ActiveCell.Offset(0, 1).Select
Loop While ActiveCell.Column <= derC
Range("A" & aCr).Select
End Sub


ChrisV


"dimitry83" a écrit dans le message de news:

Bonjour,
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha


Avatar
ChrisV
Un peu plus rapide...

Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
Rows(ActiveCell(3)).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub


ChrisV


"ChrisV" a écrit dans le message de news:

Bonjour dimitry83,

A partir de la cellule active...

Sub zaza()
Dim aCr As Long
Dim derC As Integer
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
derC = Selection.SpecialCells(xlCellTypeLastCell).Column
Rows(aCr - 1).Copy Destination:=Rows(aCr)
ActiveCell(2).Select
Do
If Not ActiveCell.HasFormula Then ActiveCell.Clear
ActiveCell.Offset(0, 1).Select
Loop While ActiveCell.Column <= derC
Range("A" & aCr).Select
End Sub


ChrisV


"dimitry83" a écrit dans le message de news:

Bonjour,
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha






Avatar
ChrisV
Grrrrr... parti trop vite !

Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
On Error Resume Next
' au cas zou
Rows(ActiveCell(2).Row).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub


ChrisV
[allez hop... au dodo !]


"ChrisV" a écrit dans le message de news:
Otd%
Un peu plus rapide...

Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
Rows(ActiveCell(3)).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub


ChrisV


"ChrisV" a écrit dans le message de news:

Bonjour dimitry83,

A partir de la cellule active...

Sub zaza()
Dim aCr As Long
Dim derC As Integer
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
derC = Selection.SpecialCells(xlCellTypeLastCell).Column
Rows(aCr - 1).Copy Destination:=Rows(aCr)
ActiveCell(2).Select
Do
If Not ActiveCell.HasFormula Then ActiveCell.Clear
ActiveCell.Offset(0, 1).Select
Loop While ActiveCell.Column <= derC
Range("A" & aCr).Select
End Sub


ChrisV


"dimitry83" a écrit dans le message de news:

Bonjour,
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha










Avatar
JièL Goubert
Bonjoir(c) ChrisV

Le 10/04/2005 02:08 vous avez écrit ceci :
Grrrrr... parti trop vite !


dubitatif toi aussi ? ;-))))))))))

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/

Avatar
J
Bonjour ChrisV
ton code me semble insérer une ligne *avant* la dernière,
mais si on veut "ajouter" une ligne *après* la dernière, ne devrait-on pas
plutôt écrire :
'----------------
Sub zazaPlus1()
Dim aCr As Long
Application.ScreenUpdating = False
' ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr).Select
Rows(aCr).Copy Destination:=Rows(aCr + 1)
On Error Resume Next
' au cas zou
Rows(ActiveCell(2).Row).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr + 1).Select
End Sub
'-----------------

Question subsidiaire:
si on veut que la proc se déclenche automatiquement, par exemple après une
saisie manuelle dans la cellule B de la dernière ligne contenant des
formules,
que devrait-on mettre dans ThisWorkBook??

merci à toi
amicalement
J@@



"ChrisV" <
Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
On Error Resume Next
' au cas zou
Rows(ActiveCell(2).Row).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub

ChrisV
[allez hop... au dodo !]

"ChrisV" <
Un peu plus rapide...

Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
Rows(ActiveCell(3)).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub

"ChrisV"
Bonjour dimitry83,
A partir de la cellule active...

Sub zaza()
Dim aCr As Long
Dim derC As Integer
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
derC = Selection.SpecialCells(xlCellTypeLastCell).Column
Rows(aCr - 1).Copy Destination:=Rows(aCr)
ActiveCell(2).Select
Do
If Not ActiveCell.HasFormula Then ActiveCell.Clear
ActiveCell.Offset(0, 1).Select
Loop While ActiveCell.Column <= derC
Range("A" & aCr).Select
End Sub

"dimitry83" <
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha










Avatar
ChrisV
Salut J@@,

...ne devrait-on pas plutôt écrire :


Je ne comprends pas bien le "plutôt"...
car lorsque tu inserts une ligne, la nouvelle ligne créée se situe-t-elle au
dessus ou au dessous de la cellule à partir de laquelle tu as lancer la
commande...? ;-)

La proc. proposée (insertion d'une ligne au dessus) se comporte donc comme
l'aurait fait Excel...

En ce qui concerne la question subsidiaire, si j'ai bien compris, nul besoin
d'une procédure événementielle, Excel sait le faire tout seul...
Outils/Options.../Modification/Etendre les formules et formats de plage de
données...


ChrisV


"J@@" a écrit dans le message de news:
%
Bonjour ChrisV
ton code me semble insérer une ligne *avant* la dernière,
mais si on veut "ajouter" une ligne *après* la dernière, ne devrait-on pas
plutôt écrire :
'----------------
Sub zazaPlus1()
Dim aCr As Long
Application.ScreenUpdating = False
' ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr).Select
Rows(aCr).Copy Destination:=Rows(aCr + 1)
On Error Resume Next
' au cas zou
Rows(ActiveCell(2).Row).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr + 1).Select
End Sub
'-----------------

Question subsidiaire:
si on veut que la proc se déclenche automatiquement, par exemple après
une saisie manuelle dans la cellule B de la dernière ligne contenant des
formules,
que devrait-on mettre dans ThisWorkBook??

merci à toi
amicalement
J@@



"ChrisV" <
Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
On Error Resume Next
' au cas zou
Rows(ActiveCell(2).Row).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub

ChrisV
[allez hop... au dodo !]

"ChrisV" <
Un peu plus rapide...

Sub zaza()
Dim aCr As Long
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
Rows(aCr - 1).Copy Destination:=Rows(aCr)
Rows(ActiveCell(3)).SpecialCells(xlCellTypeConstants, 23) _
.ClearContents
Range("A" & aCr).Select
End Sub

"ChrisV"
Bonjour dimitry83,
A partir de la cellule active...

Sub zaza()
Dim aCr As Long
Dim derC As Integer
Application.ScreenUpdating = False
ActiveCell.EntireRow.Insert
aCr = ActiveCell.Row
Range("A" & aCr - 1).Select
derC = Selection.SpecialCells(xlCellTypeLastCell).Column
Rows(aCr - 1).Copy Destination:=Rows(aCr)
ActiveCell(2).Select
Do
If Not ActiveCell.HasFormula Then ActiveCell.Clear
ActiveCell.Offset(0, 1).Select
Loop While ActiveCell.Column <= derC
Range("A" & aCr).Select
End Sub

"dimitry83" <
J'ai un tableau Excel dans lequel je compte insérer régulièrement des
nouvelles lignes. Est-il possible que les formules contenues dans les
cellules au dessus de la ligne insérée s'y recopient automatiquement
(en respectant bien sûr les adresses relatives employées dans les
formules)?
Merci d'avance
Natacha














Avatar
ChrisV
Salut JièL,

Y'a des jours (nuits...) comme ça...! ;-)


ChrisV


"JièL Goubert" a écrit dans le
message de news: %
Bonjoir(c) ChrisV

Le 10/04/2005 02:08 vous avez écrit ceci :
Grrrrr... parti trop vite !


dubitatif toi aussi ? ;-))))))))))

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/



Avatar
dimitry83
Merci pour ta proposition, ChrisV !
En fait, les lignes que je vais insérer dans mon tableau ne sont pas à
la fin, mais un peu de partout. Si tu veux, ça ressemble à une liste
de pièces d'une maison (de 1 à 40) (enfin, c'est peut être un peu
beaucoup pour une maison mais on s'en fout) et je rajoute manuellement
des objets dans certaines pièces. P.ex. aujourd'hui je vais rajouter
l'objet X dans la pièce 4. Donc, j'insère une ligne manuellement parmi
les lignes de la pièce 4 et je marque le nom de l'objet inséré (X). Et
je veux que dans les autres colonnes de cette ligne les formules se
recopient automatiquement à partir des colonnes correspondantes de la
ligne précédente.
J'ai essayé moi-même de faire une petite macro, un peu comme ça:

Sub Ma_macro()
'
' ' Pour recopier les formules

For i = 6 To 384 'c'est les lignes concernées du tableau actuel
If Range("Expo!G" & i) = "" Then
Range("Expo!G" & i - 1).Select
Selection.AutoFill Destination:=Range("Expo!G" & i-1: i),
Type:=xlFillDefault
i = i + 1
End If
Next
End Sub

mais ça fait juste 2 jour que j'utilise les macros, donc celle-ci ne
marche pas, erreur de syntaxe avec Autofill
Avatar
dimitry83
Pourrais-je me servir de FillDown ?
Prendre la formule de la cellule juste au dessus de la cellule
concernée et recopier?
La seule chose, c'est que j'aurai à faire la même chose pour au moins
une dizaine de colonnes (de G à S).
1 2