Recherche de valeur dans différentes feuilles

Bonjour,

J'ai écris un code qui doit me permettre de rechercher des valeurs de la feuille "bilan" sur la feuille 2.

Ce code doit repérer :

  • si le numéro a déjà été traité, auquel cas la boucle s'arrête et passé au n° suivant
  • si le numéro est present sur la feuille 2 : si non, on l'indique dans une msgbox, si oui, on compte combien de fois il est present, afin de faire deux actions différentes si le n° est present une seule fois sur la feuille 2 ou s'il est en doublon.

Cependant, mon code me renvoie des résultats fantaisistes, dans une logique que je peine à comprendre. Je cherche désespérément mon erreur depuis plusieurs jours mais là je sèche....

Merci à celui qui pourra m'aider !!

Zarathoustra

Sub recupinfos()

'déclaration des variables
Dim numdeposte, adresse As String
Dim nbcellsfeuil1, nbcellsfeuil2, ligneprec, lignesuiv, R, nbdoublons, nbdoublons2 As Integer
Dim numrecherche As Object

'on obtient le numéro de la ligne du dernier numéro de licencié pour chaque feuille
nbcellsfeuil1 = Sheets(1).Range("C" & Rows.Count).End(xlUp).Row
nbcellsfeuil2 = Sheets(2).Range("C" & Rows.Count).End(xlDown).Row

'c'est une boucle qui va passer un après l'autre les n° de licenciés de la colonne C
Sheets(1).Activate
For Each R In Sheets(1).Range("C2:C" & nbcellsfeuil1)
        'on enregistre le n° de licencié
        numdeposte = R.Value
        'on enregistre l'adresse du n° de licencié
        adresse = R.Address
        'on enregistre la ligne précédente celle du n° de licencié étudié
        ligneprec = R.Row - 1
        'on enregistre la ligne suivante celle du n° de licencié étudié
        lignesuiv = R.Row + 1
        'on cherche le nombre de fois où apparaît le n° de licencié dans les cellules précédentes
        With Worksheets(1)
        nbdoublons = Application.WorksheetFunction.CountIf(Range("C1", "C" & ligneprec), numdeposte)
        End With
        's'il n'apparaît pas avant, alors on recherche les infos directement
        If nbdoublons = 0 Then
            'With Worksheets("feuil2")
                'on définit la plage de la cellule (numrecherche) en fonction du n° de licencié recherché (numdeposte)
                Set numrecherche = Sheets(2).Range("C2:C" & nbcellsfeuil2).Cells.Find(what:=numdeposte, lookat:=xlWhole, searchorder:=xlByColumns, searchdirection:=xlNext)
            'End With
            'si on ne trouve pas le n° de licencié sur la feuille 2, on écrit not found
            If numrecherche Is Nothing Then
                MsgBox "not found"
            Else
                's'il y a des résultats, on vérifie le nombre de fois où apparaît le n° de licencié sur la feuille 2
                With Worksheets("feuil2")
                    nbdoublons2 = Application.WorksheetFunction.CountIf(Range("C2:C" & nbcellsfeuil2), numdeposte)
                End With
                's'il apparaît plusieurs fois, on le note
                If nbdoublons2 > 1 Then
                    MsgBox "il y a des doublons dans la feuil2"
                Else
                    'sinon, on marque que le n° a été trouvé
                    MsgBox "trouvé " & numdeposte
                End If
            End If
        'sinon on écrit que le num de licencié a déjà été trouvé
        Else
        MsgBox "on a retrouvé dans les cellules supérieures le " & numdeposte
        End If
Next R
End Sub

Bonsoir Zarathoustra, bonsoir le forum,

Comme tu es resté très énigmatique sur les actions à réaliser (tout autant que ton code d'ailleurs) je te propose le code commenté, à finaliser, ci-dessous :

Sub Macro1()
Dim B As Worksheet 'déclare la variable B (onglet Bilan)
Dim F As Worksheet 'déclare la variable F (onglet Feuil2)
Dim TB As Variant 'déclare la variable TB (Tableau Bilan)
Dim I As Integer 'déclare la variable I (Incrément)
Dim NB As Integer 'déclare la variable NB (NomBre)

Set B = Sheets("Bilan") 'définit l'onglet B
Set F = Sheets("feuil2") 'définit l'onglet T
'définit le tableau Bilan TB (données éditées de la colonne C de l'onglet B
TB = B.Range("C1:C" & B.Range("C" & Application.Rows.Count).End(xlUp).Row)
For I = 2 To UBound(TB, 1) 'boucle sur toutes les lignes du tableau TB (en partant de la seconde)
    NB = 0 'réinitialise la variable NB

    'la il faudrait mettre la condition si le numéro a déjà été traité mais comme pour moi ça ne signifie rien je n'ai pas codé

    'si TB(I,1) est égale à "En attente" passe au numéro suivant via l'étiquette "suite"
    If TB(I, 1) = "En attente" Then GoTo suite
     'définit le nombre NB de fois qu'apparaît le numéro de licencié dans la colonne C de l'onglet F
    NB = Application.WorksheetFunction.CountIf(F.Columns(3), TB(I, 1))
    Select Case NB 'agit en fonction du nombre NB
        Case 0 'cas 0
            MsgBox "Le numéro de licencié " & Chr(34) & TB(I, 1) & Chr(34) & " n'est pas présent dans l'onglet " & Chr(34) & "Feuil2" & Chr(34) & " !"
        Case 1 'cas 1
            'code pour action si présent une unique fois
        Case Else 'tous les autres cas
            'code pour action si présent plusieurs fois
    End Select 'fin de l'action en fonction du nombre NB
suite: 'étiquette
Next I 'prochaine ligne de la boucle
End Sub

Bonsoir TauThème,

Merci pour ta réponse dont je viens prendre connaissance.

Mon problème s'est réglé presque facilement ce matin, après une bonne nuit de sommeil : la déclaration de mes variables était un vrai bazar, je n'avais pas saisi comment bien déclarer les variables (je croyais qu'un "Dim numdeposte, adresse as string" donnait le caractère string à numdeposte et à adresse, ce qui n'était pas le cas.

Merci et bonne soirée !

Rechercher des sujets similaires à "recherche valeur differentes feuilles"