Copier ligne sur une autre feuille avec condition

JPsaga

XLDnaute Nouveau
Bonjour,

J'ai un fichier excel dans lequel j'ai des commandes client. Ces commandes sont reprises ligne par ligne et au bout de chaque ligne j'ai un menu déroulant avec plusieurs possibilités.

J'aimerais trouvé une solution pour envoyer les lignes qui sont dans le menu déroulant avec un statut "Ready for upload" vers une nouvelle feuille "Commande traitée";. Mais je voudrais replacer ces informations sur des colonnes précies. Et le plus difficile est que je voudrais que cela se fasse automatiquement quand je place le statut sur "Ready for Upload":(


Je ne sais pas si quelqu'un peut m'aider mais je me suis permis de joindre un exemple avec le résultat que j'essaye d'obtenir.

Merci d'avance pour votre aide.

JP
 

Pièces jointes

  • exemple.xls
    25 KB · Affichages: 899
  • exemple.xls
    25 KB · Affichages: 926
  • exemple.xls
    25 KB · Affichages: 925

JPsaga

XLDnaute Nouveau
Re : Copier ligne sur une autre feuille avec condition

Bonjour Sergio,

Un tout grand merci parce que c'est vraiment ca que je recherchais et le résultat est parfait!:)

Par simple curiosité j'aimerais savoit comment cette macro fonctionne mais je ne la trouve pas?

Pourrais-tu me donner une petite explication si tu as le temps?


Merci pour ton aide précieuse et pour cette réponse si rapide:)

A++
 

Spitnolan08

XLDnaute Barbatruc
Re : Copier ligne sur une autre feuille avec condition

Bonjour le fil,

Etant de passage, et Sergio n'étant pas dans le coin...

Si bien compris : tu trouveras la macro dans le module de la feuille 1 après avoir fait Alt + F11

La macro intercepte une modification de saisie dans la feuille "Comandes" et renseigne la feuille "Commandes traitées" les données de la feuille "Comandes".

Cordialement
 

JPsaga

XLDnaute Nouveau
Re : Copier ligne sur une autre feuille avec condition

Bonjour,

Oui mais je voulais voir comment Sergio avait procédé mais j'ai vu la Macro était protégée, chose que je comprends très bien.

En tout cas, un tout grand merci pour votre aide.

A+
JP
 

SergiO

XLDnaute Accro
Re : Copier ligne sur une autre feuille avec condition

Bonjour JPsaga, spit

Merci Spit pour ta réponse en mon absence :)

Ma macro n'est pas protégée, elle est accessible comme l'explique Spinolan dans son message précédent

Pour info, voici son contenu:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E2:E65536")) Is Nothing Then
If Target.Value = "Ready for upload" Then
With Sheets("Commande traitée")
LigVide = .Range("B65536").End(xlUp).Row + 1
.Cells(LigVide, 2) = Target.Offset(0, -4).Value
.Cells(LigVide, 3) = Target.Offset(0, -3).Value
.Cells(LigVide, 4) = Target.Offset(0, -2).Value
.Cells(LigVide, 10) = Target.Offset(0, -1).Value
End With
End If
End If
End Sub

@+
 

JPsaga

XLDnaute Nouveau
Re : Copier ligne sur une autre feuille avec condition

Bonjour Sergio,

J'ai encore une petite question; j'aimerais pouvoir écrire des informations manuelles sur la deuxième feuille. Mais si la Macro tourne quand je place une ligne sur"Ready for upload" elle copie la ligne sur celle que j'avais précédemment écrite manuellement.

Je pense que je dois modifier qqch dans la macro; dans la ligne ci-dessous :

LigVide = .Range("B65536").End(xlUp).Row + 1

Mais je sais pas comment... :(

Pourrais-je encore abuser de ton aide?

Merci
A+
JP
 

SergiO

XLDnaute Accro
Re : Copier ligne sur une autre feuille avec condition

Bonjour,

La macro teste la première ligne vide en colonne B.
Si dans ta saisie manuelle, tu ne mets rien en B, en effet, elle sera écrasée.
La solution :
  1. Soit tu renseignes la colonne B
  2. Soit tu modifies le test de la ligne vide en remplaçant B65536 par C65536, D65536 ou J65536 si tu utilises ces colonnes pour ta saisie manuelle.
@+
 

giuliano_m13

XLDnaute Nouveau
Re : Copier ligne sur une autre feuille avec condition

Bonjour à tous,

je relance ce sujet car j'ai trouvé là un outil qui fonctionne parfaitement dans mon cas sauf pour un petit détail.

En effet lorsque l'on modifie la valeur cible par "Ready for upload" tout marche nickel mais si on s'aperçoit que l'on s'est trompé et que l'on revient sur une donnée cible différente la copie dans l'autre feuille ne s'efface pas et crée un doublon lorsque l'on refait "ready for upload"

J'espère avoir réussi à être clair...

Merci de votre aide si vous avez une petite idée.

Ju
 

Hinen

XLDnaute Nouveau
Re : Copier ligne sur une autre feuille avec condition

Bonjour, je tient tout d abord a vous féliciter pour votre forum je suis débutant sur excel et j'ai trouver réponse a pas mal des mes problèmes.
J'ai recupéré votre maccro et l'ai modifiée par rapport a mon besoin, je m'explique:
J'ai un premier tableau qui liste mes commandes, en suite a l'aide d'un menu déroulant je choisi la machine que je veux utiliser pour produire ma pièce ce qui envoi la ligne dans une autre feuille selon la machine (3 feuilles machines différentes).

Le seul problème est que les feuilles machines ne n'actualisent pas (si je sélectionne la machine A puis décide de sectionner la machine B, la ligne qui a été copiée dans la feuille de la machine A n'est pas supprimée, idem si je supprime une commande dans ma première liste elle reste dans la feuille machine correspondante).

Voici ma maccro.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("L6:L65536")) Is Nothing Then
If Target.Value = "VF 3" Then
With Sheets("VF3")
LigVide = .Range("B65536").End(xlUp).Row + 1
.Cells(LigVide, 1) = Target.Offset(0, -11).Value
.Cells(LigVide, 2) = Target.Offset(0, -10).Value
.Cells(LigVide, 3) = Target.Offset(0, -9).Value
.Cells(LigVide, 4) = Target.Offset(0, -8).Value
.Cells(LigVide, 5) = Target.Offset(0, -7).Value
.Cells(LigVide, 6) = Target.Offset(0, -6).Value
.Cells(LigVide, 7) = Target.Offset(0, -5).Value
.Cells(LigVide, 8) = Target.Offset(0, -4).Value
.Cells(LigVide, 9) = Target.Offset(0, -3).Value
.Cells(LigVide, 10) = Target.Offset(0, -2).Value
.Cells(LigVide, 11) = Target.Offset(0, -1).Value
End With
End If
End If
If Not Intersect(Target, Range("L6:L65536")) Is Nothing Then
If Target.Value = "VF 2" Then
With Sheets("VF2")
LigVide = .Range("B65536").End(xlUp).Row + 1
.Cells(LigVide, 1) = Target.Offset(0, -11).Value
.Cells(LigVide, 2) = Target.Offset(0, -10).Value
.Cells(LigVide, 3) = Target.Offset(0, -9).Value
.Cells(LigVide, 4) = Target.Offset(0, -8).Value
.Cells(LigVide, 5) = Target.Offset(0, -7).Value
.Cells(LigVide, 6) = Target.Offset(0, -6).Value
.Cells(LigVide, 7) = Target.Offset(0, -5).Value
.Cells(LigVide, 8) = Target.Offset(0, -4).Value
.Cells(LigVide, 9) = Target.Offset(0, -3).Value
.Cells(LigVide, 10) = Target.Offset(0, -2).Value
.Cells(LigVide, 11) = Target.Offset(0, -1).Value
End With
End If
End If
If Not Intersect(Target, Range("L6:L65536")) Is Nothing Then
If Target.Value = "SL 20" Then
With Sheets("SL20")
LigVide = .Range("B65536").End(xlUp).Row + 1
.Cells(LigVide, 1) = Target.Offset(0, -11).Value
.Cells(LigVide, 2) = Target.Offset(0, -10).Value
.Cells(LigVide, 3) = Target.Offset(0, -9).Value
.Cells(LigVide, 4) = Target.Offset(0, -8).Value
.Cells(LigVide, 5) = Target.Offset(0, -7).Value
.Cells(LigVide, 6) = Target.Offset(0, -6).Value
.Cells(LigVide, 7) = Target.Offset(0, -5).Value
.Cells(LigVide, 8) = Target.Offset(0, -4).Value
.Cells(LigVide, 9) = Target.Offset(0, -3).Value
.Cells(LigVide, 10) = Target.Offset(0, -2).Value
.Cells(LigVide, 11) = Target.Offset(0, -1).Value
End With
End If
End If
End Sub

Merci de l'intérêt que vous porterez a mon problème.
 

SergiO

XLDnaute Accro
Re : Copier ligne sur une autre feuille avec condition

Bonjour Hinen et bienvenue sur XLD,

Voici un exemple, la macro se déclenche au changement d'onglets.
Le code est dans ThisWorkbook

Bon test.
@+
 

Pièces jointes

  • Ventil_Machines.zip
    11 KB · Affichages: 613

Hinen

XLDnaute Nouveau
Re : Copier ligne sur une autre feuille avec condition

Je n'y arrive pas, j'y connait rien en basic je me demande encore le bout de maccro que j'ai fait pour copier coller marche.

Serais trop demander que tu adapte ta macro a mon fichier ??

moi j'avais trouver ça mais ça ne marche pas:

Code:
Private Sub Workbook_Sheetdeactivate(ByVal Sh As Object)
Application.ScreenUpdating = False
Machine = ActiveSheet.Name
If Machine <> "OUTILS SPX" Then
Set W = Sheets("OUTILS SPX").Range("L6")
W.AutoFilter
W.AutoFilter Field:=12, Criteria1:=Machine
Derlig = Sheets("OUTILS SPX").Range("L65536").End(xlUp).Row
Sheets(Machine).Cells.Delete
Sheets("OUTILS SPX").Range("A6:L" & Derlig).Copy Destination:=Sheets(Machine).Range("A6")
W.AutoFilter
End If
Application.ScreenUpdating = True
End Sub


En fait il me supprime les tableau et ne ma laisse que 3 données dans les feuilles machines.
Ma feuille commande s'appelle "OUTILS SPX" et les autres ont les même nom que tu leur avait données VF 2, VF 3, SL 20 (les autres feuilles n'ont pas d'importance par rapport a mon problème).

Merci
 

Pièces jointes

  • PLANNING FAB.zip
    21.6 KB · Affichages: 310

SergiO

XLDnaute Accro
Re : Copier ligne sur une autre feuille avec condition

Re,
Rajoute un espace à VF2, VF3 et SL20 dans le nom des onglets et essaie ce code:
Code:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.ScreenUpdating = False
Machine = ActiveSheet.Name
If Machine = "VF 2" Or Machine = "VF 3" Or Machine = "SL 20" Then
Set W = Sheets("OUTILS SPX").Range("A5:L5")
W.AutoFilter
W.AutoFilter Field:=12, Criteria1:=Machine
Derlig = Sheets("OUTILS SPX").Range("L65536").End(xlUp).Row
Sheets(Machine).Cells.Delete
Sheets("OUTILS SPX").Range("A5:L" & Derlig).Copy Destination:=Sheets(Machine).Range("A5")
W.AutoFilter
End If
Application.ScreenUpdating = True
End Sub
@+
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 400
Messages
2 088 086
Membres
103 711
dernier inscrit
mindo