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

[Résolu/Fermé]
Signaler
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015
-
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015
-
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 ^^

4 réponses

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 652
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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" ?
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 652
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
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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 :):)
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 652
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.......
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015

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 :)