Probleme code a cause d'une liste deroulante

Bonjour

j'essaye de faire un code mais celui ci ne marche pas. le problème c’est parce que je travaille avec une liste déroulante

en effet je voudrais si la ligne 2 et colonne 5 du classeur 2 = ligne i colonne 6 du classeur 1 alors quelque cellule du classeur 2 st copier vers le classeur 1

voici mon code ainsi qu'un fichier

Sub ReelAdhesions1()

    Dim CS As Workbook 'Classeur 1
    Dim CD As Workbook 'Classeur 2=CD
    Dim OS As Worksheet 'ONGLET classeur 1=OS
    Dim OD As Worksheet 'ONGLET classeur 2=OD
    Dim DernLigne As Long 'Dernière Ligne classeur 1

    Set CS = Workbooks("Classeur1.xlsm")
    Set CD = Workbooks("Classeur2.xlsm")
    Set OS = CS.Worksheets("Feuil1")
    Set OD = CD.Worksheets("RECAP")
    DernLigne = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row

    For l = 3 To DernLigne
        If OD.Cells(2, 5).Value = OS.Cells(l, 6).Value Then   'mois
            OS.Cells(l, 8).Value = OD.Cells(6, 9).Value 'nombre adhé
        End If
    Next l

End Sub

merci pour votre aide

10classeur1.xlsm (15.03 Ko)
10classeur2.xlsm (8.40 Ko)

Bonjour Aude, bonjour le forum,

il te faut utiliser les même formats de date. Et même comme ça, pour comparer deux date en VBA c'est toujours complexe. Aussi je transforme la date en entier long ce qui rend impossible l'inversion jour/mois.

J'ai donc modifié la liste de validation de données en créant une liste au même format dans la colonne N du classeur 2...

Et voici le code modifié du classeur 1 :

Sub ReelAdhesions1()
Dim CS As Workbook 'Classeur 1
Dim CD As Workbook 'Classeur 2=CD
Dim OS As Worksheet 'ONGLET classeur 1=OS
Dim OD As Worksheet 'ONGLET classeur 2=OD
Dim DernLigne As Long 'Dernière Ligne classeur 1
Dim L As Long 'déclare la variable L
Dim DS As Long 'déclare la variable DS (Date Source)
Dim DD As Long 'déclare la variable DD (Date Destination)

Set CS = Workbooks("Classeur1.xlsm")
Set CD = Workbooks("Classeur2.xlsm")
Set OS = CS.Worksheets("Feuil1")
Set OD = CD.Worksheets("RECAP")
DernLigne = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row
DD = DateSerial(Year(OD.Cells(2, 5).Value), Month(OD.Cells(2, 5).Value), Day(OD.Cells(2, 5).Value))
For L = 3 To DernLigne
    DS = DateSerial(Year(OS.Cells(L, 6).Value), Month(OS.Cells(L, 6).Value), Day(OS.Cells(L, 6).Value))
    If DD = DS Then OS.Cells(L, 8).Value = OD.Cells(6, 9).Value 'nombre adhé
Next L
End Sub
7classeur2.xlsm (8.39 Ko)

merci beaucoup pour ton aide

dans mon fichier je ne peux pas rajouter tout les mois en même temps (je dois avoir une liste déroulante)

du coup c'est pas possible de comparer?

Re,

Tu n'as pas compris ce n'est pas grave...

Je te propose un nouveau code qui devrait fonctionner avec tes deux fichiers exemple du premier post. Remplace juste le code du Classeur 1 par celui-ci :

Sub ReelAdhesions1()
Dim CS As Workbook 'Classeur 1
Dim CD As Workbook 'Classeur 2=CD
Dim OS As Worksheet 'ONGLET classeur 1=OS
Dim OD As Worksheet 'ONGLET classeur 2=OD
Dim DernLigne As Long 'Dernière Ligne classeur 1
Dim L As Long 'déclare la variable L
Dim D As Date 'déclare la varaible D
Dim DS As Long 'déclare la variable DS (Date Source)
Dim DD As Long 'déclare la variable DD (Date Destination)

Set CS = Workbooks("Classeur1.xlsm")
Set CD = Workbooks("Classeur2.xlsm")
Set OS = CS.Worksheets("Feuil1")
Set OD = CD.Worksheets("RECAP")
DernLigne = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row
D = CDate(OD.Cells(2, 5).Value)
DD = DateSerial(Year(D), Month(D), 1)
For L = 3 To DernLigne
    DS = DateSerial(Year(OS.Cells(L, 6).Value), Month(OS.Cells(L, 6).Value), Day(OS.Cells(L, 6).Value))
    If DD = DS Then OS.Cells(L, 8).Value = OD.Cells(6, 9).Value 'nombre adhé
Next L
End Sub

ah c'est bon j'ai compris

ça marche très bien

mercii beaucoup pour ton aide

Rechercher des sujets similaires à "probleme code cause liste deroulante"