Bonjour,

Je débute en VBA et je vous soumets donc mon problème en espérant que vous m'aidiez. Merci.
J'utilise deux feuilles excel :
Dans une première feuille excel, je parcours la première colonne qui contient des noms. Pour chaque élément de cette liste, je recherche s'il est contenu dans la première colonne de ma seconde feuille.
Si la seconde feuille contient dans sa première colonne le nom recherché issu de la première feuille, je met à jour des données sur cette ligne de la seconde feuille
La fontion find fonctionne correctement avec une string statique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Dim strCodeChaineARechercher As String
        strCodeChaineARechercher = [B]"MaChaine"[/B]        Set rColCode = wbClasseur1.Sheets(strFeuille1).Range("A1").EntireColumn
        Set rCodeChaine = rColCode.Find(strCodeChaineARechercher, lookat:=xlWhole)
mais dès lors que j'essai d'utiliser une variable string passée en paramètre ça ne fonctionne plus. Or je ne peux pas fixer la valeur de la string passé en paramètre puisque j'itère sur une liste de ma première feuille (susceptible de varier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 For lChaine = ws1.Range("A65536").End(xlUp).Row To 2 Step -1
        
        'Vérifie Chaine le Chaine existe dans Chaine_Nat et Chaine oui en récupère les dates de création et de Apres
        strCode2 = ""
        dAvant2 = Empty
        dApres2 = Empty
        strAvant2 = ""
        strApres2 = ""
        dApres1 = Empty
        
        Call getChaine(ws2, ws1.Cells(lChaine, 1), _
                    strCode2, strAvant2, dAvant2, strApres2, dApres2)

Private Sub getChaine(wsFeuille As Worksheet, strCodeChaineARechercher As String, _
                    strCodeChaineResultatRecherche As String, strAvant As String, dAvant As Date, strApres As String, dApres As Date)
    
    
    'Test
    Dim rColCode As Excel.Range
    Dim rCodeChaine As Excel.Range
    Set rColCode = wsFeuille.Range("A1").EntireColumn
    Set rCodeChaine =rColCode.Find(strCodeChaineARechercher)
Je ne vois pas si le problème est un problème de passage de paramètre par valeur ou référence, ou de possilibité de modification de la variable string ou d'utilisation de cellule d'une autre feuille?
Merci d'avance pour votre aide

Voici un plus grand extrait du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Sub maj()
    'mise à jour
    Dim wbClasseur1 As Workbook
    Dim ws2 As Worksheet, ws1 As Worksheet
    Dim strFeuille2 As String, strFeuille1 As String
 
    Set wbClasseur1 = Nothing
    Set ws2 = Nothing
    Set ws1 = Nothing
 
    Set wbClasseur1 = Workbooks("MonClasseur.xls")
 
    If (wbClasseur1 Is Nothing) = False Then
 
        strFeuille2 = "Feuil2"
        Set ws2 = wbClasseur1.Sheets(strFeuille2) 
 
        strFeuille1 = "Feuil1"
        Set ws1 = wbClasseur1.Sheets(strFeuille1)
 
        ''Test debut ok fonctionne bien du fait que strCodeChaineARechercher = "MaChaine"
        Dim rColCode As Excel.Range
        Dim rCodeChaine As Excel.Range
        Dim strCodeChaineARechercher As String
        strCodeChaineARechercher = "MaChaine"
        Set rColCode = wbClasseur1.Sheets(strFeuille1).Range("A1").EntireColumn
        Set rCodeChaine = rColCode.Find(strCodeChaineARechercher, lookat:=xlWhole)
        ''Test fin
 
 
        If (Not (ws2Ref Is Nothing Or ws1ref Is Nothing)) Then
            Call majChainedepuisFeuil1(ws2Ref, ws1ref)
 
 
 
 
Sub majChainedepuisFeuil1(ws2 As Worksheet, ws1 As Worksheet)
 
    Dim lChaine As Long
    Dim dAujourdhui As Date
    Dim strCode2 As String
    Dim dAvant2 As Date
    Dim strAvant2 As String
    Dim dApres2 As Date
    Dim strApres2 As String
    Dim dApres1 As Date
    Dim nNb1trt As Long
    Dim nNb1ouvert As Long
    Dim nNb1ferme As Long
 
Proc10:
    nNb1trt = 0
    nNb1ouvert = 0
    nNb1ferme = 0
 
 
Proc20:
 
    dAujourdhui = Date
 
    For lChaine = ws1.Range("A65536").End(xlUp).Row To 2 Step -1
 
        'Vérifie Chaine le Chaine existe dans Chaine_Nat et Chaine oui en récupère les dates de création et de Apres
        strCode2 = ""
        dAvant2 = Empty
        dApres2 = Empty
        strAvant2 = ""
        strApres2 = ""
        dApres1 = Empty
 
        Call getChaine(ws2, ws1.Cells(lChaine, 1), _
                    strCode2, strAvant2, dAvant2, strApres2, dApres2)
 
Private Sub getChaine(wsFeuille As Worksheet, strCodeChaineARechercher As String, _
                    strCodeChaineResultatRecherche As String, strAvant As String, dAvant As Date, strApres As String, dApres As Date)
 
 
    'Test debut
    Dim rColCode As Excel.Range
    Dim rCodeChaine As Excel.Range
    'Dim strCodeChaineARechercher As String
    'strCodeChaineARechercher = "MaChaine" 'TODO ok
    Set rColCode = wsFeuille.Range("A1").EntireColumn
    Set rCodeChaine =rColCode.Find(strCodeChaineARechercher)
 
    If (rCodeChaine Is Nothing) Then
        strCodeChaineResultatRecherche = ""
        dAvant = Empty
        strAvant = ""
        dApres = Empty
        strApres = ""
    Else
        strCodeChaineResultatRecherche = rCodeChaine.Offset(0, 0).Value
        strAvant = rCodeChaine.Offset(0, 21).Value
        dAvant = rCodeChaine.Offset(0, 21).Value
        strApres = rCodeChaine.Offset(0, 24).Value
        dApres = rCodeChaine.Offset(0, 24).Value
    End If
 
    If rCodeChaine Is Nothing Then