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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. cs_douda06 Messages postés 68 Statut Membre
     
    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
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  4. cs_douda06 Messages postés 68 Statut Membre
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. cs_douda06 Messages postés 68 Statut Membre
       
      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