Copier/coller et changement de liste déroulante

leop93

XLDnaute Occasionnel
Bonjour

Me voici de nouveau confronté à un problème sur mon classeur Excel. En fait, ce n'est pas vraiment un problème, c'est une petite "amélioration" que je souhaiterais réaliser.

J'aimerais que lors d'un copier/coller d'une ligne contenant une liste déroulante (=etat_feuil1) de ma première feuille (Feuil1) vers ma seconde feuille (Feuil2), la liste déroulante devienne une autre liste déroulante (=etat_feuil2) qui me permettrait d'avoir d'autres états, états qui ne me serviraient pas sur la première feuille.
J'espère que ce n'est pas trop confus... Si jamais vous ne comprenez pas bien ce que j'aimerais, n'hésitez pas à me le faire savoir.

Mon classeur de test en pièce jointe. ;)

Bonne journée

Leop93
 

Pièces jointes

  • changementetat.xlsm
    23.3 KB · Affichages: 96

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Bonjour Leop93,

Si j'ai bien compris, essayes de remplacer ta Sub CopierColler() par:

Code:
Sub CopierColler()
z = 0
 LigneFeuille1 = 2
    Sheets("Feuil1").Select
    i = 0

    Do While i <= 400
        
        If Range("c2").Offset(i, 0).Value = "A concevoir" Then
            Range("c2").Offset(i, 0).EntireRow.Copy
            Sheets("Feuil2").Select
            Cells(LigneFeuille1, 1).EntireRow.Insert Shift:=xlDown
            Sheets("Feuil1").Select
            z = z + 1
        End If
        
        i = i + 1
    Loop
    Sheets("Feuil2").Select
    Range("C2:C" & z).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=etat_feuil2"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

Dans la colonne "C" de ta feuil2 la source de la liste présente sur ces cellules est remplacée par etat_feuil2.

Bonne journée !
 

leop93

XLDnaute Occasionnel
Re : Copier/coller et changement de liste déroulante

Bonjour Vdavid

Merci beaucoup pour le code et la rapidité ! C'est presque entièrement fonctionnel, il n'arrive juste pas à gérer la dernière ligne copier/coller lorsqu'il y a 2 lignes ou plus (elle garde la liste déroulante =etat_feuil1).

Je vais voir pour essayer d'adapter. Ou si tu vois directement où c'est, je suis preneur. ;)

Leop93

EDIT: j'ai simplement fait cette modification et c'est donc fonctionnel pour tous les cas testés jusqu'à maintenant:
Code:
Range("C2:C" & Z + 1).Select
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Re Leop93,
Autant pour moi,
Le z doit commencer à 1 et non à 0,

Il faut remplacer :

Code:
Sub CopierColler()
z = 0
 LigneFeuille1 = 2
...

Par:

Code:
Sub CopierColler()
z = 1
 LigneFeuille1 = 2

...

Je viens de revérifier chez moi ça marche !
Dis moi si tu as un autre soucis!
 

leop93

XLDnaute Occasionnel
Re : Copier/coller et changement de liste déroulante

Ah j'ai édité en même temps que tu postais la solution.

Donc ta méthode est bien mieux que celle que j'avais proposé en EDIT de mon message précédent car la mienne créait une liste déroulante vide sur la case d'après.

Encore merci, c'est vraiment au top. Et je vois que niveau liste déroulante, tu es calé (cf autre aide sur une question de ce genre ce matin). :)
 

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Re,

L'enregistreur de macro aide beaucoup pour les synthaxes, c'est bien plus facile de partir d'un enregistrement et d'adapter ensuite le code généré selon tes besoins :)
Si tu as un doute sur un mot clé dans ton code office fournit une super aide également quand tu appuies sur "F1" !

En tout cas content de t'avoir aidé, bonne journée ! :)
 

leop93

XLDnaute Occasionnel
Re : Copier/coller et changement de liste déroulante

Me re-voila ! :)

Si jamais tu repasses par ici Vdavid, ou si quelqu'un aurait quelques minutes à m'accorder, j'ai une nouvelle question.

En partant du code de Vdavid:
Code:
Sub CopierColler()
z = 1
 LigneFeuille1 = 2
    Sheets("Feuil1").Select
    i = 0

    Do While i <= 400
        
        If Range("c2").Offset(i, 0).Value = "A concevoir" Then
            Range("c2").Offset(i, 0).EntireRow.Copy
            Sheets("Feuil2").Select
            Cells(LigneFeuille1, 1).EntireRow.Insert Shift:=xlDown
            Sheets("Feuil1").Select
            z = z + 1
        End If
        
        i = i + 1
    Loop
    Sheets("Feuil2").Select
    Range("C2:C" & z).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=etat_feuil2"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
Comment faire pour que ce qui est sélectionné aille dans deux feuilles ("Feuil2" et "Feuil3"), que ce qui va dans "Feuil2" prenne la liste déroulante "=etat_feuil2" et que ce qui va dans "Feuil3" prenne la liste déroulante "=etat_feuil3" ?

Bon appétit à tous

Leop93
 

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Re Leop93,

Tu peux essayer de rajouter:

Code:
Sub CopierColler()
Dim j&
For j = 2 To 3
z = 1
LigneFeuille1 = 2
i = 0

     Sheets("Feuil1").Select
    Do While i <= 400
        
        If Range("c2").Offset(i, 0).Value = "A concevoir" Then
            Range("c2").Offset(i, 0).EntireRow.Copy
            Sheets("Feuil" & j).Select
            Cells(LigneFeuille1, 1).EntireRow.Insert Shift:=xlDown
            Sheets("Feuil1").Select
            z = z + 1
        End If
        
        i = i + 1
    Loop

    Sheets("Feuil" & j).Select
    Range("C2:C" & z).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=etat_feuil" & j
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Next j
End Sub

Du coup tu peux remplacer les limites de j par autant de feuilles et d'états que tu souhaites !
Testé chez moi ça marche normalement :)
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Re,
Le problème vient de l'adaptation que tu essayes d'en faire, ça peut venir d'un filtre, d'une référence qui n'as pas le même nom (Exemple le nom des feuilles ..., le nom de tes plages de données etc ...).
Dans ton fichier exemple la macro renvoie une erreur si tu n'as pas de nom de plage "etat_feuil3" ce qui est normal puisque la macro renvoie une valeur non définie !

Vérifie bien que tu as nommé toutes tes plages !


Sinon j'ai rajouter une condition au code; dans le cas où il n'y a pas de conditions réalisées:

Code:
Sub CopierColler()
Dim j&
For j = 2 To 3
z = 1
LigneFeuille1 = 2
i = 0

     Sheets("Feuil1").Select
    Do While i <= 400
        
        If Range("c2").Offset(i, 0).Value = "A concevoir" Then
            Range("c2").Offset(i, 0).EntireRow.Copy
            Sheets("Feuil" & j).Select
            Cells(LigneFeuille1, 1).EntireRow.Insert Shift:=xlDown
            Sheets("Feuil1").Select
            z = z + 1
        End If
        
        i = i + 1
    Loop
If z <> 1 Then
    Sheets("Feuil" & j).Select
    Range("C2:C" & z).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=etat_feuil" & j
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
 End If
Next j
End Sub

N'hésites pas si tu as d'autres difficultées !
 

leop93

XLDnaute Occasionnel
Re : Copier/coller et changement de liste déroulante

Ah j'ai édité pendant que tu me répondais.

Je me suis rendu compte que l'erreur venait de la modification d'un nom d'une liste déroulante. ;)

Donc mon autre difficulté serait au niveau des noms distincts des feuilles et listes déroulantes, comment les gérer ?
 

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Re, Re,

Si tes feuilles ont un nom distinct, tu peux les référencer par ordre dans une feuille, avec pour ligne le numéro de "etat_feuil"

Exemple si Dessin est ta feuille 2 et mecanique ta feuille 1,
Dans une feuille nommé "Test" tu mets en
A2: Dessin ==> B2 : etat_feuil2
A3: Mecanique ==> B3: etat_feuil3
etc...

Et tu remplaces:

Code:
Sheets("Feuil" & j).Select

Par:

Code:
Sheets(Sheets("Test").Range("A" & j).Value).Select

et :

Code:
xlBetween, Formula1:="=etat_feuil" & j

Par:

Code:
xlBetween, Formula1:= "=" &  Sheets("Test").Range("B" & j).Value
C'est surtout utile si tu veux le faire sur beaucoup de feuilles ...

EDIT : Modif sur la dernière ligne de code
 
Dernière édition:

leop93

XLDnaute Occasionnel
Re : Copier/coller et changement de liste déroulante

Ok, donc si j'ai bien compris en partant du principe que j'ai besoin de ceci:
Feuil1 est renommée en RADO et la liste déroulante est =etat_chef
Feuil6 est renommée en DESSIN et la liste déroulante est =etat_dessin
Feuil7 est renommée en MECANIQUE et la liste déroulante est =etat_meca
Je dois donc dans un feuille que je nomme test par exemple:
me placer en A2 et écrire RADO ==>
me placer en B2 et écrire etat_chef
me placer en A3 et écrire DESSIN ==>
me placer en B3 et écrire etat_dessin
me placer en A4 et écrire MECANIQUE ==>
me placer en B4 et écrire etat_meca
C'est bien ça ? Ou alors je dois mettre etat_feuil1, etat_feuil2, etat_feuil3 ? Je ne suis pas sûr sur ce point...
 

VDAVID

XLDnaute Impliqué
Re : Copier/coller et changement de liste déroulante

Tu peux faire comme tu l'as écrit !
En fait le nom de la plage pris en compte dans le code sera bien la valeur de la cellule !
Après tu peux faire varier les limites de "j" en fonction du nombre de feuille que tu as, sachant que la première valeur de "j" renverra la case avec le numéro de ligne correspondant
 

Discussions similaires

Réponses
8
Affichages
167

Statistiques des forums

Discussions
312 211
Messages
2 086 295
Membres
103 171
dernier inscrit
clemm