VBA copier/coller d'après les valeurs d'une liste déroulante

Bonjour,

je cherche a construire une macro qui en fonction d'une valeur choisie dans une liste déroulante (ComboBox) copie et colle une plage de données associée à cette valeur dans une colonne.

image

Si vous avez une idée de la manière dont ca peut s'écrire (je suis entièrement débutant en VBA)...

Merci de votre aide

Bonjour,

Crdlt

Bonjour,

Désolé, voici le fichier :

22classeur1.xlsm (23.35 Ko)

En espérant que ma demande est claire

Cordialement

Bonjour

Voici ce que vous pouvez faire
1. Supprimez la sub userform_activate
2. remplacez là par celle ci-dessous

Private Sub UserForm_initialize()
Dim dercol As Integer

With Worksheets("Feuil1")
    dercol = .Cells(7, Columns.Count).End(xlToLeft).Column
    ComboBox.List = Application.Transpose(.Range(.Cells(7, 5), .Cells(7, dercol)).Value)
End With
End Sub

3. Par rapport à votre demande, ajoutez le code ci-dessous dans votre usf

Private Sub ComboBox_Change()
Dim dercol As Integer, derlig As Integer, col As Integer

With Worksheets("Feuil1")
    col = ComboBox.ListIndex + 5

    derlig = .Cells(Rows.Count, col).End(xlUp).Row
    dercol = .Cells(7, Columns.Count).End(xlToLeft).Column + 1
    .Range(.Cells(7, col), .Cells(derlig, col)).Copy .Cells(7, dercol)

End With
End Sub

J'aurais toutefois évité de supprimer le 1 derrière le nom de la combo car si vous remettez une nouvelle dans votre userform, il faudra remettre le chiffre ou renuméroter le tout

si ok-_>

Cordialement

Merci beaucoup de l'aide c'est ce que je voulais. J'aurai juste une demande supplémentaire, est-ce possible de sélectionner une valeur dans la liste déroulante et cliquer sur le bouton "Create" pour que la colonne apparaisse.

Merci d'avance et des conseils

image

Et est-ce possible de supprimer les doublons dans la liste déroulante ?

image

Ah oui. désolé. C'est juste que vous vouliez créer la colonne via le bouton

1. remplacez Private Sub ComboBox_Change()

par ceci

Private Sub Create_Click()

2. Pour les doublons, d'abord est-ce normal que vous ayez deux fois le même projet sur votre feuille

14classeur1.xlsm (26.06 Ko)

Vous avez raison je ne devrais pas avoir 2 fois le même nom.

Ce qui vient de me donner une nouvelle idée, c'est d'ajouter une zone de texte avec le nouveau nom du projet. Donc est-ce possible de copier les valeurs d'un ancien projet dans une colonne en changeant le nom ?

image

Ce qui vient de me donner une nouvelle idée, c'est d'ajouter une zone de texte avec le nouveau nom du projet. Donc est-ce possible de copier les valeurs d'un ancien projet dans une colonne en changeant le nom ?

Ok. Après la création du nouveau projet, vous voulez fermer l'usf ?

Oui j'aimerai le fermer après la création du projet

Modifiez le code de création comme ceci

Private Sub Create_Click()
Dim dercol As Integer, derlig As Integer, col As Integer

If TextBox1 = "" Then MsgBox "veuillez donner une référence à votre projet": Exit Sub

With Worksheets("Feuil1")
    col = ComboBox.ListIndex + 5

    derlig = .Cells(Rows.Count, col).End(xlUp).Row
    dercol = .Cells(7, Columns.Count).End(xlToLeft).Column + 1
    .Range(.Cells(7, col), .Cells(derlig, col)).Copy .Cells(7, dercol)

    .Cells(7, dercol).Value = TextBox1.Value 'nouveau nom de projet

End With

Call Cancel_Click
End Sub

Modifiez le code pour fermer l'usf comme ceci

Private Sub Cancel_Click()
Unload Me
End Sub

Si ok et terminé

Je viens d'essayer si je n'ai qu'un seul projet pour commencer et le code plante, là je ne comprends pas trop.

Et je voudrais quand je clique sur "Create a New Project" supprimer une partie des valeurs de la colonne copier.

13classeur1.xlsm (26.81 Ko)

Bon évitez de remettre chaque fois un fichier. Sinon on n'en sort pas et cela alourdit toujours le forum inutilement

Normal parce que vous n'avez qu'une seul projet et l'utilisation de "List" implique que vous avez au moins 2 projets

Modifiez le code comme ceci

Private Sub UserForm_initialize()
Dim dercol As Integer

With Worksheets("Feuil1")
    dercol = .Cells(7, Columns.Count).End(xlToLeft).Column
    If dercol = 5 Then
        ComboBox.AddItem .Range("E7").Value
    Else
        ComboBox.List = Application.Transpose(.Range(.Cells(7, 5), .Cells(7, dercol)).Value)

    End If
End With
End Sub

D'accord je comprends mieux mon message d'erreur, merci de l'explication. Par contre est-ce possible de garder la mise en forme de la colonne lorsqu'on créer un projet à partir d'un existant ?

Par contre est-ce possible de garder la mise en forme de la colonne lorsqu'on créer un projet à partir d'un existant ?

Ben cela le fait puisque vous copiez la colonne depuis le choix de la combobox

Edit : à ce sujet il faudrait que vous ajoutiez cette ligne juste en dessous de If textbox1 = "" then...

If ComboBox.ListIndex = -1 Then MsgBox "veuillez choisir un projet dans la list": Exit Sub

Oui pardon je me suis mal exprimé ça conserve la mise en forme mais pas la largeur de la colonne d'origine.

J'aurai une dernière demande, je voudrais quand je clique sur "Create a New Project" supprimer une sélection de cellules de la colonne copier tout en gardant une partie ? Comme dans mon exemple je voudrais supprimer les cellules E8 et E10 lors de la création d'un nouveau projet.

pas la largeur de la colonne d'origine.

Vous voulez une largeur standard ou la largeur du projet sélectionné dans la combobox ?

Je voudrais une largeur standard à tous mes projets si possible

je vous remets le code complet

Private Sub Create_Click()
Dim dercol As Integer, derlig As Integer, col As Integer

If TextBox1 = "" Then MsgBox "veuillez donner une référence à votre projet": Exit Sub
If ComboBox.ListIndex = -1 Then MsgBox "veuillez choisir un projet dans la list": Exit Sub

With Worksheets("Feuil1")
    col = ComboBox.ListIndex + 5
    derlig = .Cells(Rows.Count, col).End(xlUp).Row
    dercol = .Cells(7, Columns.Count).End(xlToLeft).Column + 1

    .Range(.Cells(7, col), .Cells(derlig, col)).Copy .Cells(7, dercol)

    With .Cells(7, dercol)
        .Value = TextBox1.Value 'nouveau nom de projet
        .ColumnWidth = 16 'largeur colonne
    End With
End With

Call Cancel_Click
End Sub
Merci beaucoup de votre aide et de vos conseils

J'aurai une dernière demande, je voudrais quand je clique sur "Create a New Project" supprimer des cellules de la colonne copier tout en gardant une partie ? Comme dans mon exemple je voudrais supprimer les cellules E8 et E10 lors de la création d'un nouveau projet et garder la E9.
Rechercher des sujets similaires à "vba copier coller valeurs liste deroulante"