Problème recherche dans tarif multi-onglets
Bonjour,
J'ai besoin d'aide suite à un problème concernant les résultats que j'obtiens d'une recherche dans plusieurs onglets.
Pour résumer, j'ai plusieurs onglets (plus de 100) reprenant chacun un fournisseur, avec divers éléments dont les prix d'achat et de vente.
J'ai repris et amélioré (tant bien que mal, je ne connais absolument rien en VBA, j'ai tâtonné comme je pouvais) le code permettant de chercher les données dans tous les onglets et de les retranscrire dans le premier onglet à partir d'une case servant d'objet de recherche. Donc en gros, on tape un mot dans une case et en cliquant sur e bouton servant à la recherche, celle-ci s'effectue et les données sont retranscrites.
La version que j'ai reprise faisait une recherche onglet par onglet. Je l'ai modifié en créant un loop autour de la recherche en changeant "Worksheets(1)" par "Worksheets(t)" et en demandant que le loop s'arrête quand t correspond au nombre d'onglets du classeur.
Le problème se pose avec les prix d'achat et de vente. Comme il s'agit de chiffres (plus précisément un style monétaire), le créateur du code a définit les variables comme des "single".
Malheureusement, quand je lance la recherche, un message d'erreur d'exécution 13 apparait. Pourtant, j'ai bien vérifier, tout ce qui est écrit est du chiffre. Je dos quand-même préciser que les cases sont des formules en fait, bien que le résultat soit un chiffre. Je ne sais pas si ça a son importance.
Et si jamais je change le type "single" en "string", la recherche semble marcher sans message d'erreur. Sauf que certains prix sont mal retranscrits (multipliés par 1000, 10.000 par exemple). L'ennui étant que je suis incapable de savoir pourquoi certains prix sont modifiés et pas d'autres.
Je ne sais pas si je suis assez clair et si les informations sont suffisantes pour m'aider. En complément, voici le code de recherche.
Sub recherche()
' Macro enregistrée le 26/07/2005 par Guillet
Dim lst1(200) As String, lst2(200) As String, lst3(200) As String, lst4(200) As Single
Dim lst5(200) As Single, lst6(200) As Single, lst7(200) As Single, lst8(200) As String
a = Worksheets(1).Range("A2").Value
b = 1
e = ThisWorkbook.Sheets.Count()
f = e + 1
t = 2
For i = 4 To 200
Worksheets(1).Cells(i, 1).Value = ""
Worksheets(1).Cells(i, 2).Value = ""
Worksheets(1).Cells(i, 3).Value = ""
Worksheets(1).Cells(i, 4).Value = ""
Worksheets(1).Cells(i, 6).Value = ""
Worksheets(1).Cells(i, 7).Value = ""
Worksheets(1).Cells(i, 8).Value = ""
Worksheets(1).Cells(i, 9).Value = ""
Next i
Do
With Worksheets(t).Range("d3:d1000")
Set c = .Find(a, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
lst3(b) = c.Value
lst1(b) = c.Offset(rowOffset:=0, columnOffset:=-3).Value
lst2(b) = c.Offset(rowOffset:=0, columnOffset:=-2).Value
lst4(b) = c.Offset(rowOffset:=0, columnOffset:=11).Value
lst5(b) = c.Offset(rowOffset:=0, columnOffset:=7).Value
lst6(b) = c.Offset(rowOffset:=0, columnOffset:=9).Value
lst7(b) = c.Offset(rowOffset:=0, columnOffset:=10).Value
lst8(b) = c.Offset(rowOffset:=0, columnOffset:=12).Value
b = b + 1
' c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
t = t + 1
Loop Until t = f
d = b - 1
For i = 1 To d
c = i + 3
Worksheets(1).Cells(c, 1).Value = lst1(i)
Worksheets(1).Cells(c, 2).Value = lst2(i)
Worksheets(1).Cells(c, 3).Value = lst3(i)
Worksheets(1).Cells(c, 4).Value = lst4(i)
Worksheets(1).Cells(c, 6).Value = lst5(i)
Worksheets(1).Cells(c, 7).Value = lst6(i)
Worksheets(1).Cells(c, 8).Value = lst7(i)
Worksheets(1).Cells(c, 9).Value = lst8(i)
Next i
End Sub
J'espère que vous pourrez m'aider ou au moins m'orienter vers l'un ou l'autre problème.
D'avance, merci à ceux qui se creuseront les méninges. Les miennes commencent déjà à fumer.
Salut et bienvenue sur le Forum,
Un code c'est bien, un fichier exemple c'est mieux
Pas besoin de ton fichier complet, juste la feuille de base et deux feuilles exemples pour les fournisseurs. Et dans ce fichier, laisse plutôt la macro de base que tes essais ultérieurs
Cordialement.
Voilà le fichier avec deux feuilles d'exemples.
Pour un exemple concret du problème qui se pose:
En tapant "Roho" dans la case de recherche, celle-ci s'effectue correctement.
En tapant "coussin" ou "eau", le message d'erreur s'affiche.
J'ai remis le code d'origine, en supprimant simplement les recherches des onglets 4 à 99, vu qu'ils n'existent pas.
Salut.
Je suis coincé dans un hôtel qui propose une connextion internet, mais qui n'a pas Excel
Amicalement
Salut.
Ne t'inquiète pas, bien que j'aimerais régler ce problème rapidement, ce n'est pas urgent non plus.
C'est déjà bien gentil de ta part de te pencher sur le problème.
Un grand merci!
Merci à vous deux pour vos propositions. Je viens d'y jeter un coup d’œil rapide.
Amadéus, j'avais déjà pensé à une formule avec "RechercheV", même si je suis loin de comprendre et maîtriser les matricielles. Le souci, dans ce cas-ci est que j'ai besoin que ressortent tous les éléments recherchés. J'ai une liste de produits classés par fournisseur. Je cherche tel produit (un coussin par exemple). Je veux que le programme affiche tout les coussins du classeur avec les détails (fournisseur, prix d'achat, de vente, etc). De plus, vu contenu conséquent de la base de donnée (plus de 100 fournisseurs), une recherche par référence ne m'intéresse pas vraiment.
Banzaï64, ta solution semble intéressante. Elle fonctionne en tout cas pour le fichier démo que j'ai donné. Je vais vérifier sur le fichier original. Si tu pouvais également me donner une petite explication rapide du code. Je ne comprends pas les 3 premières lignes notamment. Pour le reste, ça semble est le même principe que le code original, si ce n'est qu'il me semble plus court et plus simple. Mais il y a surement des différences notables que je ne vois pas. J'imagine que oui en tout cas puisque ton code fonctionne contrairement à l'original.
Dès que je me serais assuré que le fichier est fonctionnel, je ne manquerai pas de confirmer que le problème est résolu, ni même de vous remercier encore une fois.
J'ai essayé ton code sur le fichier original avec les 100 onglets.
Malheureusement, je rencontre toujours un souci. Cette fois, la recherche "eau" fonctionne, mais pas la recherche "coussin" (alors que sur le fichier Mc Del Recherche V002, la recherche fonctionne très bien).
Quand je lance le débogage, c'est cette ligne-ci qu'il me surligne:
If Cel.Offset(, 11) <> "" Then ' Si la colonne O <> ""
Je me dis que ça doit être dans un ou plusieurs de mes tableaux qu'une mise en forme ou une erreur s'est glissée, mais je n'ai aucune idée du genre d'erreur qu'il peut s'agir.
Il faut savoir que j'ai refait la mise en forme de tous les onglets récemment à partir d'un modèle car chaque onglet avait auparavant sa propre mise en forme. J'ai donc pour chaque fournisseur créé une copie du modèle et y ai copié-collé les données, collage en gardant la mise en forme de destination. Autrement dit, tous les onglets devraient avoir la même mise en forme.
J'avoue que je suis de plus en plus perdu. ^^
Bonjour
Sans le fichier en erreur et sans le message d'erreur pour moi c'est impossible
C'est juste sur une page ?
Juste sur une ligne de cette page ?
Qu'y a t-il dans cette cellule ?
Places un fichier avec la page en erreur afin de trouver le pourquoi du comment
Bonjour,
Je viens de trouver d'où vient l'erreur. Du texte dans une des feuilles au lieu de nombres, ce qui a causé une erreur dans les formules de la feuille. Et a donc perturbé la recherche. C'est réglé. Et du coup, la recherche fonctionne parfaitement.
Un grand merci à vous, et surtout à toi, Banzaï64. Ça va grandement faciliter mon travail.
Je clôture ce sujet.