Recopier une ligne dans une autre feuille si elle correspond

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 !

gui59300

XLDnaute Occasionnel
Bonjour

J'utilise un classeur excel dans lequel j'inscris des défauts (fichier test).

Ces défauts doivent ensuite être classés dans les autres feuilles du fichier.
Les défauts sont classés par poste, c'est à dire par poste de montage dans le quel ils sont créés.

Pour cela j'utilise une macro qui fait des filtres automatique et recopie dans les feuilles concernées.

Je souhaite que le classement se fasse automatique et en temps réel.
Sans avoir à cliquer sur un bouton ou demander à une macro de se mettre en route, et je voudrais aussi que la ligne se recopie (dans la bonne feuille) tout suite une fois remplis.

En cherchant sur le forum j'ai trouvé un classeur (fichier Bobnath_v03-2) qui correspond à ce que je souhaite. Mais je n'arrive pas à l'adapter à mon classeur.

Quelqu'un pourrait me dire comment faire ?

Merci
 

Pièces jointes

Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Gui, bonjour le forum,

La macro que tu utilises était partie sur la bonne voie :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 7 Then Exit Sub 'si la cellule éditée n'est pas dans la colonne G, sort de la procédure
Select Case Target.Value 'agit en fonction de la valeur de la cellule éditée
    Case "P26" 'cas "POSTE 26"
        Set dest = Sheets("POSTE 26").Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
        Range(Cells(Target.Row, 1), Cells(Target.Row, 51)).Copy dest 'copie et colle la ligne
    Case "P27" 'cas "POSTE 27"
        Set dest = Sheets("POSTE").Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
        Range(Cells(Target.Row, 1), Target).Copy dest 'copie et colle la ligne
End Select
End Sub
mais il faut juste la compléter et modifier un tout petit peu le code pour quelle fonctionne (voir en rouge)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 7 Then Exit Sub 'si la cellule éditée n'est pas dans la colonne G, sort de la procédure
Select Case Target.Value 'agit en fonction de la valeur de la cellule éditée
    Case [COLOR=red]"26"[/COLOR] 'cas "POSTE 26"
        Set dest = Sheets("POSTE 26").Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
        [COLOR=red]Target.EntireRow.Copy dest 'copie et colle la ligne[/COLOR]
    Case [COLOR=red]"27"[/COLOR] 'cas "POSTE[COLOR=red] 27[/COLOR]"
        Set dest = Sheets("POSTE 27").Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
        [COLOR=red]Target.EntireRow.Copy dest 'copie et colle la ligne[/COLOR]
End Select
End Sub
Et bien évidemment prendre en compte les postes 28, 29, 30, FNR et HABILITATION...
Mais comme tu le vois il faudra être rigoureux par rapport à ce que tu définis dans le code et à ce que tu édites dans la colonne Poste. P28 n'est pas la même chose que 28, fnr n'est pas la même chose que FNR.

Si je devais utiliser moi-même ce fichier je commencerais par supprimer toutes les cellules fusionnées qui ne font que semer le souk... Ensuite dans la colonne Poste j'utiliserai une liste de validation reprenant la liste des onglets et j'adapterais le code en mettant :
Code:
Set dest = Sheets([COLOR=red]Target.Value[/COLOR]).Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
Ça limiterait le risque d'erreurs...
 
Re : Recopier une ligne dans une autre feuille si elle correspond

Si je devais utiliser moi-même ce fichier je commencerais par supprimer toutes les cellules fusionnées qui ne font que semer le souk... Ensuite dans la colonne Poste j'utiliserai une liste de validation reprenant la liste des onglets et j'adapterais le code en mettant :
Code:
Set dest = Sheets([COLOR=red]Target.Value[/COLOR]).Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
Ça limiterait le risque d'erreurs...[/QUOTE]

Je vais m'occuper de défusionner les colonnes, c'est que à la base j'ai utilisé un fichier existant.

Par contre pouvez vous m'expliquer ce qu'est une liste de validation ? et comment on peut mettre ça en place.
merci
 
Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Gui, bonjour le forum,

Si la liste des onglets est fixe, tu pourrais taper dans une colone (que tu pourras cacher par la suite eventuellement) de l'onglet Source cette liste, disons :
BM1 = "Poste 26"
BM2 = "Poste 27"
BM3 = "Poste 28"
BM4 = "Poste 29"
BM5 = "Poste 30"
BM6 = "FNR"
BM7 = "HABILITATION"

Ensuite tu sélectionnes les cellules qui vont contenir la donnée Poste (disons G5:G54 mais si tu as tout défusionner ça ne correspond plus vraiment) et la tu cliques sur le menu Données/Validation... Dans le champ Autoriser tu choisis Liste et dans le champ Source, tu indiques où se trouve ta source. Soit tu cliques sur la flèche rouge à droite de ce champ puis tu vas cliquer-glisser sur les cellules BM1:BM7. ou bien tu tapes directement dans le champs : =$BM$1:$BM$7.

Le résultat est que l'utilisateur aura (dans les cellules G5:G54) une liste qui va apparaître et il choisira le poste ou bien il tapera le poste mais si ce qu'il a tapé ne correspond pas à la liste de validation un message s'affiche tant que ce qui est tapé ne correspond pas...

J'espère avoir été suffisamment clair...
 
Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Gui, bonjour le forum,

Si la liste des onglets est fixe, tu pourrais taper dans une colone (que tu pourras cacher par la suite eventuellement) de l'onglet Source cette liste, disons :
BM1 = "Poste 26"
BM2 = "Poste 27"
BM3 = "Poste 28"
BM4 = "Poste 29"
BM5 = "Poste 30"
BM6 = "FNR"
BM7 = "HABILITATION"

Ensuite tu sélectionnes les cellules qui vont contenir la donnée Poste (disons G5:G54 mais si tu as tout défusionner ça ne correspond plus vraiment) et la tu cliques sur le menu Données/Validation... Dans le champ Autoriser tu choisis Liste et dans le champ Source, tu indiques où se trouve ta source. Soit tu cliques sur la flèche rouge à droite de ce champ puis tu vas cliquer-glisser sur les cellules BM1:BM7. ou bien tu tapes directement dans le champs : =$BM$1:$BM$7.

Le résultat est que l'utilisateur aura (dans les cellules G5:G54) une liste qui va apparaître et il choisira le poste ou bien il tapera le poste mais si ce qu'il a tapé ne correspond pas à la liste de validation un message s'affiche tant que ce qui est tapé ne correspond pas...

J'espère avoir été suffisamment clair...

C'est vrai que c'est très pratique ce menu déroulant car on peut quand même écrire la valeur directement au clavier et si elle ne fait pas parti de la liste il nous le dit.

J'ai 3 petits problèmes par contre :
1) il ne me recopie que la dernière lignes comprenant le numéro de poste il efface automatiquement la précédente.
2)lorsque je modifie le contenu de la ligne (ex : dans la colonne observations) il ne va pas la modifier dans la feuille concernée.
3) il ne conserve la mise en forme mise de la page source alors qu'il faudrait qu'il ne la conserve pas(une ligne blanche une ligne grise)
 

Pièces jointes

Re : Recopier une ligne dans une autre feuille si elle correspond

Bonsoir Gui, bonsoir le forum,

En pièce jointe une solution pour les points 1 et 3. Pour le point 2 je n'ai pas de solution sinon de ne taper le poste en colonne D qu'en dernier ou, si tu dois remplir toutes les cellules obligatoirement, de n'appliquer le Change qu'à la colonne 39 (AM)...
Mais tu n'en dit pas assez. Est-ce que certaines colonnes sont facultatives ? Si oui, lesquelles et lesquelles sont obligatoires ? Essaie d'expliquer clairement comment tu t'y prends pour éditer les données. Tu as demandé de l'automatique et c'est possible mais il faut dire à quel événement doit réagir la macro. Jusqu'à présent elle réagit à l'édition dans la colone D...
 

Pièces jointes

Re : Recopier une ligne dans une autre feuille si elle correspond

Bonsoir Gui, bonsoir le forum,

En pièce jointe une solution pour les points 1 et 3. Pour le point 2 je n'ai pas de solution sinon de ne taper le poste en colonne D qu'en dernier ou, si tu dois remplir toutes les cellules obligatoirement, de n'appliquer le Change qu'à la colonne 39 (AM)...
Mais tu n'en dit pas assez. Est-ce que certaines colonnes sont facultatives ? Si oui, lesquelles et lesquelles sont obligatoires ? Essaie d'expliquer clairement comment tu t'y prends pour éditer les données. Tu as demandé de l'automatique et c'est possible mais il faut dire à quel événement doit réagir la macro. Jusqu'à présent elle réagit à l'édition dans la colone D...

Bonjour Robert

Tout d'abord je vous remercie déjà de m'aider.

Je vais vous expliquer le fichier.
En faite le service production construit le produit. Au dernier poste de montage le contrôle qualité (moi). Inspecte le produit et note tout les problèmes rencontrés.
La colonne "Observations" est remplit en 1er (sur la chaine de fabrication).
En suite au bureau je dois faire les analyse de Démé (pour démérite), de typo (pour typologie) et de poste (pour poste de montage créant la non qualité).
La colonne habi (pour habitation) est très rarement remplit.
Les colonnes initiale, visa opérateur, et le levée sont remplis sur papier seulement.
Si un jour je dois les remplir sur ce fichier je n'aurais pas besoin de les faire apparaitre sur les différentes feuilles.

En faite il faudrait que la macro se lance quand les colonnes F, B, C et D sont remplis. Les autres champs étant à remplir sur papier ou n'étant pas obligatoire.

Par contre il se peut que un jour je fasse une erreur d'imputation de poste et que je le modifie par la suite (par exemple je pense que le défaut est créé par le poste 27 et en faite c'est par le poste 30 qu'il est créé) il faudrait donc que si je change l'imputation du poste dans la page source l'imputation dans la mauvaise feuille se supprime (ce n'est pas le cas dans le fichier pour le moment) et apparaisse dans la nouvelle feuille (dans le fichier que vous m'avez envoyez c'est le cas sauf qu'il l'insère en dernier).

Par contre dans la feuille source j'ai créé la mise en page jusque la ligne 59 (ligne blanche et grise). Est il possible que la macro me laisse toujours 2 ou 3 lignes en dessous du dernier défaut (il faudrait en faite qu'elle créé les lignes au furia mesure que le fichier est remplit.

Merci Guillaume
 
Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Guillaume, bonjour le forum,

Il y a d'abord un point qui me gêne... Votre vouvoiement. J'ai pris l'habitude de tutoyer tout le monde dans ce forum mais je me rends compte que vous ne me répondez qu'en me vouvoyant. Je préfèrerais franchement que nous nous tutoyions mais je peux comprendre que cela vous pose un problème. Je verrai dans votre prochaine réponse si vous acceptez cela ou non...

J'ai bien compris vos explications et pour qu'une modification apportée dans l'onglet Source soit répercutée après la copie il me faut trouver une référence unique dans les deux onglets. En effet comment savoir si la modif (ligne 45 par exemple) dans Source correspond bien à la ligne 12 dans Poste 27 en non pas à la ligne 31 ?

Donc je propose de rajouter une colonne (à droite ou à gauche) contenant un numéro de ligne incrémenté.
Ce numéro sera copié dans l'onglet de destination et du coup, si vous modifiez la colonne Typo de la ligne 49 (par exemple) et que cette ligne est dans l'onglet Poste 30, je pourrais dire à la macro :
Rechercher dans la colonne x de l'onglet Poste 30 le numéro 49 et appliquer la modification...

Suis-je assez clair ? Dites-moi si vous pensez que le rajout d'une colonne incrémentée est faisable et je vous ferai alors une proposition en tenant compte de vos dernières remarques.

Édition :

Ooops j'avais pas vu que cette colonne existe déjà en E !!! Je travaille sur une proposition...
 
Dernière édition:
Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Guillaume, bonjour le forum,

Il y a d'abord un point qui me gêne... Votre vouvoiement. J'ai pris l'habitude de tutoyer tout le monde dans ce forum mais je me rends compte que vous ne me répondez qu'en me vouvoyant. Je préfèrerais franchement que nous nous tutoyions mais je peux comprendre que cela vous pose un problème. Je verrai dans votre prochaine réponse si vous acceptez cela ou non...

J'ai bien compris vos explications et pour qu'une modification apportée dans l'onglet Source soit répercutée après la copie il me faut trouver une référence unique dans les deux onglets. En effet comment savoir si la modif (ligne 45 par exemple) dans Source correspond bien à la ligne 12 dans Poste 27 en non pas à la ligne 31 ?

Donc je propose de rajouter une colonne (à droite ou à gauche) contenant un numéro de ligne incrémenté.
Ce numéro sera copié dans l'onglet de destination et du coup, si vous modifiez la colonne Typo de la ligne 49 (par exemple) et que cette ligne est dans l'onglet Poste 30, je pourrais dire à la macro :
Rechercher dans la colonne x de l'onglet Poste 30 le numéro 49 et appliquer la modification...

Suis-je assez clair ? Dites-moi si vous pensez que le rajout d'une colonne incrémentée est faisable et je vous ferai alors une proposition en tenant compte de vos dernières remarques.

Édition :

Ooops j'avais pas vu que cette colonne existe déjà en E !!! Je travaille sur une proposition...

Donc je ne vais plus vouvoyer 😀
Non l'ajoute d'une colonne ne me propose pas de problème. On poura masquer cette colonne ou non ? Si tu peux modifier la feuille.

Par contre je suis étudiant donc je suis présent en entreprise que le lundi, mardi, mercredi.
Je déménage ce weekend, je aurais pas de connexion internet chez moi pour l'instant. C'est pour te prévenir au cas ou tu posterais un message je pourrais répondre que lundi.
 
Dernière édition:
Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Guillaume, bonjour le forum,

J'ai revu la manière d'aborder le problème. La macro ne s'effectue plus automatiquement à l'édition (trop compliqué à gérer) mais je te propose de l'effectuer en double-cliquant sur n'importe quelle cellule de la ligne que tu veux copier. Donc tu remplis les données et quand c'est bon tu copies dans l'onglet indiqué d'un simple double-clic. La cellule de la colonne E (celle du numéro) prend une couleur rose indiquant qu'elle a été copiée.
Si dans l'onglet Source tu modifies quoi que ce soit dans le tableau la cellule de la colonne E reprend sa couleur initiale. Tu sauras donc qu'il te faut redouble-cliquer pour actualiser longlet cible.

Dans cette nouvelle mouture le numéro sert de base. Avant de copier dans la dernière ligne, la macro recherche d'abord si le numéro n'existe pas. Si il existe la copie se fera par dessus, sinon elle se fera à la première ligne vide rencontrée.

Est-ce que cela te convient ?

Au sujet du numéro. Veux tu qu'il soit généré automatiquement à l'édition du défaut (par exemple) ?

Je verrai après comment générer des lignes en fin de tableau...
 

Pièces jointes

Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Robert

Oui ça me convient.
En faite on pourrait rattacher peut être la macro à un bouton car ça serait peut être plus simple à régler pour toi au niveau de la macro.
Elle pourrait refaire le tri de la page source quand on clic dessus. Je te laisse voir ce point (fait au plus simple pour toi).
Cela revient un peu à ma version de départ sur le principe (avec un bouton) mais en beaucoup plus performant avec ce que tu as ajouté.

Sinon pour le numéro, oui il peut être gérer automatiquement.
 
Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Guillaume, bonjour le forum,

En pièce jointe une version 4 avec 2 boutons et la macro événementielle Change.

Le bouton Tri vérifie que la cellule A1 ne soit pas rose puis dispatche les données dans leur onglet respectif, soit en fin de tableau soit en recopiant par dessus la ligne si le numéro existe déjà. Ensuite, il supprime la couleur rose de la cellule A1.

À chaque nouvelle édition du tableau de l'onglet Source, la cellule A1 prend la couleur Rose (pour indiquer visuellement qu'il y a eu un changement) et le numéro s'incrémente automatiquement, si l'édition se fait dans une ligne ne contenant pas de numéro.

Le bouton Lignes rajoute 10 lignes en fin de tableau...
 

Pièces jointes

Re : Recopier une ligne dans une autre feuille si elle correspond

Bonjour Guillaume, bonjour le forum,

Oui pas de problème... Tu poses ta question sur ce même fil et tu m'envoies un mail perso pour m'avertir. Comme ça tu pourras aussi obtenir de l'aide d'autres participants car pendant les fêtes pas sûr que je sois autant disponible...
 
- 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

Discussions similaires

Réponses
3
Affichages
879
Retour