Copier / Coller ligne excel (VBA) [Résolu/Fermé]

Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
- - Dernière réponse : Isomer
Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
- 12 avril 2011 à 10:22
Bonjour,

Pour ce premier poste je vous salue !

Voila plusieurs jour que je parcourir le net à la recherche d'une solution pour mon problème.
Je débute dans VBA et donc je ne connais rien. Je vais de Tuto en Tuto mais rien n'y fait j'ai toujours autant de mal, le plus souvent parce qu'ils sont trop complexes.

Mon problème :
Je veux faire une macro qui puisse, lorsqu'une cellule contient un chiffre, copier la ligne du dessous et la dupliquer/copier sur la ligne suivante. Tout ça sur la même feuille Excel bien sur.

Voici le code que j'ai écris :

Private Sub Worksheet_Change(ByVal Target As Range)

'Programme duplicata lignes calcul

If Range("B6").Value <> 0 Then
   Sheets("commande").Rows("7:7").Select
   Selection.Copy
   Sheets("commande").Rows("8:8").Select
   Selection.Paste
End If
End Sub


Évidemment ça ne fonctionnement pas, mais je compte sur vous amis du net pour m'éclairer sur la question. Je sais que de nombreux sujet du même genre on déjà étés posté mais les explication ne sont pas toujours au rendez vous. Ou si vous avez un tuto sympa qui pourrait convenir à mon application.

Merci de l'aide que vous pourrez m'apporter
Isomer
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
1578
Date d'inscription
jeudi 3 décembre 2009
Statut
Membre
Dernière intervention
21 septembre 2013
407
4
Merci
donc j'ai essayé et le traitement ne se fait que si la cellule B7 est vide ou à 0.
si elle contient du texte, rien ne se passe.

avec ça, ça marche dans les 2 cas:
If Range("B6").Value <> 0 And Range("B7") <> "" Then

Dire « Merci » 4

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

CCM 70154 internautes nous ont dit merci ce mois-ci

Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
4
1
Merci
Re

Donc j'ai adapté ma formule soit :

Sub commande()

If Range("B6").Value <> 0 And Range("B7").Value = 0 Then
   Rows("7").Select
   Selection.Copy
   Rows("8").Select
   Selection.PasteSpecial
End If

End Sub


Mais il se passe rien... J'ai écris ça dans le module standard de ma feuille nommée "commande".

Sauf que lorsque que je rentre un chiffre au hasard dans la cellule B6 et que B7 est bien égale à zéro (nouvelle condition) et bien rien ne se passe...

Une idée ?
Messages postés
23083
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
20 novembre 2019
5761
1
Merci
Bonjour,

Y'a-t-il réellement qu'une seule ligne à dupliquer ou plusieurs sur une colonne ?
Et faut-il coller la copie ou plutôt l'insérer ?
Si besoin dépose un fichier exemple sur cijoint.fr et colle ici le lien fourni

eric
Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
4
1
Merci
Bonjour,

Pour répondre à Eriiic, il faut dupliquer la ligne x et la copier dans la ligne x+1. En conservant la mise en forme et les formules.

Je vous envois mon fichier test : http://www.cijoint.fr/cjlink.php?file=cj201104/cijoEWlg83.xls

Sur ce fichier qui fait office de listing de commande (simplifié) contient 7 lignes par défaut. J'aimerais à terme, faire en sorte lorsque l'on arrive à la 6ème ligne que la 7ème se duplique dans la 8ème. Et ainsi de suite, de telle sorte que si j'ai que 5 lignes de commande, j'ai le minimum de ligne requis +2 et que si j'ai 30 lignes de commande j'ai aussi le minium de ligne requis +2.

Je ne sais pas si je suis clair ?

Vous vous dites surement pourquoi ça ? Disons que l'application est très particulière et que se genre de macro m'éviterait d'avoir 200 lignes d'avances à chaque fois ou alors que l'utilisateur soit obligé de dupliquer les lignes lui même. Par la suite j'aimerais aussi que les lignes contenant du texte soit défini en zone d'impression. Mais ça se sera pour plus tard.

En tout cas merci beaucoup de votre aide, merci beaucoup !
Isomer
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2227
1
Merci
Bonjour tout le monde,
Salut Eriiic,
Un petit code qui, lors d'une saisie colonne B, en première ligne vide, ajoute systématiquement une ligne supplémentaire de saisie...
fonctionne jusqu'à la ligne 65534. Après ça buggue, sauf si tu passes en version excel 2007 d'ici là...
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim DernLig As Integer 
If Target.Column <> 2 And Target.Count > 1 Then Exit Sub 
DernLig = Range("B65536").End(xlUp).Row 
If Target.Row = DernLig Then 
    Rows(DernLig + 1).Copy Range("A" & DernLig + 2) 
Else
    Rows(DernLig + 2).Delete
End If 
End Sub

En cas d'ajout d'une valeur en B, ajoute une ligne, en cas de suppression de la dernière valeur en B, supprime la dernière ligne.
Tu testes et tu dis...
Franck P
Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
4
0
Merci
Bonjour,

Merci de t'as réponse The Pep. C'est déjà un bon début. Et donc "activecell" va me permettre de copier toutes la ligne ? Car, je me trompe peut être, mais la solution que tu m'as proposé ne permet que de copier une cellule ? Hors moi j'aurais voulu copier la ligne entière.

En gros ça serait en reprenant ta solution :

Si ligne B6 <> 0 Alors
Ligne 7.selectionner
Selection.Copier
Ligne 8.selectionner
Selection.coller
Fin si

Le soucis est que je ne suis pas sur la formule pour copier une ligne, j'ai cru comprendre que l'on pouvait utiliser range ou rows. Mais ma syntaxe est-elle correcte ?

Sinon cette condition il faut que je l'écrive dans le module standard de ma feuille ou bien dans une nouvelle macro ? En sachant que je veux que ça s'exécute automatiquement...

Et encore une petite question c'est quoi la différence entre "worksheet_change" et "worksheet_click" ?

Merci beaucoup
Isomer
Messages postés
1578
Date d'inscription
jeudi 3 décembre 2009
Statut
Membre
Dernière intervention
21 septembre 2013
407
0
Merci
bonjour

oui, pardon, j'étais parti sur une cellule, voila pour une ligne:

If Range("B6").Value <> 0 Then
Rows("7").Select
Selection.Copy
Rows("8").Select
Selection.PasteSpecial
End If
Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
4
0
Merci
Hannnnn !!!! Je me réjouis d'avance, je suis plus au bureau là (week-end oblige nanméo !!) mais lundi à la première heure je test et je vous dis ça.

Merci !
Isomer
Messages postés
40
Date d'inscription
mercredi 30 mars 2011
Statut
Membre
Dernière intervention
2 octobre 2011
4
0
Merci
Bonjour,

Désolé pour le retard, merci beaucoup Pijaku c'est exactement ce que je voulais ! Tu viens certainement de me faire gagner 1 semaine de boulot intensif sur VBA ^^

Encore merci, bonne continuation
Isomer
Messages postés
1578
Date d'inscription
jeudi 3 décembre 2009
Statut
Membre
Dernière intervention
21 septembre 2013
407
-1
Merci
bonjour

voila un début de réponse, mais tu voulais peut-être quelque chose de plus complet...

If Range("B6").Value <> 0 Then
Range("B7").Select
ActiveCell.Copy
Range("B8").Select
ActiveCell.PasteSpecial
End If