Boucle et méthode Find

Bonjour tout le monde!

Dans un premier temps je tenais à dire que les tutos du site sont top et m'ont bien aidé!

Je viens solliciter votre aide car j'ai un soucis soit avec une boucle soit avec la méthode find...

Je m'explique:

Le premier onglet de mon fichier "PLANNIF" (colonne C) contient ma valeur de référence pour effectuer ma recherche. Elle est aussi dans mon onglet "Suivi CDM".

Je souhaite récupérer la date (colonne A) de l'onglet "suivi CDM" et venir la mettre dans l'onglet "PLANNIF" avec des conditions.

Avec le code suivant, je n'arrive à récupérer que le 1ere date de mon onglet "suivi CDM".

Je penche donc pour un problème avec la boucle....

Quelqu'un aurait-il un conseil ou une piste pour m'aider??

Ci-joint le fichier!

Sub Majplanning()

Application.ScreenUpdating = False

 ''''''''''''''''''''''''''''''''' Maj de la date de commande dans longlet planning prearm qui se trouve dans l'onglet suivi CDM'''''''''''''''''''''''''''''''''''

''''Déf de la plage de données de la feuille Suivi CDM
ThisWorkbook.Worksheets("Suivi CDM").Select
Dim PlageCellSuiviCDM As Range
DerlignesuiviCdm = Range("A" & Rows.Count).End(xlUp).Row
DercolonnesuiviCdm = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Set PlageCellSuiviCDM = Range(Cells(1, 1), Cells(DerlignesuiviCdm, DercolonnesuiviCdm))

'Def de la colonne LPR de l'onglet suivi cdm
ThisWorkbook.Worksheets("Suivi CDM").Select
Dim colonnelprsuivicdm As Variant
Set colonnelprsuivicdm = Range("D1", Range("D1").End(xlDown))
colonnelprsuivicdm.Select

''Déf de la plage de données des num LPR dans feuille plannif
ThisWorkbook.Worksheets("PLANNIF").Select
Dim NumLPR As Variant
Set NumLPR = Range("C1", Range("C1").End(xlDown))

''Compte le nombre de boucle à effectuer
Dim NbLPR As Integer
NbLPR = Range("C1", Range("C1").End(xlDown)).Rows.Count

'' Boucle Find LPR / date commande
    Set trouvedatecdm = colonnelprsuivicdm.Find("*", LookIn:=xlValues)
       If Not trouvedatecdm Is Nothing Then
            For i = 2 To NbLPR
        If Sheets("PLANNIF").Range("C" & i).Value = Sheets("Suivi CDM").Range("D" & trouvedatecdm.Row) Then
        Sheets("PLANNIF").Range("O" & i).Value = Sheets("Suivi CDM").Range("A" & trouvedatecdm.Row).Value
        ElseIf Sheets("PLANNIF").Range("C" & i) = "Initial" Then
        Sheets("PLANNIF").Range("O" & i) = "Initial"
        Else
        Sheets("PLANNIF").Range("O" & i) = "Non commandé"
        End If
            Next i
        End If

End Sub

Merci d'avance pour vos réponses!

101cdm.xlsm (19.06 Ko)

Bonsoir Momosoupe, bonsoir le forum,

Peut-être comme ça, sans le méthode Find et avec l'utilisation de variables tableaux qui permettent l'exécution très rapide du code :

Public Sub Macro1()
Dim P As Worksheet 'déclare la variable P (onglet Plannif)
Dim S As Worksheet 'déclare la variable S (onglet Suivi CDM)
Dim TP As Variant 'déclare la variable TP (Tableau Plannif)
Dim TS As Variant 'déclare la variable TS (Tableau Suivi CDM)
Dim I As Integer 'déclare la variable I (incrément)
Dim J As Integer 'déclare la variable J (incrément)

Set P = Worksheets("PLANNIF") 'définit l'onglet P
Set S = Worksheets("Suivi CDM") 'définit l'onglet S
TP = P.Range("A1").CurrentRegion 'définit le tableau TP
TS = S.Range("A1").CurrentRegion 'définit le tableau TS
For I = 2 To UBound(TP) 'boucle 1 : sur toutes les lignes I du tableau TP (en partant de la seconde)
    For J = 2 To UBound(TS) 'boucle 2 : sur toutes les lignes J du tableau TS (en partant de la seconde)
        Select Case TP(I, 3) 'agit en fonction du cas de la valeur de la données ligne I colonne 3 de TP
            Case TS(J, 4) 'cas égale à la donnée ligne J colonne 4 de TS
                'renvoie dans la cellule ligne I colonne O de l'onglet P la date en ligne J colonne 1 de TS et sort de la boucle 2
                P.Cells(I, "O") = CDate(TS(J, 1)): Exit For
            Case "Initial" 'cas "Initial
                'renvoie "Initial" dans la cellule ligne I colonne O de l'onglet P et sort de la boucle 2
                P.Cells(I, "O") = "Initial": Exit For
            Case Else 'tous les autres cas
                'renvoie "Non Commandé" dans la cellule ligne I colonne O de l'onglet P
                P.Cells(I, "O") = "Non Commandé"
        End Select 'fin de l'action en fonction de la valeur de la donnée ligne I colonne 3 de TP
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

Wouah! Merci pour cette réponse très rapide, efficace et aussi détaillée!

Effectivement il n'y a pas photo! Je suis charmée par la fonction ubound! Bien plus rapide que End(xlDown). Je l'avais vu dans les tutos il y a quelques semaines mais pas encore à l'aise pour l'utiliser lorsque je l'ai lu.

J'ai l'impression qu'il n'y a pas mieux pour un tableau dynamique car je l'ai adapté à toute sorte de valeur ensuite.

J'ai essayé avec find car je pensai que c'était mieux que vlookup. Pour mon info personnel, le find est plus adapté si la valeur cherchée n'est pas dans la première colonne par rapport à vlookup? C'est bien la seule différence?

C'est vraiment top! Merci encore!

Rechercher des sujets similaires à "boucle methode find"