Insertion de lignes et recopie de formules

Fermé
dakbobo - 15 oct. 2007 à 15:34
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 - 16 oct. 2007 à 07:28
Bonjour,

ALors là j'ai un problème. J'ai un tableau j'aimerai quand je clique sur : insérer ligne que la ligne du dessus se recopie partiellement.

Par exemple :

ligne composée de A1, B1, C1, D1, E1, F1, G1,

J'insère une ligne qui me donne A1, B1, C1, D1, E1, F1, G1, Avec C1=C2 et G1=G2

C'est possible?
A voir également:

7 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 410
15 oct. 2007 à 16:27
Bonjour dakbolo
Sauf erreur de compréhension de ma part,ça devrait pouvoir se résoudre avec une macro qui n'insére que les rangées de cellules concernées par le décalage,
Ainsi celle ci:
Sub Macro2()
'
'
Range("A2:D2,G2:I2").Select
Selection.Insert Shift:=xlDown
End Sub


Insére des cellules vides au dessus des cellules A2àD2 et G2àI2, les colonnes E et F restent en place

Vous pouvez la modifier en indiquant les cellules qui vous intéressent selon les régles ci dessous:
("X1:Z1")séparateur deux points toute la rangée est prise de XàZ
("X1,Z1")Séparateur virgule, seules les cellules indiquées sont prises en considération.Vous puvez mélanger les deux dans la même parenthése
Enfin, pour commander la macro au clavier, après insertion dans VBA
Barre d'outil / Macro / Macro, sélectionner la macro dans la boite / Option / Rentrer la lettre désirée / Ok

Par contre, cette macro fera évidemment toujours la même chose... Si les colonnes à ménager ne sont pas toujours les mêmes, c'est beaucoup plus bêbête:
Sélectionner les cellules à décaler(en maintenant la touche ctrl), clic droit, insérer des cellules , option "vers le bas" et le tour est joué.
c'est en fait ce que fait la macro.
BCRDLMT
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 233
15 oct. 2007 à 17:33
Bonjour tout le monde,

Vaucluse, il me semble qu'il veut insérer une ligne d'abord, il faudrait modifier ton code et ensuite copier la valeur des cellules avec [c1].Value = [c2].value pour copier le contenu
ou [c1].Value = [c2].FormulaLocal si il faut ramener une formule mais les références relatives ne sont pas recalculées
eric
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 410
15 oct. 2007 à 18:15
Tu as raison , mais à ton avis Eric, (on verra pour la macro après)
On insére les cellules selon ma macro intiale, on insére une ligne, on supprime les cellules insérées en 1° qui sont vides,ca devrait réaligner et les données et les formules:
Sub Macro3()
'

Range("A2:D2,G2:I2").Select
Selection.Insert Shift:=xlDown
Rows("2:2").Select
Selection.Insert Shift:=xlDown
Range("A3:D3,G3:I3").Select
Selection.Delete Shift:=xlUp
End Sub


Ca reste simplet, mais évidemment, ça ne marche que sur la ligne d'entéte du tableau, mais je compte sur toi pour arriver à sélectionner la ligne au dessus à partir des cellules d'origine de la macro, ça je ne sais pas faire, mais si tu peux me le dire je suis preneur, sachant que je sais au moins qu'en enlevant la première ligne, on travaille sur les cellules sélectionnées à l'affichage.
BCRDLMNT
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 233
15 oct. 2007 à 19:25
L'idée est sûrement bonne pour faire recalculer les références mais écrite comme ça, j'ai essayé de tester, ça ne colle pas.
Et d'un autre coté j'ai essayé avec .formulaR1C1 et là les references sont bien recalculées même en laissant l'affichage au format A1 (pourquoi ne le sont-elles pas avec .formula je l'ignore).
Je n'ai pas compris ton pb de ligne, il veut insérer en ligne 1 et toi tu es sur la 2...
Du coup plus de difficulté et je ferais
Sub test()
    Rows(1).Insert Shift:=xlDown 
    ' recup formules
    [C1].Value = [C2].FormulaR1C1
    [G1].Value = [G2].FormulaR1C1
    ' recup formats cellule
    [C2].Copy
    [C1].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    [G2].Copy
    [G1].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End Sub


eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 410
15 oct. 2007 à 20:05
Eric, je crois qu'il faut laisser tomber cette option , idiotie de ma part, car elle revient à remettre en place les données décalées à la premier opération, ce qui n'est pas le but de la manoeuvre
En fait, je pense qu'il faut travailler pour aider dakbolo qui nous dira ce qu'il en pense sur deux directions:
_Soit: on insére une ligne de données avec des blancs et on fait remonter les cellules sous les blanc en ligne avec l'insertion
_Soit :on insére des cellules vide dans les parties à remplir avec les nouvelles données et on fait un copier coller blanc non compris.

1° Option
Sub INSERE()
'
Range("J1:R1").Select
Selection.Copy
Range("A1:I1").Select
Selection.Insert Shift:=xlDown
Range("E1:F1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
End Sub


2°Option
Sub INSERE2()
'
Range("A1:D1,G1:I1").Select
Range("G1").Activate
Selection.Insert Shift:=xlDown
Range("J1:R1").Select
Selection.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
True, Transpose:=False
End Sub

Je suis revenu sur ligne 1 pour te faire plaisir, mais pourquoi est ce plus compliqué d'insérer sur la 2?(car j'ai supposé que le tableau avait des titres)
Dans la pemière option, le top serait que la macro détecte les cellules vides sur range1 pour décaler les colonnes vers le haut. ça, je te le laisse c'est trop pour moi!
Qu'en pense tu daklobo? Est ce ce que tu attends?

CRDLMNT
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 233
15 oct. 2007 à 23:05
C'est gentil de me faire plaisir pour la ligne 1 mais c'est surtout à dakbobo que ça fera plaisir. c'est sa demande :-) Enfin c'est comme ça que je l'ai comprise.
Sinon non ce n'est pas plus compliquer d'insérer en ligne 2 qu'en ligne 1.
Et pourquoi détecter les vides ligne 1 et décaler des colonnes vers le haut puisqu'il veut juste insérer 1 ligne (pour moi sous-entendu complète s'il a bien formulé sa demande) et recopier les cellules C2 et G2 en C1 et G1 ? Ce n'est pas trop pour toi c'est toi qui te complique la vie je crois ;-)
Bonne soirée
eric
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 410
15 oct. 2007 à 20:24
.... et derniére en date pour conserver l'intégralité du tableau (par le bas) en reportant dans la ligne insérée les valeurs de la ligne du dessous dans les cellules vides
Reprenons mon exemple:
j'insére depuis la même feuille, sur A1, I1, les valeurs de J1 à R1 où les cellules arrivant en E et F doivent reprendre la valeur de la ligne 1 actuelle
J'ai placé dans N la formule=N2, en O la formule = O2
La macro peut alors insérer la ligne et faire un copier coller valeur sur la ligne mais ce n'est pas utile car les formules en E et F s'incrémentent pour rester égale à la valeur en dessous.En fait, ça se fait très bien sans macro.
On peut ensuite imaginer tout ce que l'on veut pour remplir la ligne de données J1:R1 si elle doit comporter des formules, à savoir une formule conditionnelle qui ramènera à = N1 ou =O1 si la formule de base donne vide.
Mais bien entendu dans ce cas, l'incrémentation du tableau détruira les autres formules et le coller valeur sera indispensable.


BCRDLMNT
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 410
16 oct. 2007 à 07:23
Bonjour Eric:Ok, mais j'avais cru comrendre que ce n'éyait qu'un exemple et qu'en conséquence,il pouvait y avoir dans la demande des cas de figure différents suivant le remplissage de la ligne à insérer.
Il précise bien: "par exemple"
On l'attend la dessus
Bonne journée


0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 233
16 oct. 2007 à 07:28
Bonjour vaucluse,

C'est vrai.
Mais bon, en 4 je me suis calé sur l'exemple et ensuite il faut adapter selon la réalité.
Bonne journée à toi aussi
eric
0