Find avec paramètre string variable
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:
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:
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:
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 |