MAcro pour Copier&insérer une ligne ailleurs [Résolu/Fermé]

Signaler
Messages postés
166
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
18 mai 2020
-
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
-
Bonjour,

je suis en train de realiser un fichier excel 2007 comportant plusieurs feuilles. LA premiere feuille me sert de "base de données" et consiste en un tableau, où toutes les valeurs de la première colonne sont une plage nommée. LA deuxiemme feuille consiste en un endroit ou on peut rentrer un nouveau champ.

Ce que je voudrais faire, c est qu une fois qu on a rentré un nouveau champs dans la feuille 2, on puisse cliquer sur un bouton pour que ça copie tout ce champ dans le tableau de la feuille1, et en faisant directement partie de la plage.

comment faire?

merci pour vos conseils


1 réponse

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 626
Bonjour,
Tu créés un bouton dans ta Feuil2, double clic dessus, Visual Basic s'ouvre avec ces deux lignes déjà écrites :
Private Sub CommandButton1_Click()

End Sub

Entre ces deux lignes place le code suivant :
Sheets("Feuil2").Rows(1).Cut Sheets("base de données").Range("A65536").End(xlUp).Offset(1, 0)


Avant toute chose, sache qu'une modification faite par macro ne peux pas être annulée avec le bouton annulation d'Excel. C'est pourquoi je recommande vivement de toujours travailler sur un classeur "copie" de l'original, et de faire évoluer l'original au fur et à mesure des découvertes sur la copie...

Petite explication nécessaire à l'adaptation du code :
- Remplace Feuil2 et base de données par les noms de tes feuilles (toujours entre guillemets)
- Rows(1) représente la ligne que tu veux couper / coller (à remplacer par Rows(18) si tu veux couper la 18ème ligne de la feuille 2)
- Si tu ne veux pas couper mais copier, remplace cut par copy

N'hésite pas à revenir en cas de besoin...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
166
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
18 mai 2020
11
Cela me refait la meme erreur.
Sub Bouton2_Clic()
Sheets("COMP.").Range("A4:I4").Select
Selection.Copy
Sheets("COMPONENT").Range("A65536").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
End Sub

au lieu d inserer un ligne à la fin du tableau, est il possible de l'insérer au début, ainsi les nouvelles valeurs seront rajouter dans la plage nommée....
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 626
Salut,
Oui autant pour moi... Je n'ai plus le réflexe avec les .Select ; en fait, tu ne peux pas sélectionner une cellule d'une feuille, si celle-ci n'est pas active. Donc deux choix :
- avant de sélectionner le range(destination), activer la feuille, comme ceci :

Sub Bouton2_Clic()
Sheets("COMP.").Range("A4:I4").Copy
Sheets("COMPONENT").Activate
Sheets("COMPONENT").Rows(4).EntireRow.Insert
Sheets("COMPONENT").Range("A4").PasteSpecial Paste:=xlPasteValues
Sheets("COMP.").Activate
End Sub

- ou mettre l'opération "collage spécial" entre 2 bornes With End With comme ceci :

Sub Bouton2_Clic() 
Sheets("COMP.").Range("A4:I4").Copy
With Sheets("Feuil1")
      .Rows(4).EntireRow.Insert
      .Range("COMPONENT").PasteSpecial Paste:=xlPasteValues
End With
End Sub

Tu remarqueras également l'insertion d'une ligne n°4 (.Rows(4).EntireRow.Insert)
Messages postés
166
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
18 mai 2020
11
MErci beaucoup. après acharnement j ai reussi a fiare en sorte que ma plage ne se decale pas avec mon insertion : il suffit de ocmmencer la plage au dessus de l insertion. DE plus j ai rajouter un CutCopyMOde=false, pour sortir du mode copier coller(je l avais trouver sur un autre forum quand je cherchais la reponse de celui--ci)

DOnc pour les générations futurs voici a quoi cela ressemble:

Sub Bouton2_Clic()
Sheets("COMP.").Range("A4:I4").Copy
Sheets("COMPONENT").Activate
Sheets("COMPONENT").Rows(4).EntireRow.Insert
Sheets("COMPONENT").Range("A4").PasteSpecial Paste:=xlPasteValues
Sheets("COMP.").Activate
Application.CutCopyMode = False
End Sub

ENcore merci pijaku!
Messages postés
166
Date d'inscription
jeudi 11 février 2010
Statut
Membre
Dernière intervention
18 mai 2020
11
REbonjour!

je suis en train de m arracher les cheveux sur un truc simple j en suis sur!
J ai voulu reutiliser les lignes ci dessus pour copier coller quelque chose dans la meme feuille de calculs, donc ca devrait etre encore plus simple. j ai utiliser :

Sub SAV_SUPPLIER()
Application.ScreenUpdating = False
Sheets("SUPPLIER").Range("B6:H6").Copy
Sheets("SUPPLIER").Rows(21).EntireRow.Insert
Sheets("SUPPLIER").Range("B21").Paste
Application.CutCopyMode = False
End Sub

sauf que ca me met " PRopriété ou methode non geré par cet objet pour la ligne avec "PAste" lors du debogage. et je comprend pas pourquoi.
De plus ça m'insere la ligne voulu de A21:G21 et non pas B21:H21....

est ce parce que mes cellule entre B6:h6 sont fusionnée pour certaines? je voudrais garder cette fusion en les recopiant.

J ai besoin de ton aide pijaku! merci d avance
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 626
Salut, pas de souci..
Essaie ceci :
Sub SAV_SUPPLIER() 
Application.ScreenUpdating = False 
Sheets("SUPPLIER").Rows(21).EntireRow.Insert 
Sheets("SUPPLIER").Range("B6:H6").Copy Sheets("SUPPLIER").Range("B21") 
Application.CutCopyMode = False 
End Sub

Pour n'insérer des cellules que dans le range B21:H21 :
Sub SAV_SUPPLIER() 
Application.ScreenUpdating = False 
Sheets("SUPPLIER").Range("B21:H21").Insert Shift:=xlDown
Sheets("SUPPLIER").Range("B6:H6").Copy Sheets("SUPPLIER").Range("B21") 
Application.CutCopyMode = False 
End Sub