Excel 2007: Chercher valeur d'1 cellule dans plusieurs feuilles

Résolu/Fermé
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015 - Modifié par pijaku le 17/07/2014 à 07:54
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015 - 17 juil. 2014 à 13:29
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:
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 ^^
A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 17/07/2014 à 08:01
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
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
17 juil. 2014 à 11:38
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" ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 17/07/2014 à 11:49
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
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
Modifié par pijaku le 17/07/2014 à 12:06
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 :):)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 17/07/2014 à 12:12
De rien...

Alors, oui, mais...
Dans ton cas,
xlvalues
et
xlwhole
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 sont
xlValues
et
xlWhole
) 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.......
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
17 juil. 2014 à 13:29
Ah super, merci pour l'explication, je ne me suis même pas prise la peine de comprendre ce que c'etait xlValue et xlWhole..
Merci encore et bonne journée :)
0