|
|
|
| Insertion de lignes et recopie de formules par dakbobo |
lundi 15 octobre 2007 à 15:34:48 |
Configuration: Windows XP Internet Explorer 6.0
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 Science sans conscience n'est que ruine de l'Ame |
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 |
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 Science sans conscience n'est que ruine de l'Ame |
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 |
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 Science sans conscience n'est que ruine de l'Ame
|
.... 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 Science sans conscience n'est que ruine de l'Ame |
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 Science sans conscience n'est que ruine de l'Ame
|
| 14/02 10h41 | date du jour avec macro insertion ligne | Bureautique | 14/02 15h43 | 4 |
| 09/02 16h40 | VBA insertion ligne dans tableau | Bureautique | 26/03 16h19 | 19 |
| 17/09 17h45 | Insertion ligne excel sous condition | Bureautique | 04/10 14h03 | 20 |
| 27/08 16h01 | Excel insertion ligne vide selon critères | Programmation | 27/08 23h34 | 4 |
| 02/05 12h14 | Detection saut de ligne dans formulaire | Webmastering | 02/05 16h16 | 1 |