VBA recherchev** dans feuilles autre classeur
Résolu
nauard
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je seche sur VBA....Merci du fond du coeur pour votre aide.
Je veux faire une recherchev d'une valeur (source) dans toutes les feuilles d'un autre classeur (cible).
la source se trouve en A1
la cible se trouve en colonne A,
Je veux renvoyer en A3 la ligne entière ou se trouve la cible (recherchev normal dans un classeur entier)
Là ou ça se gate pour moi, c'est que ma valeur cible apparaît au moins 2 fois...
Ma source est en fait le numéro d'une écriture comptable et je veux donc renvoyer l'intégralité de l'écriture qui peut avoir 10 lignes, voire plus.
J'ai donc programmé non pas une recherchev en VBA mais un listage des coordonnées ou se trouve la cible (je n'obtient que les numéros ligne et pas encore le nom de la feuille) pour ensuite copier/coller les cellules à droite de ma cible (Je me suis inspiré de la fonction que j'ai trouvé sur :
http://www.commentcamarche.net/forum/affich-2265048-vba-excel-selection-multiple-de-feuilles )
Cela fonctionne très bien en définissant la feuille du classeur cible mais pas en voulant "balayer" l'ensemble des feuilles.
Voici mon code, merci pour votre aide.
Je ne sais plus quoi faire...
FONCTION PROGRAMMEE POUR ETRE APPELEE ENSUITE (ENREGISTREE EN MODULE)
Sub Macro1()
'Retourne toutes les adresses trouvées dans la recherche
'WkbN = nom du classeur, avec cette donnée la fonction peut être mise dans un xla
'WksN = nom de la feuille
'Plage = les coordonnées de la plage à parcourir.
'Retour dans le tableau donner en argument.
Function RechFind(ByVal Cle As String, ByVal WkbN As String, ByVal WksN As String, ByVal Plage As String, ByRef TBadress() As Variant) As Long
Dim cherche, Ix As Long, PrAddress
Dim J As Integer
With Workbooks("WORKBOOK CIBLE").Sheets("FEUILLE CIBLE").Range(Plage)
Set cherche = .Find(Cle)
If Not cherche Is Nothing Then
PrAddress = cherche.Address
Do
ReDim Preserve TBadress(Ix)
TBadress(Ix) = cherche.Address
Set cherche = .FindNext(cherche)
Ix = Ix + 1
Loop While Not cherche Is Nothing And cherche.Address <> PrAddress
End If
End With
'nombre d'occurence(s) trouvée(s), Retour 0 si aucune occurence
RechFind = Ix
Set cherche = Nothing 'Libére la mémoire occupée par l'objet.
End Function
BOUTON DE COMMANDE EN USERFORM POUR LISTER LES REFERENCES (APPEL DE LA FONCTION PRECEDENTE )
Dim R As Long, TB()
Dim i As Integer
R = RechFind(Range("a1"), ThisWorkbook.Name, ActiveSheet.Name, Range("A1:A65536").Address, TB())
If R > 0 Then
For i = 0 To R - 1 ' ou ubound(TB)
'exemple
Sheets("FEUILLE SOURCE").Cells(i + 3, 1) = Range(TB(i)).Row
Next i
End If
Private Sub CommandButton6_Click()
BOUTON DE COMMANDE EN USERFORM POUR RENVOYER LES DONNEES DES COORDONNEES IDENTIFIEES
ligne = 3
'recopie des libellé des colonnes
Cells(2, "b") = Workbooks("WORKBOOK CIBLE").Sheets("FEUILLE CIBLE").Cells(1, "b")
'recopie de la 1ere valeur à droite de la cible
For Each c In Range("A3", [A65000].End(xlUp))
d = c.Value
Cells(ligne, "b") = Workbooks("WORKBOOK CIBLE.xls").Sheets("FEUILLE CIBLE").Cells(d, "b")
ligne = ligne + 1
Next c
End Sub
Je pense qu'il me manque 2 choses :
balayer les feuilles du Workbook-cible
récupérer le nom de la feuille ou se trouve ma cible
<config>Windows XP, Office 2003
Je seche sur VBA....Merci du fond du coeur pour votre aide.
Je veux faire une recherchev d'une valeur (source) dans toutes les feuilles d'un autre classeur (cible).
la source se trouve en A1
la cible se trouve en colonne A,
Je veux renvoyer en A3 la ligne entière ou se trouve la cible (recherchev normal dans un classeur entier)
Là ou ça se gate pour moi, c'est que ma valeur cible apparaît au moins 2 fois...
Ma source est en fait le numéro d'une écriture comptable et je veux donc renvoyer l'intégralité de l'écriture qui peut avoir 10 lignes, voire plus.
J'ai donc programmé non pas une recherchev en VBA mais un listage des coordonnées ou se trouve la cible (je n'obtient que les numéros ligne et pas encore le nom de la feuille) pour ensuite copier/coller les cellules à droite de ma cible (Je me suis inspiré de la fonction que j'ai trouvé sur :
http://www.commentcamarche.net/forum/affich-2265048-vba-excel-selection-multiple-de-feuilles )
Cela fonctionne très bien en définissant la feuille du classeur cible mais pas en voulant "balayer" l'ensemble des feuilles.
Voici mon code, merci pour votre aide.
Je ne sais plus quoi faire...
FONCTION PROGRAMMEE POUR ETRE APPELEE ENSUITE (ENREGISTREE EN MODULE)
Sub Macro1()
'Retourne toutes les adresses trouvées dans la recherche
'WkbN = nom du classeur, avec cette donnée la fonction peut être mise dans un xla
'WksN = nom de la feuille
'Plage = les coordonnées de la plage à parcourir.
'Retour dans le tableau donner en argument.
Function RechFind(ByVal Cle As String, ByVal WkbN As String, ByVal WksN As String, ByVal Plage As String, ByRef TBadress() As Variant) As Long
Dim cherche, Ix As Long, PrAddress
Dim J As Integer
With Workbooks("WORKBOOK CIBLE").Sheets("FEUILLE CIBLE").Range(Plage)
Set cherche = .Find(Cle)
If Not cherche Is Nothing Then
PrAddress = cherche.Address
Do
ReDim Preserve TBadress(Ix)
TBadress(Ix) = cherche.Address
Set cherche = .FindNext(cherche)
Ix = Ix + 1
Loop While Not cherche Is Nothing And cherche.Address <> PrAddress
End If
End With
'nombre d'occurence(s) trouvée(s), Retour 0 si aucune occurence
RechFind = Ix
Set cherche = Nothing 'Libére la mémoire occupée par l'objet.
End Function
BOUTON DE COMMANDE EN USERFORM POUR LISTER LES REFERENCES (APPEL DE LA FONCTION PRECEDENTE )
Dim R As Long, TB()
Dim i As Integer
R = RechFind(Range("a1"), ThisWorkbook.Name, ActiveSheet.Name, Range("A1:A65536").Address, TB())
If R > 0 Then
For i = 0 To R - 1 ' ou ubound(TB)
'exemple
Sheets("FEUILLE SOURCE").Cells(i + 3, 1) = Range(TB(i)).Row
Next i
End If
Private Sub CommandButton6_Click()
BOUTON DE COMMANDE EN USERFORM POUR RENVOYER LES DONNEES DES COORDONNEES IDENTIFIEES
ligne = 3
'recopie des libellé des colonnes
Cells(2, "b") = Workbooks("WORKBOOK CIBLE").Sheets("FEUILLE CIBLE").Cells(1, "b")
'recopie de la 1ere valeur à droite de la cible
For Each c In Range("A3", [A65000].End(xlUp))
d = c.Value
Cells(ligne, "b") = Workbooks("WORKBOOK CIBLE.xls").Sheets("FEUILLE CIBLE").Cells(d, "b")
ligne = ligne + 1
Next c
End Sub
Je pense qu'il me manque 2 choses :
balayer les feuilles du Workbook-cible
récupérer le nom de la feuille ou se trouve ma cible
<config>Windows XP, Office 2003
A voir également:
- Vba recherchev dans une autre feuille
- Feuille de score belote excel - Forum Excel
- Recherchev texte ✓ - Forum Excel
- Bruler une feuille de laurier - Guide
- Comment supprimer une feuille sur word - Guide
- Feuille de pointage excel - Télécharger - Tableur
3 réponses
Bonjour,
Si tu veux "balayer" toutes les feuilles du classeur cible :
Ce qui devrait pouvoir s'adapter au code de ton bouton de commande :
Ou en tout cas quelque chose d'approchant.....
Si tu veux "balayer" toutes les feuilles du classeur cible :
Dim Wsh As Worksheet For Each Wsh in ThisWorkbook.WorkSheets 'blabla Next
Ce qui devrait pouvoir s'adapter au code de ton bouton de commande :
Dim R As Long, TB() Dim i As Integer Dim Wsh As Worksheet For Each Wsh in ThisWorkbook.WorkSheets R = RechFind(Range("a1"), ThisWorkbook.Name, Wsh.Name, Range("A1:A65536").Address, TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("FEUILLE SOURCE").Cells(i + 3, 1) = Range(TB(i)).Row Next i End If Next
Ou en tout cas quelque chose d'approchant.....
Merci pour ton aide.
Je suis au taff, je regarderai le code ce soir.
Merci encore !
Merci tout de meme