Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

insertion de lignes et préservation des formules

ccdouble6

XLDnaute Occasionnel
Bonjour tout le monde !!

Utilisateur d'Excel 2000, je commence à tater des macros, mais pas encore à un niveau bien élevé hélas...
J'ai un souci avec la macro suivante qu'on m'a refilé et qui doit normalement me permettre d'insérer des lignes qui préservent mes formules et mes formats sans garder les saisies :

Sub NouvelleLigneAuDessus()
' Insère une ligne au-dessus de la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
'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
End If
Next i
End Sub


Lorsque j'utilise cette macro, Excel ne recopie pas de façon identique certaines formules bien particulières :
Ce sont les formules qui se basent sur des cellules de leur propre colonne qui posent problème.
Exemple : j'ai dans une colonne de A1 à A35 la formule suivante :
=LC(-1)+L(-1)C
j'insère une ligne au-dessus de A26, la nouvelle A25, et bien la macro fait que A26 va désormais chercher la donnée de A24 et j'ai =(LC-1)+(L-2C) à la fois dans A26 mais aussi dans A25 puisque la ligne recopie exactement les formules d'en dessous, d'où un décalage des données évidemment.

Comment faire pour que les formules des lignes existantes ne changent pas d'elles-même quand j'insère une ligne par cette macro? Y a-t-il qqchose à corriger dans cette macro???
Merci d'avance pour votre précieuse aide, je suis largué...
A+ !!
 

Papaye

XLDnaute Occasionnel
Re : insertion de lignes et préservation des formules

Bonjour CCdouble,

Visiblement ta macro ne sert pas à grand chose.
Si je comprends bien ce que tu écris ... il en résulte qu'en fait tu récupères en A25 (ta nouvelle ligne) les formules (donc les données) qui se trouvent maintenant en A26 (ton ancienne A25).
Du coup, ta demande (sous réserve de ce que j'ai compris) consiste à insérer une ligne en dessous (et non au-dessus de ta cellule active), d'y recopier les formules et de tester si une de ces cellules ne contient pas de formules, alors on l'efface.
J'ai bon ?
 

Monique

Nous a quitté
Repose en paix
Re : insertion de lignes et préservation des formules

Bonjour,

En modifiant les formules

Au lieu de faire référence à B4 quand tu es en B5
tu fais référence à la cellule du dessus : Decaler(B5;-1;0)

En B5 :
=A5+DECALER(B5;-1;0)
ou bien idem :
=LC(-1)+DECALER(LC;-1;0)
 

ccdouble6

XLDnaute Occasionnel
Re : insertion de lignes et préservation des formules

Bonjour,

Enfin pu me reconnecter
Alors tout d'abord pour Papaye : j'ai bien testé la macro et elle insère bien une nouvelle ligne au-dessus, après oui elle efface le contenu lorsqu'elle ne trouve pas de formule.

Monique merci pour cette précision mais je me demande si ça va pas aussi décaler dans les autres situations : actuellement la macro fonctionne à merveille pour les formules se basant sur des cellules de même ligne et d'AUTRES colonnes, ce ne sont que les formules qui se basent sur la même colonne (cellule juste au-dessus en général) qui posent problème
Par ailleurs où dois-je mettre dans la macro le texte =LC(-1)+DECALER(LC;-1;0) ???
Merci d'avance !!!
 

Monique

Nous a quitté
Repose en paix
Re : insertion de lignes et préservation des formules

Bonjour,

Je ne parlais pas de la macro, mais des formules.

Si, en B5, tu veux la valeur de B4
en principe, tu tapes =B4

Si tu insères une ligne
et que tu veux faire référence à la cellule juste au-dessus
et non à la cellule qui est passée 2 lignes au-dessus,
tu peux changer la formule.
en B5, tu tapes :
=DECALER(B5;-1;0)

Decaler(cellule où tu es, -1 ligne; 0 colonne)

Si, en B5, tu veux la valeur de A5 + B4 + 1,
=A5+DECALER(B5;-1;0)+1
 

ccdouble6

XLDnaute Occasionnel
Re : insertion de lignes et préservation des formules

Merci Monique !!!

Ah oui j'avais pas compris c'est super vu comme ça !! je m'en vais vite tester la chose.
Merci beaucoup, c'est génial hahaha !!!
@+!!
 

ccdouble6

XLDnaute Occasionnel
Re : insertion de lignes et préservation des formules

Bonjour le forum!!

Voilà j'ai un autre souci qui s'est fait jour hier : j'ai voulu placer la même macro dans une autre feuille, et quand je clique sur la zone de texte qui sert de "bouton" j'ai un message d'erreur VBA qui m'apparaît, ça dit juste "400".

Je ne comprends pas, pourtant je fais exactement la même chose que sur l'autre feuille où la manip marche impeccablement, en plus j'ai vérifié que mon "bouton" va bien chercher la macro de LA feuille où il se trouve et pas sur l'autre feuille.

N'a-t-on pas le droit de placer une même macro dans plusieurs feuilles? Ou y a-t-il qqchose à faire de particulier? Je suis largué une fois de plus

Revoici le texte de la macro si besoin :
(je me demande au passage si le guillemet simple de la ligne4 est utile...)

Sub NouvelleLigneAuDessus()
' Insère une ligne au-dessus de la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
'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).ClearContents
End If
Next i
End Sub


Merci d'avance pour vos lumières et bon week-end!!
 

ccdouble6

XLDnaute Occasionnel
Re : insertion de lignes et préservation des formules

Bonjour le forum !!!

ATTENTION ceci est un nouveau message
Voilà je m'aperçois que certaines formules me gênent pas mal lors de l'insertion de lignes.

D'après la macro ci-dessous (dont je ne comprends pas le cheminement) est-il possible de ne garder les formules QUE pour les colonnes à partir de C10 par exemple (donc la nouvelle ligne insérée sera vierge des colonnes 1 à 9) ??

Sub NouvelleLigneAuDessus()
' Insère une ligne au-dessus de la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient

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
End If
Next i
End Sub


Merci d'avance pour votre éclairage !!!
Et bon dimanche !!!
 

Discussions similaires

Réponses
12
Affichages
466
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…