Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro pour insertion de ligne et copie de formule

17 réponses
Avatar
Billylaroche
Bonjour,

Sur la ligne A34, je fais mes entrées de données. Par la suite, je veux que
cette ligne descende d'une ligne, soit en A35 pour pouvoir toujours me
permettre de faire mes nouvelles entrées sur la ligne A34 et ainsi conserver
l'historique de mes entrées. J'ai créer la macro ci-bas pour me permettre
l'ajout de cette ligne. Mon problème est que je n'arrive pas à trouver la
procédure qui me permettrait de conserver mes formules de A34 (maintenant
descendu à A35).

Sub Macro5()

Range("A34:S34").Insert xlShiftDown

End Sub

Je suis désolée, c'est peut-être une procédure très simple mais je suis
débutante en VBA. Merci de votre aide.

--
Billy

7 réponses

1 2
Avatar
Billylaroche
Bonjour,

D'abord j'ai un beau commentaire à faire. Ce forum est génial et j'en
reviens pas à quel point les gens sont sympatiques. C'est vraiment touchant
d'avoir votre appui! Merci beaucoup!

Je viens d'essayer cette nouvelle procédure, mais Erreur d'exécution 1004
Pas de cellules correspondantes. Je crois que ça bogue au chiffre 23 :
[a34:s34].SpecialCells(xlCellTypeConstants, 23).ClearContents

Pour vous mettre dans le contexte, je dois créer une base de donnée qui
défile vers le bas et ainsi toujours laisser place à la ligne du dessus pour
l'intrant des nouvelles données. C'est en fait une fiche d'évaluation où les
colonnes D33 à S33 indiquent les critères d'évaluation, et sur la ligne 34 du
dessous de chaque colonne, j'ai les résultats. À chaque évaluation, la
compilation des données défile vers le bas à l'aide d'une macro (ce qui
permet de garder un historique des évaluations). En définissant ma zone
d'impression, ceci me permet d'afficher non seulement les critères
d'évaluation, mais les résultats obtenus. Comme l'usager de ce fichier n'a
aucune connaissance en Excel, j'essaie de bâtir le fichier (l'interface) le
plus simple possible pour lui. La procédure ci-bas fonctionne à merveille
pour insérer une ligne et descendre les résultats vers le bas, mais comme
elle ne conserve pas la mise en forme, j'ai pensé à faire un report de
cellule de la ligne 35 sur la ligne 34. En gros, ma ligne 34 servirait qu'à
afficher les résultats et l'entrée desdonnées se ferait toujours à la ligne
35 pour ainsi à chaque évaluation descendre vers le bas.

Ouf, je sais pas si je suis claire...

Mais je bute encore une fois sur une chose simple sûrement! Les références
relatives et absolues ne fonctionnent pas. Exemple: En D34, je fais un
report de cellule comme suit =$D$35, mais quand d'insère une ligne entre D34
et D35, ma cellule initiale D35 devient D36 et du coup, ma formule en D34 se
modifie =$D$36 malgré les $! Je comprends pas pourquoi je n'arrive pas à
figer ma formule pour que =$D$35, malgré l'insertion de ligne demeure =$D$35.

Je sais pas si je me complique trop la vie ou si j'ai besoin de vacances,
mais un beau merci à l'avance pour celui qui viendra à mon secours...

Billie

Sub NouvelleLigneAuDessus() 'icône MAJ
' Insère une ligne au-dessus de la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
' Spéciale JPS
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.EntireRow.insert
ActiveCell.Range("A2").Select
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig - 1, 1), Cells(ZtNumLig - 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig - 1, i).HasFormula Then
Cells(ZtNumLig - 1, i).Clear 'Contents(pour que s'annulent aussi
les commentaires)
End If
Next i
Cells(ActiveCell.Row - 1, 1).Select
End Sub



--
Billy



Bonjour,

Sub ausuivant()
With [a34:s34]
.Copy
.Insert Shift:=xlDown
End With
[a34:s34].SpecialCells(xlCellTypeConstants, 23).ClearContents
End sub

'Cordialement
'lSteph



Bonjour,

Mon dernier petit souci est qu'il faudrait de la colonne "A" à "S" que mes
cellules conservent leur mise en forme. Actuellement, avec la procédure
ci-bas, il n'y a que les cellules de la colonne "S" qui demeurent avec leur
bordure.

Merci!





Avatar
isabelle
bonjour billy,

remplace la formule Ó5 par
=INDIRECT(ADRESSE(LIGNE()+1;COLONNE()))

isabelle

Bonjour,

D'abord j'ai un beau commentaire à faire. Ce forum est génial et j'en
reviens pas à quel point les gens sont sympatiques. C'est vraiment touchant
d'avoir votre appui! Merci beaucoup!

Je viens d'essayer cette nouvelle procédure, mais Erreur d'exécution 1004
Pas de cellules correspondantes. Je crois que ça bogue au chiffre 23 :
[a34:s34].SpecialCells(xlCellTypeConstants, 23).ClearContents

Pour vous mettre dans le contexte, je dois créer une base de donnée qui
défile vers le bas et ainsi toujours laisser place à la ligne du dessus pour
l'intrant des nouvelles données. C'est en fait une fiche d'évaluation où les
colonnes D33 à S33 indiquent les critères d'évaluation, et sur la ligne 34 du
dessous de chaque colonne, j'ai les résultats. À chaque évaluation, la
compilation des données défile vers le bas à l'aide d'une macro (ce qui
permet de garder un historique des évaluations). En définissant ma zone
d'impression, ceci me permet d'afficher non seulement les critères
d'évaluation, mais les résultats obtenus. Comme l'usager de ce fichier n'a
aucune connaissance en Excel, j'essaie de bâtir le fichier (l'interface) le
plus simple possible pour lui. La procédure ci-bas fonctionne à merveille
pour insérer une ligne et descendre les résultats vers le bas, mais comme
elle ne conserve pas la mise en forme, j'ai pensé à faire un report de
cellule de la ligne 35 sur la ligne 34. En gros, ma ligne 34 servirait qu'à
afficher les résultats et l'entrée desdonnées se ferait toujours à la ligne
35 pour ainsi à chaque évaluation descendre vers le bas.

Ouf, je sais pas si je suis claire...

Mais je bute encore une fois sur une chose simple sûrement! Les références
relatives et absolues ne fonctionnent pas. Exemple: En D34, je fais un
report de cellule comme suit =$D$35, mais quand d'insère une ligne entre D34
et D35, ma cellule initiale D35 devient D36 et du coup, ma formule en D34 se
modifie =$D$36 malgré les $! Je comprends pas pourquoi je n'arrive pas à
figer ma formule pour que =$D$35, malgré l'insertion de ligne demeure =$D$35.

Je sais pas si je me complique trop la vie ou si j'ai besoin de vacances,
mais un beau merci à l'avance pour celui qui viendra à mon secours...

Billie

Sub NouvelleLigneAuDessus() 'icône MAJ
' Insère une ligne au-dessus de la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
' Spéciale JPS
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.EntireRow.insert
ActiveCell.Range("A2").Select
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig - 1, 1), Cells(ZtNumLig - 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig - 1, i).HasFormula Then
Cells(ZtNumLig - 1, i).Clear 'Contents(pour que s'annulent aussi
les commentaires)
End If
Next i
Cells(ActiveCell.Row - 1, 1).Select
End Sub





Avatar
Billylaroche
Bonjour,

Donc, si je comprends bien...

=INDIRECT(ADRESSE(LIGNE(34)+1;COLONNE(D34)))

Je crois que je suis tout mêlée... ou devrais-je faire
=indirect(adresse(d34+1;d34)))?

Merci d'aider une débutante désespérée comme moi! :)
--
Billy



bonjour billy,

remplace la formule Ó5 par
=INDIRECT(ADRESSE(LIGNE()+1;COLONNE()))

isabelle

Bonjour,

D'abord j'ai un beau commentaire à faire. Ce forum est génial et j'en
reviens pas à quel point les gens sont sympatiques. C'est vraiment touchant
d'avoir votre appui! Merci beaucoup!

Je viens d'essayer cette nouvelle procédure, mais Erreur d'exécution 1004
Pas de cellules correspondantes. Je crois que ça bogue au chiffre 23 :
[a34:s34].SpecialCells(xlCellTypeConstants, 23).ClearContents

Pour vous mettre dans le contexte, je dois créer une base de donnée qui
défile vers le bas et ainsi toujours laisser place à la ligne du dessus pour
l'intrant des nouvelles données. C'est en fait une fiche d'évaluation où les
colonnes D33 à S33 indiquent les critères d'évaluation, et sur la ligne 34 du
dessous de chaque colonne, j'ai les résultats. À chaque évaluation, la
compilation des données défile vers le bas à l'aide d'une macro (ce qui
permet de garder un historique des évaluations). En définissant ma zone
d'impression, ceci me permet d'afficher non seulement les critères
d'évaluation, mais les résultats obtenus. Comme l'usager de ce fichier n'a
aucune connaissance en Excel, j'essaie de bâtir le fichier (l'interface) le
plus simple possible pour lui. La procédure ci-bas fonctionne à merveille
pour insérer une ligne et descendre les résultats vers le bas, mais comme
elle ne conserve pas la mise en forme, j'ai pensé à faire un report de
cellule de la ligne 35 sur la ligne 34. En gros, ma ligne 34 servirait qu'à
afficher les résultats et l'entrée desdonnées se ferait toujours à la ligne
35 pour ainsi à chaque évaluation descendre vers le bas.

Ouf, je sais pas si je suis claire...

Mais je bute encore une fois sur une chose simple sûrement! Les références
relatives et absolues ne fonctionnent pas. Exemple: En D34, je fais un
report de cellule comme suit =$D$35, mais quand d'insère une ligne entre D34
et D35, ma cellule initiale D35 devient D36 et du coup, ma formule en D34 se
modifie =$D$36 malgré les $! Je comprends pas pourquoi je n'arrive pas à
figer ma formule pour que =$D$35, malgré l'insertion de ligne demeure =$D$35.

Je sais pas si je me complique trop la vie ou si j'ai besoin de vacances,
mais un beau merci à l'avance pour celui qui viendra à mon secours...

Billie

Sub NouvelleLigneAuDessus() 'icône MAJ
' Insère une ligne au-dessus de la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
' Spéciale JPS
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.EntireRow.insert
ActiveCell.Range("A2").Select
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig - 1, 1), Cells(ZtNumLig - 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig - 1, i).HasFormula Then
Cells(ZtNumLig - 1, i).Clear 'Contents(pour que s'annulent aussi
les commentaires)
End If
Next i
Cells(ActiveCell.Row - 1, 1).Select
End Sub








Avatar
isabelle
pas exactement, si tu mets la formule =INDIRECT(ADRESSE(LIGNE()+1;COLONNE()))
en cellule A1 cela retourne la valeur de la cellule A2
si tu la mets en D34
cela retourne la valeur de D35,

isabelle


Bonjour,

Donc, si je comprends bien...

=INDIRECT(ADRESSE(LIGNE(34)+1;COLONNE(D34)))

Je crois que je suis tout mêlée... ou devrais-je faire
=indirect(adresse(d34+1;d34)))?

Merci d'aider une débutante désespérée comme moi! :)


Avatar
Billylaroche
Super! Ca marche super bien! C'est parfait! Tout fonctionne!!! Merci beaucoup
pour toutes vos réponses!!!!

--
Billy



pas exactement, si tu mets la formule =INDIRECT(ADRESSE(LIGNE()+1;COLONNE()))
en cellule A1 cela retourne la valeur de la cellule A2
si tu la mets en D34
cela retourne la valeur de D35,

isabelle


Bonjour,

Donc, si je comprends bien...

=INDIRECT(ADRESSE(LIGNE(34)+1;COLONNE(D34)))

Je crois que je suis tout mêlée... ou devrais-je faire
=indirect(adresse(d34+1;d34)))?

Merci d'aider une débutante désespérée comme moi! :)





Avatar
jps
welcome on board....the kid :-)
jps

"Billylaroche" a écrit dans le
message de news:
Bonjour,

D'abord j'ai un beau commentaire à faire. Ce forum est génial et j'en
reviens pas à quel point les gens sont sympatiques. C'est vraiment
touchant
d'avoir votre appui! Merci beaucoup!


Avatar
Billy
Bonjour,

Finalement cette macro fonctionne! Je viens de la réessayer dans un autre
fichier et ca marche merveille!

Merci beaucoup!!!!
--
Billy



Bonjour,

Sub ausuivant()
With [a34:s34]
.Copy
.Insert Shift:=xlDown
End With
[a34:s34].SpecialCells(xlCellTypeConstants, 23).ClearContents
End sub

'Cordialement
'lSteph



Bonjour,

Mon dernier petit souci est qu'il faudrait de la colonne "A" à "S" que mes
cellules conservent leur mise en forme. Actuellement, avec la procédure
ci-bas, il n'y a que les cellules de la colonne "S" qui demeurent avec leur
bordure.

Merci!





1 2