Recopie d'une formule lors d'une insertion ligne

Le YouKy

XLDnaute Nouveau
Bonjour Foromeurs zé Foromeuses XLdiens !

J'ai un tableau avec tout plein de formule dedans.
L'utilisateur rempli une partie, et XL effectue les calculs par lignes en fonction de ce que l'utilisateur saisi ou choisi dans une liste déroulante (Données/Validation/Liste...).

Mon problème est que s'il insère une ligne dans ce tableau....... les formules ne sont pas recopiées automatiquement... et il est obligé de 'tirer' toutes les formules (et yen a un paquet).

Ce qui me trouble, c'est que la liste de choix déroulante, elle, est insérée dans la nouvelle ligne.... mais pas les formules.


J'ai cherché du coté des options XL, mais je n'ai point trouvé de solutions.. Pourtant il doit bien exister une méthode pour qu'XL(2003) étire de manière intuitive ces formules!! XL prévient lors de la saisie des formules dans une zones que telle ou telle formule est différentes de celles qui l'entoure..... masi pas lors d'une insertion de ligne....


Par avance merci de votre aide !!
Salutations !
 

andré

XLDnaute Barbatruc
Salut,

Tu ne peux le faire que par macro.

Enregistre la suivante :
Insérer une ligne, sélectionner la ligne au-dessus / Copier / Coller sur la ligne en-desous / F5 / Cellules / Constantes / Supprimer.

A ma connaissance, pas d'autre méthode.

Ândré.
 

Le YouKy

XLDnaute Nouveau
aye aye aye....... Quelle déception !!

Voilà encore une piste pour billy (Gates) pour le prochain XL ......

Mon souci, c'est que si je fais une macro (qui doit pas être bien difficile...) il faudra que je supprime la possibilité d'insérer des lignes... car en ne recopiant pas les formules, cela génère des erreurs !

Merci qd même André, je m'en vais de ce pas commencer à chercher comment faire pour contourner ce problème.....

:pinch:

Néanmoins si qqu'un a un truc...... je reste à l'écoute et suis preneur car ce que tu m'apprends André remet en cause une grande partie de mon travail.......

:ermm:

Bonne journée !

Filoo le YouKy dépité
 

Le YouKy

XLDnaute Nouveau
:)

Ta remarque me redonne de l'espoir........ j'aime bien le 'évenementielle' de 'macro évenementielle'. ça voudrai dire qu'une macro recopiant la ligne du dessus pourrai s'éxecuter à chaque insertion de ligne !!

ce serait pile-poil !!

peux-tu m'en dire un peu plus? je suis au niveau 'enregistreur de macro 2ème échelon' , alors les macros évenementielle ça me parle pas.

En tout cas tu me remet de bonne humeur ! je serai pas obligé de revoir toute ma feuille !!

Merci beaucoup !
Salutations

Filoo, un YouKy évenementieux
 

Le YouKy

XLDnaute Nouveau
Comme je suis un vrai YouKy en macro, et qu'apparement je ne suis pas le seul intéressé à propos des macros évenementielles...... je propose d'ouvrir un nouveau fil à ce sujet.

Bonne journée à tous !

Filoo le roi du tricot (avec tous ces fils......... ouaf ouaf :pinch: )
 

Le YouKy

XLDnaute Nouveau
Salut à tous

Toujours concernant l'insertion de lignes... et les macros evenementielles..

J'ai un tableau dont je connais le nombre de lignes..., mes colonnes ont des petits noms.
Je souhaite que quand l'utilisateur insère une ligne, les formules de la ligne du dessus, ou du dessous, peu importe soient copiées... ça c'est pas un problème (enfin j'espère).

Mon souci réside dans la partie de macro je dois définir le 'quand' elle doit se lancer... soit comment écrire le fait :
'SI Insertion d'une ligne dans le tableau alors...'

et ce avec une macro evenementielle...

En espérant être assez clair....

Merci de votre aide ô combien précieuse !

Filoo
 

Le YouKy

XLDnaute Nouveau
J'avance ...... mais je comprend pas tout ..... et ça c pas cool.

Voilà mon bout de code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nblig As Integer
Dim message2 As String
Dim message3 As String

If Not Application.Intersect(Target, Range('Liste').Rows) Is Nothing Then

'nb de ligne a Insérer/Supprimer
nblig = Selection.Rows.Count
message2 = MsgBox('Insérer ' & nblig & ' ligne(s)?', vbOKCancel)

If message2 = vbOK Then

'Insertion des lignes
Selection.Insert Shift:=xlDown
Selection.FillDown

Else: message3 = MsgBox('Supprimer ' & nblig & ' ligne(s)?', vbOKCancel)

If message3 = vbOK Then
'Suppression des lignes
Selection.Delete Shift:=xlUp
End If

End If
End If

End Sub

L'insertion d'une ligne se passe bien, les formules sont recopiées... masi si je veux insérer plus de lignes, les formules ne sont plus recopiées et ça ça craint...
Je comprend pourquoi il veut pas : Il insère X lignes vierges et recopie le contenue de la ligne X-1 (vierge si X>1) sur la ligne X ...ok

mais quel est la parade pour lui faire 'FillDowner' sur X lignes ?

Merci
 

Ifuldrita

XLDnaute Nouveau
Re : Recopie d'une formule lors d'une insertion ligne

Bonjour à tous,

je reviens malheureusement à la charge sur ce sujet.

J'avais cru enfin trouver une solution sur la page donnée par Le Youky (Lien supprimé), mais elle n'existe plus !

Je suis complètement débutante en Excel, et surtout en VBA/macro.
Sur un autre forum, une personne donnait comme idée de créer une macro en enregistrant chaque geste de la souris (donc de ce que j'ai compris, la macro enregistrait ma souris en train de copier toutes les formules.)
Or mon problème reste bien de déclencher cette macro à chaque nouvelle insertion de ligne.

Quelqu'un a -t-il une solution simple et compréhensible ?
Je joins un assimilé de mon fichier, le vrai fichier n'étant pas autorisé à la diffusion.
 

Pièces jointes

  • exemple.zip
    18.8 KB · Affichages: 69
  • exemple.zip
    18.8 KB · Affichages: 71
  • exemple.zip
    18.8 KB · Affichages: 71

Ifuldrita

XLDnaute Nouveau
Re : Recopie d'une formule lors d'une insertion ligne

Re-bonjour à tous,

c'est finalement dans les sites anglais que j'ai trouvé une presque réponse :
Insert Rows using a Macro

La macro qui s'applique bien à mon cas est la suivante : lors de l'insertion d'une nouvelle ligne où que ce soit dans la feuille, elle copie uniquement les formules et laisse les champs qui avaient été remplis à la main vide (évite les doublons involontaires !).

Private Sub Worksheet_Change(ByVal Target As Range)
'David McRitchie, 2005-05-03 insrtrow.htm
'-- will copy more often than Extend Formulas and Format (tools option)
Dim lastrow As Long, rng As Range
If Target.Column <> 1 Then Exit Sub
If Target.row < 2 Then Exit Sub
If IsEmpty(Target) Then Exit Sub
Set rng = Intersect(Target.EntireRow, Range("B:IV"))
If Application.Count(rng) > 0 Then Exit Sub
rng.Offset(-1).Copy
rng.Select
On Error GoTo abort_sub
Application.EnableEvents = False 'should be part of Change macro
ActiveSheet.Paste
Application.CutCopyMode = False
rng.SpecialCells(xlConstants).ClearContents
abort_sub:
Application.EnableEvents = True 'should be part of Change macro
End Sub

Cependant, l'auteur précise sur son site que cette macro n'est sensée se déclencher que lorsqu'on remplit la cellule de la colonne A uniquement. Bon, moi ça marche quand même sans, ce qui est nickel dans mon cas, mais c'est tout de même curieux !

Enfin, pour les novices comme moi qui ont cherché en vain une réponse, il suffit de
1. cliquer droit sur l'onglet concerné
2. choisir "Visualiser le code"
3. copier ce code TEL QUEL
4. enregistrer
5. penser à passer en mode sécurité moyenne !!!! (pour cela, Outil > Macro > Securité et choisir "Moyenne". Puis enregistrez et fermez tous les fichiers Excel ouverts. Enfin, rouvrez le fichier qui vous concerne).

A noter que si votre fichier est lourd et possède beaucoup de formules, il peut être intéressant de changer le mode de calcul du fichier pour éviter les lenteurs(choisissez manuel au lieu d'automatique dans Outils > Options > Calcul, et appuyez sur F9 quand vous voulez recalculer vos formules).

Si le fichier que vous développez est destiné à d'autres utilisateurs, pensez à leur signaler de passer en mode sécurité moyenne, sinon la macro ne marchera pas chez eux.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
571

Statistiques des forums

Discussions
312 215
Messages
2 086 325
Membres
103 179
dernier inscrit
BERSEB50