VBA- Copier des valeurs en fonction d'une liste déroulante

Bonjour à tous,

Je souhaiterai crééer une macro qui copie des données dans différentes feuilles en fonction de la valeur d'une liste déroulante.

 Sub Bank_Safe_ICBC()

    Application.ScreenUpdating = False
    ActiveSheet.Range("B3:J3").Copy
    If ActiveSheet.Range("A3") = "Bank" Then
    Sheets("Bank").Range("A" & Rows.Count).End(xlUp).Offset(1).Paste
    Else
    If ActiveSheet.Range("A3") = "ICBC" Then
    Sheets("ICBC").Range("A" & Rows.Count).End(xlUp).Offset(1).Paste
    Else
    Sheets("Safe").Range("A" & Rows.Count).End(xlUp).Offset(1).Paste
    End If
    End If
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    ActiveWorkbook.RefreshAll ' Dans le fichier de base je fais des TCD avec les data
    Range("B3:J3").ClearContents ' Supprime les valeurs qui ont été saisie dans la feuille formulaire

End Sub

Pourriez-vous m'expliquer ce qui cloche dans mon code ?

Merci par avance

59test-form.xlsm (19.63 Ko)

Bonjour

Teste avec ceci

Sub Bank_Safe_ICBC()

    Application.ScreenUpdating = False
      If ActiveSheet.Range("A3") = "Bank" Then
        Range("B3:J3").Copy Sheets("Bank").Range("A" & Rows.Count).End(xlUp).Offset(1)
        Else
        If ActiveSheet.Range("A3") = "ICBC" Then
          Range("B3:J3").Copy Sheets("ICBC").Range("A" & Rows.Count).End(xlUp).Offset(1)
          Else
          Range("B3:J3").Copy Sheets("Safe").Range("A" & Rows.Count).End(xlUp).Offset(1)
        End If
      End If
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    ActiveWorkbook.RefreshAll
    Range("J5:R5").ClearContents ' Supprime les valeurs qui ont été saisie dans la feuille formulaire

End Sub

Re,

Ca marche, merci !

Que je comprenne bien, mon code ne fonctionnait pas car il est nécessaire d'indiquer dans chaque condition la plage à selectionner et pas uniquement avant ?

De plus, le . paste est inutil ? L'indication . copy et la plage de destination suffit à faire comprendre qu'il faut coller les valeurs?

Merci par avance

Bonjour,

Sans copier... :

Sub Bank_Safe_ICBC()
    Dim nf$, n%, i%, m%, wsS As Worksheet
    Set wsS = Worksheets("Saisies")
    n = wsS.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 3 To n
        nf = wsS.Cells(i, 1)
        With Worksheets(nf)
            m = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Range("A" & m).Resize(, 9).Value = wsS.Cells(i, 2).Resize(, 9).Value
        End With
    Next i
    wsS.Range("A3:J" & n).ClearContents
End Sub

Cordialement.

Salut,

Merci également MFerrand. Ce code est un peu plus compliqué pour moi, je comprend pas bien les élements qui le composent... Je vais regarder ça de mon côté, peux-tu simplement m'expliquer la plus value de ton code par rapport au mien corrigé ?

Merci par avance !

Bonjour,

Utilisation d'une variable objet pour la feuille source et d'une variable (String) pour récupérer le nom de la feuille cible, économie des tests sur le nom de feuille, mise sous bloc With (qui dans le contexte n'aura pas beaucoup d'effet sur la rapidité, mais simplifie au moins l'écriture), inscription de la ligne par affectation directe de valeurs, sans copier ni coller, donc sans transit par le presse-papier, aucune des opérations n'a d'incidence sur l'affichage écran sauf l'effacement final (pas besoin de l'inhiber par conséquent).

Cordialement.

Rechercher des sujets similaires à "vba copier valeurs fonction liste deroulante"