macro de recherche qui n'abouti pas ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

manfredi973

XLDnaute Occasionnel
bonjour à tout le forum
n'ayant pas eut de réponse, je ne suis pas sur que les pros du forum ait vu ma question
aussi je vous redemande de voir mon probleme avec la macro de recherche

quand je tape une reference (1000)dans le useform de recherche ,cette référence est bien
trouvée dans les 4 onglets (1,2,3,4) .
Par contre quand je tape une reference ( 2000 )presente dans seulement trois onglets ( 1,2,4 ) la recherche
ne trouve pas la réference dans l'onglet 4

je vous joins le fichier exemple qui je l'espere est assez clair,
je suis aussi nul en explication que dans les macros
je vous remercie de vous pencher sur ce probleme
manfredi
 

Pièces jointes

Re : macro de recherche qui n'abouti pas ?

Bonjour Staple
je ne sais pas .je suis debutant en vba .
mais d'apres mes souvenirs nous avions remis cette ligne pour ne chercher que dans la colonne A car avant la reference était rechercher sur toutes les colonnes
je vais faire un test en suprimant cette ligne
en attendant merci de cette premiere réponse 🙂
manfredi
 
Re : macro de recherche qui n'abouti pas ?

Renbonjour
j'ai refait le test avec la macro d'origine
____________________________________________
Sub Rechercher()
mot = UserForm2.TextBox1.Value 'définit la variable mot
z = 0 'définit la variable z

For x = 1 To Sheets.Count
Sheets(x).Select
Set trouvé1 = Cells.Find(What:=mot)
If Not trouvé1 Is Nothing Then
trouvé1.Activate
ActiveCell.Interior.ColorIndex = 3
'remplit le tableau dynamique (index onglet, adresse cellule)
ReDim Preserve AD(1, z)
AD(0, z) = x
AD(1, z) = trouvé1.Address
Exit Sub
End If
Next x

'affiche un message si le mot n'existe pas.
Unload UserForm2
MsgBox "Ce Nom n'existe pas."
Sheets("Feuil1").Activate
UserForm2.Show
End Sub
_________________________________________________
et le resultat est le meme , sauf que la recherche a bien lieu sur toutes les colonnes mais toujours sur les deux premiers onglets 🙁
manfredi
 
Re : macro de recherche qui n'abouti pas ?

Bonjour Manfredi & Staple,

Je pense qu'en supprimant le "exit sub" ça ira mieux, car la macro s'arrête dès le premier nom non trouvé au lieu de poursuivre dans toutes les feuilles restant à explorer.

Je viens de tester en recopiant la macro 2 et en mettant pour l'exemple mot = 1000, ça marche.

A plus,
Gruick

Edit : Ta premîère macro est trop compliquée, et je n'ai pas trop compris le rôle de la variable z, elle reste à 0, donc ton tableau AD en sera affecté.
 
Dernière édition:
Re : macro de recherche qui n'abouti pas ?

Bonjour Gruyk
j'ai oté la ligne "exit sub" mais chez moi ca ne fonctionne pas .
en tapant 1000 elle ne trouve rien , je joins la totalité de la macro

_____________________________________________________
Option Explicit 'oblige à déclarer toutes les variables

'déclaration des variables au niveau Public (valable pour tous le projet)
Public mot As String
Public x As Byte, y As Byte, z As Byte, n As Byte
Dim plage As Range
Public trouvé1 As Range, trouvé2 As Range
Public AD() As String

Sub Rechercher()
mot = UserForm2.TextBox1.Value 'définit la variable mot
z = 0 'définit la variable z
For x = 1 To Sheets.Count - 1
Sheets(x).Select
Set trouvé1 = Range("A1:A" & CStr(Range("A65000").End(xlUp).Row)).Find(What:=mot)
'définit la variable mot)
If Not trouvé1 Is Nothing Then
trouvé1.Interior.ColorIndex = 3
'remplit le tableau dynamique (index onglet, adresse cellule)
ReDim Preserve AD(1, z)
AD(0, z) = x
AD(1, z) = trouvé1.Address
trouvé1.Activate

End If
Next x

'affiche un message si le mot n'existe pas.
Unload UserForm2
MsgBox "Ce Nom n'existe pas."
Sheets("1").Activate
UserForm2.Show
End Sub
Sub Suivant()
ActiveCell.Interior.ColorIndex = 0
For y = 1 To Sheets.Count
Sheets(y).Select
Set trouvé2 = Range("A1:A" & CStr(Range("A65000").End(xlUp).Row)).Find(What:=mot)
'définit la variable mot)
If Not trouvé2 Is Nothing Then

'compare avec les adresses et index d'onglet du tableau dynamique
For n = 0 To z
If trouvé2.Address = AD(1, n) Then
If y = AD(0, n) Then GoTo suite
End If
Next n

trouvé2.Activate
ActiveCell.Interior.ColorIndex = 3
z = z + 1 'redéfinit la variable z

'remplit le tableau dynamique (index onglet, adresse cellule)
ReDim Preserve AD(1, z)
AD(0, z) = y
AD(1, z) = trouvé2.Address

Sheets(y).Activate
Range(AD(1, z)).Select
Exit Sub
Else
Sheets(x).Activate
Range(AD(1, z)).Select
UserForm2.Hide
MsgBox "Ce Nom n'existe plus."
UserForm2.Show
Exit Sub
End If

suite:
Next y

Unload UserForm2
MsgBox "Ce Nom n'existe plus."
ReDim AD(1, 0)
UserForm2.TextBox1.Value = mot
UserForm2.CommandButton2.Enabled = True
UserForm2.Show
End Sub
________________________________________________

merci pour votre aide 🙂
manfredi
 
Re : macro de recherche qui n'abouti pas ?

re,
Il faudrait nous expliquer ce qu'est censé faire la macro :
- rechercher une valeur dans toutes les feuilles
- la faire rougir de honte
- à quoi sert le tableau AD, collection d'adresses mais pourquoi.
sinon, on tourne en rond, en piétinant.
Quand on a un problème de ce genre, il faut expliquer les tenants, et surtout les aboutissants, sinon, les réponses seront partielles, donc incompletes, et d'autres questions se poseront.
A plus,
Gruick
 
Re : macro de recherche qui n'abouti pas ?

Salut tout le monde

si ta valeur est dans la colonne A comme dans ton dernier post, ci dessous petite macro à adapter
Option Base 1
Sub répertorier()
Dim tablo()
mot = 1000
For i = 1 To Sheets.Count
Sheets(i).Activate
With Sheets(i).Columns(1)
Set Cell = .Find(mot)
If Not Cell Is Nothing Then
nbre = nbre + 1
ReDim Preserve tablo(nbre)
tablo(nbre) = Sheets(i).Name
End If
End With
Next

If nbre = 0 Then
MsgBox "aucune valeur trouvée"
Exit Sub
Else
For k = 1 To nbre
Text = Text & " " & tablo(k)
Next
MsgBox Text
End If

End Sub
 
Dernière édition:
Re : macro de recherche qui n'abouti pas ?

Gruick à dit:
re,
Il faudrait nous expliquer ce qu'est censé faire la macro :
- rechercher une valeur dans toutes les feuilles
- la faire rougir de honte
- à quoi sert le tableau AD, collection d'adresses mais pourquoi.
sinon, on tourne en rond, en piétinant.
Quand on a un problème de ce genre, il faut expliquer les tenants, et surtout les aboutissants, sinon, les réponses seront partielles, donc incompletes, et d'autres questions se poseront.
A plus,
Gruick
bonsoir Gruick
pas facile a expliquer , ce que je veux, c'est rechercher ma réference " sur les 4 onglets par exemple "1000" , et quand je trouve la reference correspondant au bon fournisseur je copie la ligne pour faire ma commande

par contre je ne sais a quoi sert le tableau AD
manfredi
 
Re : macro de recherche qui n'abouti pas ?

excuser moi michel M
j'ai repondu a monsieur Gruick en ouvrant ma boite mail sans avoir avoir vu que vous avez étudier mon probleme , je viens de regarder la modif que vous me proposer mais j'avoue que je ne comprend pas tout
je vais essayer de piger pour que tout fonctionne par rapport a ma demande
merci de votre comprenhension , il y a excel.lent et je ne suis que debut.ent
manfredi 🙂
 
Re : macro de recherche qui n'abouti pas ?

Re, voilà la suite avec l'indication de la feuille et l'adresse de la cellule égale à 1000 d'où un tableau à 2 dimensions (tableau AD dans ton post). Je n'ai pas fait d'userform pour la démo

d'après tes post précédents, et je comprend et appuie les remarques de GRuick:
On s'arrête à la première cellule dans la colonne A de chaque feuille égale à la valeur cherchée (1000 dans la démo), on la colorie en rouge

La restitution se fait par msgbox

Sub répertorier()
Dim tablo()
mot = 1000

For i = 1 To Sheets.Count
Sheets(i).Activate
With Sheets(i).Columns(1)
Set Cell = .Find(mot)
If Not Cell Is Nothing Then
nbre = nbre + 1
ReDim Preserve tablo(1, nbre)
Cell.Interior.ColorIndex = 3
tablo(0, nbre) = Sheets(i).Name
tablo(1, nbre) = Cell.Address
End If
End With
Next

If nbre = 0 Then
MsgBox "aucune valeur trouvée"
Exit Sub
Else
For K = 0 To nbre
Text = Text & " " & tablo(0, K) & "." & tablo(1, K) & vbCr
Next
MsgBox Text
End If

End Sub
 
Re : macro de recherche qui n'abouti pas ?

Bonjour a tous ,bonjour Michel M
je vais essayer d'expliquer ce que je souhaite
dans mon classeur j'ai un listing de 250000 references que j'ai mis dans 4 onglets
en faisant la recherche d'une reference si celle ci existe, la cellule est marquer en rouge ,
en cliquant sur suivant je peux trouver la meme reference mais chez un fournisseur different
une fois mon founisseur choisis et la reference piece je fais ok
ce qui ouvre le deuxieme userform et dans celui ci j'ai un bouton copier coller
et la ligne complete va se coller dans la feuille de commande
j'espere avoir été suffisament clair mais j'en doute
je joints le fichier simplifier
Bon Dimanche à toutes et tous

manfredi
 

Pièces jointes

Re : macro de recherche qui n'abouti pas ?

Salut à tous,

Je persiste à dire que la procédure Rechercher ne permet pas de parcourir toutes les feuilles en cas de donnée non trouvée.
Avec

'affiche un message si le mot n'existe pas.
Unload UserForm2
MsgBox "Ce Nom n'existe pas."
Sheets("1").Activate
UserForm2.Show
End Sub

on se retrouve,dans ce cas, sur la « feuille1 ». On repart au début au lieu de continuer !

De plus, la procédure Suivant devrait consister à examiner la feuille suivante. Or elle commence la recherche sur la première feuille donc but n’est pas atteint !

Par contre, cela fonctionne quand la donnée est trouvée.

Il faudra revoir le traitement de Copier Coller.

@+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour