Recherche sur plusieurs feuille [Résolu]

Signaler
Messages postés
45
Date d'inscription
lundi 1 mai 2000
Statut
Membre
Dernière intervention
25 février 2012
-
jraynald
Messages postés
45
Date d'inscription
lundi 1 mai 2000
Statut
Membre
Dernière intervention
25 février 2012
-
Bonjour,
je cherche à réaliser sous vba excel une routine qui va me chercher si une donnée de la feuille "rech" existe dans les autres feuilles du classeur excel et si oui me rapatrier le nom de la feuille ou est présente la donnée.
ma routine bloque au niveau de set c cells.find...
erreur 1004
la méthode activate de la classe Range a échoué
quelle erreur ai-je commis

Sub rechercher()
Dim essai as String
i = 5
essai = Sheets("rech").Range("B" & i).Text
While essai <> ""
Set c = Cells.Find(what:=essai, After:=ActiveCell, LookIn:=xlFormulas, _
        lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
nomfeuille = ActiveSheet.Name

If c Is Nothing Then
Sheets("rech").Range("C" & i).Value = "pas programmée"
i = i + 1
Else
If nomfeuille <> "rech" Then
Sheets("rech").Range("C" & i).Value = nomfeuille
i = i + 1
End If
End If
Wend
end sub


Merci d'avance pour votre aide

9 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
car il y a là une "philosophie" qui m'échappe (à moins que ton but soit ésotérique)
Pose toi cette question :
une ligne composée de différentes valeurs se réfère-t-elle systématiquement à un même "article" du seul fait qu'une seule de ses valeurs existe quelque part (et de surcroît n'importe où) sur une autre feuille ?
Etonnant, comme démarche.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Et puis :
au lieu d'aller chercher des bouts de code sur a toile (je le sais), essaye donc de commencer à réfléchir et travailler par toi-même !
Exemple. Tu as écrit (ton premier message) :
qui va me chercher si une donnée de la feuille "rech" existe dans les autres feuilles du classeur excel

ce qui veut dire que tu dois aller rechercher sur toutes les feuilles qui ne sont pas la feuille "rech".
Au lieu de ton array de feuilles (et avec leurs index ... ce qui provoquerait des surprises si jamais un onglet était déplacé) === >>
La collection Worksheets existe. Elle contient des feuilles auxquelles on peut se référer ( comme pour toute collection ), à sa guise, soit par leur index, soit par leur nom.
Ainsi, donc Worsheets("toto") se réfère à la feuille nommée "toto"
On peut parcourir toute collection par une boucle For Each
Une feuille a un nom ? Chaque feuille de la collection worksheets en a un (la propriété Name)
et donc :
dim f as worksheet
for each f in worksheets
  if f.name <> "rech" then
   ' toute feuille traitée dans ce bloc if sera donc autre que la feuille "rech"
  end if
next

C'est très délibérément que je me contente de ce que je vien de t'exposer. Je tiens à ce que tu t'y mettes un peu plus consciemment et sérieusement.
Voilà ! travaille, mais travaille réellement et fais-le bien.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,

On se demande tout le temps à quoi peut bien servir d'activer systématiquement une cellule. Pour en faire quoi ? de la confiture ?
Et là, tu la payes bien cher, ta confiture. Car si rien n'est retourné par Find, que prétendrais-tu activer ? de l'inexistant ?
Te voilà bien malin, tiens, à chercher à savoir quelle feuille tu as "activée" à partir de la cellule que tu as "activée"
Et de toutes manières, ton Find, tel qu'écrit, ne va aller chercher que dans ta feuille de départ !

Si j'ai compris ra question, c'est une recherche (find), qu'il va te falloir faire dans toutes tes feuilles (en bouclant sur les éléments de la collection WorkSheet).
Allez. réfléchis et recommence.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
45
Date d'inscription
lundi 1 mai 2000
Statut
Membre
Dernière intervention
25 février 2012

j'ai pris en compte ta remarque, avec ce nouveau code je n'ai plus d'erreur, mais est-il bien écrit ?

Sub rechercher()
i = 5
essai = Sheets("rech").Range("B" & i).Text

While essai <> ""
    'selection des feuilles ou il faut chercher
    Sheets(Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "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")).Select
        
    Set c = Cells.Find(what:=essai, After:=ActiveCell, LookIn:=xlFormulas, _
        lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
    If c Is Nothing Then
      Sheets("rech").Range("C" & i).Value = "pas programmée"
      i = i + 1
     Else
      c.Activate
      nomfeuille = ActiveSheet.Name
      i = i + 1
    End If
essai = Sheets("rech").Range("B" & i).Text
Wend

End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Tu connais déjà ma réponse ===>> non tant que (entre autres) j'y vois des Select, des Activate...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Et je constate que ta recherche continue à se faire sur une seule feuille : la feuille active au moment du lancement de ta macro.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
45
Date d'inscription
lundi 1 mai 2000
Statut
Membre
Dernière intervention
25 février 2012

pas de select ni d'activate, est-ce mieux?

Sub recherche2()
Dim essai As String
Dim Ws As Worksheet
i = 5
essai = Sheets("rech").Range("B" & i).Text
While essai <> ""
  For Each Ws In Sheets(Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "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"))
    Set cel = Ws.Cells.Find(what:=essai, LookIn:=xlValues, lookat:=xlWhole)
    If cel Is Nothing Then

       Sheets("rech").Range("C" & i).Value = "pas programmée"
     Else

       Sheets("rech").Range("C" & i).Value = Ws.Name
      Exit For
    End If
  Next Ws
i = i + 1
essai = Sheets("rech").Range("B" & i).Text
Wend
End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
C'est déjà moins mal ....
reste à savoir :
- ou, comment et pourquoi s'arrête ta valeur i
- si cela correspond exactement à ce que tu cherches à faire et pourquoi tyu recherches à chaque fois sur la totalité des cellules (mais tu es seul à savoir dans quel but).



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
45
Date d'inscription
lundi 1 mai 2000
Statut
Membre
Dernière intervention
25 février 2012

Désolé du retard,
Merci pour ton aide