Chercher des cellules dans différents classeurs

benoa

XLDnaute Junior
Bonjour,

Je souhaiterais trouver dans deux classeurs différents la cellule contenant la chaîne de caractère "MaChaine"

En fait, pour la recherche dans un même classeur, j'utilise les formules suivantes :

Set Cell1 = Sheets("feuil1").Cells.Find(What:="MaChaine", after:=Cells(1, 1), MatchCase:=False)
Set Cell2 = Sheets("feuil2").Cells.Find(What:="MaChaine", after:=Cells(1, 1), MatchCase:=False)​

Suffit-il de préciser devant la commande ?:

Set Cell1 = WorkSheet("MonClasseur.xls").Sheets("feuil1").Cells.Find(What:="MaChaine", after:=Cells(1, 1), MatchCase:=False)​

Pour info, la chaine de caractère est toujours présente dans les fichiers.

Merci à tous pour vos suggestions.
 

Pierrot93

XLDnaute Barbatruc
Re : Chercher des cellules dans différents classeurs

Bonjour,

remplace plutôt :
Code:
WorkSheet("MonClasseur.xls")
par cela :
Code:
Workbooks("MonClasseur.xls").

et même punition pour l'argument "after", rajouter les objets classeur et feuille :
Code:
after:=Cells(1, 1)

bonne journée
@+
 

benoa

XLDnaute Junior
Re : Chercher des cellules dans différents classeurs

Ok j'ai changé comme tu m'a dit :

Set Cell1 = Workbooks("MonClasseur.xls").Sheets("feuil1").Cells.Find(What:="MaChaine", after:=Workbooks("MonClasseur.xls").Sheets("feuil1").Cells(1, 1), MatchCase:=False)​

Pourtant il m'indique une erreur '9' : "l'indice n'appartient pas à la selection", pourtant MaChaine appartient bien à MonClasseur.

Quelle peut être la raison de cette erreur?

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : Chercher des cellules dans différents classeurs

Bonjour à tous

Il faut que les deux classeurs soient ouverts.
Code:
Sub a()
Dim j As Byte, i As Byte
Dim t(), cell1 As Range, cell2 As Range
ReDim t(1 To Workbooks.Count)
For j = 1 To UBound(t)
t(j) = Workbooks(j).Name
Next
Set cell1 = Workbooks(t(1)).Sheets(1).Cells.Find(What:="toto", after:=Cells(1, 1), MatchCase:=False)
Set cell2 = Workbooks(t(2)).Sheets(1).Cells.Find(What:="toto", after:=Cells(1, 1), MatchCase:=False)
MsgBox cell1.Address
MsgBox cell2.Address
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Chercher des cellules dans différents classeurs

Re,

tu as une espace dans le nom de la feuille...
Code:
after:=Workbooks("MonClasseur.xls").Sheets("feuil1 ").

Edition : bonjour staple, peut être préciser les noms classeur et feuille de l'argument "after", comme indiqué post #2
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Chercher des cellules dans différents classeurs

Re, salut Pierrot 93

benoa
J'ai testé avant de soumettre (et cela fonctionne ici)
(avec deux classeurs ouverts dans la même instance avec la valeur toto dans la feuille 1 (en A1 pour l'un et B4 pour l'autre)
Tout comme cette variante
Code:
Sub test()
chercher "toto"
End Sub
Code:
Private Sub chercher(chaine As String)
Dim j As Byte, i As Byte, Message As String
Dim t(), cell1 As Range, cell2 As Range
ReDim t(1 To Workbooks.Count)
For j = 1 To UBound(t)
t(j) = Workbooks(j).Name
Next
Set cell1 = Workbooks(t(1)).Sheets(1).Cells.Find(What:=chaine, after:=Cells(1, 1), MatchCase:=False)
Set cell2 = Workbooks(t(2)).Sheets(1).Cells.Find(What:=chaine, after:=Cells(1, 1), MatchCase:=False)
Titre = "valeur cherchée: " & chaine & vbCrLf
Message = "Trouvée dans :" & vbCrLf
Message = Message & t(1) & ": " & cell1.Address(0, 0) & vbCrLf
Message = Message & t(2) & ": " & cell2.Address(0, 0) & vbCrLf
MsgBox Message, vbInformation, Titre
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Chercher des cellules dans différents classeurs

Re

La preuve en image ;)
chercherOK.png
Et en tenant compte de la pertinente remarque de Pierrot93, une variante avec ajoiut de nom de la feuille en paramètre
Code:
Private Sub chercher(nomfeuille As String, chaine As String)
Dim j As Byte, i As Byte, Message As String
Dim t(), cell1 As Range, cell2 As Range
ReDim t(1 To Workbooks.Count)
For j = 1 To UBound(t)
t(j) = Workbooks(j).Name
Next
    With Workbooks(t(1)).Sheets(1)
    Set cell1 = .Cells.Find(What:=chaine, after:=.[A1], MatchCase:=False)
    End With
    With Workbooks(t(2)).Sheets(1)
    Set cell2 = .Cells.Find(What:=chaine, after:=.[A1], MatchCase:=False)
    End With
Titre = "valeur cherchée: " & chaine & vbCrLf
Message = "Trouvée dans :" & vbCrLf
Message = Message & t(1) & ": " & cell1.Address(0, 0) & vbCrLf
Message = Message & t(2) & ": " & cell2.Address(0, 0) & vbCrLf
MsgBox Message, vbInformation, Titre
End Sub

Code:
Sub test()
chercher "Feuil1", "toto"
End Sub
 
Dernière édition:

benoa

XLDnaute Junior
Re : Chercher des cellules dans différents classeurs

Ok ça marche la recherche marche pour moi également, cependant, après débogage, j'ai une nouvelle erreur '91' : Variable de objet ou variable de bloc With non défini.


Dim Cell As Range, lig As Double
Set Cell = Workbooks("MonClasseur.xls").Sheets("feuil1").Cells.Find(What:=MaChaine, after:=Cells(1, 1), MatchCase:=False)
lig = Cell.Row


Pourtant j'ai bien déclarer l'ensemble de mes variables. Comment cela est possible?
 

Discussions similaires

Réponses
2
Affichages
136

Statistiques des forums

Discussions
312 429
Messages
2 088 351
Membres
103 823
dernier inscrit
ben talha redouane