Excel 2007: Chercher valeur d'1 cellule dans plusieurs feuilles
Résolu
cs_douda06
Messages postés
68
Statut
Membre
-
cs_douda06 Messages postés 68 Statut Membre -
cs_douda06 Messages postés 68 Statut Membre -
Bonjour,
Je voudrai svp savoir comment avec VBA, faire une condition sur une chaîne de caractère, en cherchant dans toutes les feuilles du classeur et en cherchant après dans toutes les colonnes de la première ligne.
J'ai essayé plusieurs choses mais ça ne marche pas:
Pourquoi ça me met l'erreur "La methode 'Range' de l'objet '_Worksheet' a échoué ?
SOS merci d'avance ^^
Je voudrai svp savoir comment avec VBA, faire une condition sur une chaîne de caractère, en cherchant dans toutes les feuilles du classeur et en cherchant après dans toutes les colonnes de la première ligne.
J'ai essayé plusieurs choses mais ça ne marche pas:
For Each ws In ActiveWorkbook.Worksheets
clom_num = ws.Range("A1").End(xlToRight).Column
For Chx = 1 To clom_num
If ws.Cells(1, Chx).Value = "Pick List Name" Then
clnm_name = ws.Cells(2, Chx).Address
End If
Next
With ws.Range("clnm_name:clnm_name").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Liste
.IgnoreBlank = True
.InCellDropdown = True
End With
Pourquoi ça me met l'erreur "La methode 'Range' de l'objet '_Worksheet' a échoué ?
SOS merci d'avance ^^
4 réponses
-
Bonjour,
clnm_name étant une variable, il convient de ne pas la placer entre guillemets. Au lieu de"clnm_name:clnm_name"
:clnm_name & ":" & clnm_name
Sinon, plutôt que de faire colonne par colonne, tu pourrais utiliser la méthode find pour te renvoyer ton objet Range :
Dim MyRange As Range For Each ws In ActiveWorkbook.Worksheets clom_num = ws.Range("A1").End(xlToRight).Column Set MyRange = ws.Range(Cells(1, 1), Cells(1, clom_num)).Cells.Find("Pick List Name") If Not MyRange Is Nothing Then 'Ici on a trouvé "Pick List Name" MsgBox MyRange.Address Else 'Ici on n'a pas trouvé End If Next
Cordialement,
Franck -
Bonjour pijaku,
Merci pour ta réponse, j'ai testé la méthode Find, mais ça me donne toujours la même erreur lors de l'exécution sur cette ligne :
Set MyRange = ws.Range(Cells(1, 1), Cells(1, clom_num)).Cells.Find("Pick List Name")
Erreur :La methode 'Range' de l'objet '_Worksheet' a échoué
est ce que ça a rapport avec le "ws" ? -
Essayez ceci :
Dim MyRange As Range, ws As Worksheet For Each ws In ActiveWorkbook.Worksheets With ws clom_num = .Range("A1").End(xlToRight).Column Set MyRange = .Range(.Cells(1, 1), .Cells(1, clom_num)).Cells.Find("Pick List Name") If Not MyRange Is Nothing Then 'Ici on a trouvé "Pick List Name" MsgBox MyRange.Address Else 'Ici on n'a pas trouvé End If End With Next
Cordialement,
Franck -
J'ai trouvé comment faire à l'aide de la méthode Find .. finalement hihi .. voila la réponse:
For Each ws In ActiveWorkbook.Sheets Set MyRange= ws.Rows(1).Find("Pick List Name", , xlValues, xlWhole) If Not MyRange Is Nothing Then With ws.Columns(MyRange.Column).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=Liste .InCellDropdown = True End With End If Next ws
Merci pijaku :):)-
De rien...
Alors, oui, mais...
Dans ton cas,xlvalues
etxlwhole
ne me semblent pas indispensables...
A ta place j'utiliserais le dernier code que je t'ai donné, --> ICI <--
Pourquoi?
Parce que lorsque tu utilises la méthode find, Excel "enregistre" certains de ces paramètres, et notamment LookIn et LookAt (Voir ==> ICI <==)
Comme tu ne spécifies rien, les valeurs par défaut (qui sontxlValues
etxlWhole
) te conviennent tout à fait... Cela t'évitera de te creuser la tête une éternité la prochaine fois que tu utilises Find et que cela ne fonctionne pas....... -
-