copier une ligne sur un autre tableau automatiquement

  • Initiateur de la discussion Initiateur de la discussion eric1976
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

E

eric1976

Guest
Bonjour,

J'ai un tableau excel de 4 colonne et environ 1500 lignes dont voici un petit exemple Book1.xlsx - Microsoft Excel Web App .

je suis a la recherche d'une formule ou macro qui permettrait de copier/coller la ligne dans laquelle je rempli la cellule de la 3e colonne vers un autre tableau excel .

Ps : je travaille sur office de ma boite windows live

Merci
 
Re : copier une ligne sur un autre tableau automatiquement

bonjour eric1976 et bienvenue sur le Forum.

Ton autre tableau excel se situe sur la même feuille, sur une autre Feuille du même classeur ou sur un autre classeur?
L'autre tableau est-il identique ?
Dans ton exemple ,indique nous par tableau le resultat que tu désires

Merci pour de plus amples informations.
 
Re : copier une ligne sur un autre tableau automatiquement

mon tableau de destination se trouve sur un autre classeur .

classeur d'origine :

Book1.xlsx - Microsoft Excel Web App

classeur de destination :

commande general.xlsx - Microsoft Excel Web App


merci
 
Dernière modification par un modérateur:
Re : copier une ligne sur un autre tableau automatiquement

bonjour ,

Personne ne peut m'aider svp
Avez vous besoin de plus d'info ?
je joint le fichier a télécharger si cela peut vous faciliter la tache . En feuille 1 la liste d'origine et sur la feuille 2 la liste de destination avec un exemple .

Merci
 

Pièces jointes

Re : copier une ligne sur un autre tableau automatiquement

Bonjour Eric, Néné, bonjour le forum,

En pièce jointe ton fichier avec la macro événementielle Change ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim pl As Range 'déclare la variable pl (PLage)
Dim dest As Range 'déclare l avaraible dest (DESTination)
 
'définit la variable pl
Set pl = Sheets("liste de produit").Range("C3:C" & Sheets("liste de produit").Cells(Application.Rows.Count, 1).End(xlUp).Row)
'si le changement a lieu en dehors de la plage pl, sort de la procédure
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub
'si plusieurs cellules sont sélectionnées, sort de la procédure
If Target.Cells.Count > 1 Then Exit Sub
 
With Sheets("commande generale") 'prend en compte l'onglet "commande generale"
    'définit la variable dest (recherche le code artiche dans la colonne A de l'onglet)
    Set dest = .Columns(1).Find(Target.Offset(0, -2).Value, , xlValues, xlWhole)
    If Not dest Is Nothing Then 'condition 1 : si il existe au moins une occurrence trouvée
        If Target.Value <> "" Then 'condition 2 : si la cellule n'est pas effacée (contient une valeur)
            dest.Offset(0, 2).Value = Target.Value 'remplace l'ancienne valeur par la nouvelle
        Else 'sinon (si la cellule est effacée)
            .Rows(dest.Row).Delete 'supprime la ligne entière
        End If 'fin de la condition 2
    Else 'sinon (si il n'existe aucune occurrence)
        'definit la cellule de destination (A4 si A4 est vide, première ligne vide rencontrée si A4 n'est pas vide)
        Set dest = .Cells(Application.Rows.Count, 1).End(xlUp)(IIf(.Range("A4").Value = "", 4, 2))
        Range(Target.Offset(0, -2), Target.Offset(0, 1)).Copy dest 'copie la ligne et la colle dans dest
    End If 'fin de la condition 1
End With 'fin de la prise en compte de l'onglet "commande gennerale"
End Sub

J'ai converti en xls car avec Excel 2003... Tu peux modifier une valeur (ça ne copiera pas deux fois la ligne) ou l'effacer (ça supprimera la ligne).
 

Pièces jointes

Re : copier une ligne sur un autre tableau automatiquement

bonsoir néné06 et robert

Merci a vous deux pour ce que vous avez fait 🙂

Robert c'est exactement ce que je souhaité 🙂

une dernière faveur , si je souhaite que la destination soit un autre classeur nommé commande générale a la place d'une feuille sur le même classeur est ce possible ?
si oui pouvait vous le creer aussi svp
 
Re : copier une ligne sur un autre tableau automatiquement

Bonjour le fil, bonjour le forum,

Éric, voici le code modifié pour copier non pas dans un autre onglet mais dans un aute classeur. Pour que cela fonctionne il faut que les deux classeurs soient dans le même répertoire et qu'un onglet de commande generale.xls se nomme Feuil1. Ou alors il te faudra adapter le code ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim chem As String 'déclare la variable chem
Dim cl As Workbook 'déclare la variable cl (CLasseur)
Dim pl As Range 'déclare la variable pl (PLage)
Dim dest As Range 'déclare l avaraible dest (DESTination)
 
chem = ThisWorkbook.Path 'définit la variable chem
For x = 1 To Workbooks.Count 'boucle sur tous les classeurs ouverts
    'si le nom du classeur est "commande generale.xls", va à l'étiquette suite
    If Workbooks(x).Name = "commande generale.xls" Then GoTo suite
Next x 'prochain classeur de la boucle
Workbooks.Open (chem & "/commande generale.xls") 'ouvre le classeur "commande generale.xls"
suite: 'étiquette
 
Set cl = Workbooks("commande generale.xls") 'définit le classeur cl
ThisWorkbook.Activate
'définit la variable pl
Set pl = Sheets("liste de produit").Range("C3:C" & Sheets("liste de produit").Cells(Application.Rows.Count, 1).End(xlUp).Row)
'si le changement a lieu en dehors de la plage pl, sort de la procédure
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub
'si plusieurs cellules sont sélectionnées, sort de la procédure
If Target.Cells.Count > 1 Then Exit Sub
With cl.Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" du classeur cl
    'définit la variable dest (recherche le code artiche dans la colonne A de l'onglet)
    Set dest = .Columns(1).Find(Target.Offset(0, -2).Value, , xlValues, xlWhole)
    If Not dest Is Nothing Then 'condition 1 : si il existe au moins une occurrence trouvée
        If Target.Value <> "" Then 'condition 2 : si la cellule n'est pas effacée (contient une valeur)
            dest.Offset(0, 2).Value = Target.Value 'remplace l'ancienne valeur par la nouvelle
        Else 'sinon (si la cellule est effacée)
            .Rows(dest.Row).Delete 'supprime la ligne entière
        End If 'fin de la condition 2
    Else 'sinon (si il n'existe aucune occurrence)
        'definit la cellule de destination (A4 si A4 est vide, première ligne vide rencontrée si A4 n'est pas vide)
        Set dest = .Cells(Application.Rows.Count, 1).End(xlUp)(IIf(.Range("A4").Value = "", 4, 2))
        Range(Target.Offset(0, -2), Target.Offset(0, 1)).Copy dest 'copie la ligne et la colle dans dest
    End If 'fin de la condition 1
End With 'fin de la prise en compte de l'onglet "commande gennerale"
End Sub
 

Pièces jointes

Re : copier une ligne sur un autre tableau automatiquement

Bonjour Robert

Merci c'est tout a fait ce que je voulait , j'ai juste un petit soucis .

quand je rentre une données dans la cellule de la colone C , le transfert vers la feuil1 du classeur commande generale s'effectue correctement mais j'ai une petite fenetre qui s'affiche ensuite avec " erreur d'execution '9' " et me demande de déboguer .

Quand je clique sur déboguer ça m'affiche cela surligner en jaune .

Set pl = Sheets("liste de produit").Range("C3:C" & Sheets("liste de produit").Cells(Application.Rows.Count, 1).End(xlUp).Row)


merci
 
Re : copier une ligne sur un autre tableau automatiquement

Bonjour le fil, bonjour le forum,

Ça marche très bien chez moi, je ne comprends pas. Surtout que tu me dis que le transfert s'effectue et qu'après il y a une erreur 9 sur cette ligne :
Code:
Set pl = Sheets("liste de produit").Range("C3:C" & Sheets("liste de produit").Cells(Application.Rows.Count, 1).End(xlUp).Row)
Cela voudrait dire qu'il n'y a pas d'onglet liste de produit mais puisque le tranfert s'est déjà fait... Je ne comprends pas !
As-tu bien copié tout le code que je t'ai donné. Ne manquerait-il pas la ligne :
Code:
ThisWorkbook.Activate 'active ce classeur
Je te rappelle ce que je te disais dans mon post précédent :
Pour que cela fonctionne il faut que les deux classeurs soient dans le même répertoire et qu'un onglet de commande generale.xls se nomme Feuil1.
 
Re : copier une ligne sur un autre tableau automatiquement

Bonjour robert

J'ai trouvé d’où venait mon problème ( enfin je pense ) , il y avait aussi la macro du classeur liste de produit qui été active dans le classeur commande generale . J'ai supprimé la macro dans le classeur commande generale et maintenant ça marche a la perfection .

Merci beaucoup pour ton aide 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
369
Retour