Recherche par VBA

Le
Guy85
Bonjour,
En colonne "D" j'ai des textes.
Suivant le texte, je souhaiterais ajouter un texte en colonne "E" à la suite
du texte de la colonne "D".
Avoir la possibilité de changer de texte.
Exemple : D1=Ananas en E1=Fruits.
Exemple : D1=Tomate en E1=Légumes.
etc..
Possible ?
Merci de votre aide
Cordialement
Guy
--
Cordialement
Guy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FdeCourt
Le #21401201
Salut,

Si tu as un endroit ou le type de chaque produit est documenté, alors
avec cette simple formule (je reprend ton fichier recettes.xls) et les
suppositions suivantes :
- Une feuille appelé Types à été ajoutée.
- Dans cette feuille, colonne A se trouve le nom de tous les produits,
en colonne B le type pour chaque produit.
- Deux noms ont été ajouté :
"types" dont la formule est : ÞCALER(Types!$A$1;;;NBVAL(Types!
$A:$A))
"produits dont la formule est :ÞCALER(Types!$B$1;;;NBVAL(Types!
$A:$A))

Ainsi en E1, avec la formule suivante, l'information est trouvée :
=SI(ESTERREUR(EQUIV(D1;produits;0));"";INDEX(types;EQUIV(D1;produits;
0)))

Plus qu'à faire descendre la formule jusqu'en bas de la liste.

Cordialement,

F.
FdeCourt
Le #21401291
Oups, je me suis avancé un peu vite..... tu veux que la recherche se
fasse en VBA, mais pourquoi ?
Daniel.C
Le #21401281
Re.
Regarde le fichier à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijw81Q9gW.xls
(Groupe Daniel 3.xls)
J'ai ajouté un userform avec une listbox qui se remplit à l'ouverture
du classeur. Quand tu cliques en colonne E, l'userform s'affiche.
Clique sur ton choix. Celui-ci s'affiche sur la feuille.
Daniel

Bonjour,
En colonne "D" j'ai des textes.
Suivant le texte, je souhaiterais ajouter un texte en colonne "E" à la suite
du texte de la colonne "D".
Avoir la possibilité de changer de texte.
Exemple : D1=Ananas en E1=Fruits.
Exemple : D1=Tomate en E1=Légumes.
etc.................
Possible ?
Merci de votre aide
Cordialement
Guy
Guy85
Le #21401381
re
Je vois le Userform mais rein dedans.
Guy

"Daniel.C" %
Re.
Regarde le fichier à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijw81Q9gW.xls
(Groupe Daniel 3.xls)
J'ai ajouté un userform avec une listbox qui se remplit à l'ouverture du
classeur. Quand tu cliques en colonne E, l'userform s'affiche. Clique sur
ton choix. Celui-ci s'affiche sur la feuille.
Daniel

Bonjour,
En colonne "D" j'ai des textes.
Suivant le texte, je souhaiterais ajouter un texte en colonne "E" à la
suite du texte de la colonne "D".
Avoir la possibilité de changer de texte.
Exemple : D1=Ananas en E1=Fruits.
Exemple : D1=Tomate en E1=Légumes.
etc.................
Possible ?
Merci de votre aide
Cordialement
Guy




Guy85
Le #21401371
Bonjour F
Parce que une fois que j'aurais mis tous les textes en face, je n'aurais
plus besoin de l'utiliser.
Et cela pourra peut être me servir en l'adaptant pour un autre fichier.
Cordialement
Guy

"FdeCourt"
Oups, je me suis avancé un peu vite..... tu veux que la recherche se
fasse en VBA, mais pourquoi ?
Daniel.C
Le #21401351
Ca fonctionne chez moi, SAUF quand tu fermes la forme manuellement.
J'ai amélioré :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijGoj8oQI.xls
(Groupe Daniel 3.xls)
Daniel

re
Je vois le Userform mais rein dedans.
Guy

"Daniel.C" %
Re.
Regarde le fichier à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijw81Q9gW.xls
(Groupe Daniel 3.xls)
J'ai ajouté un userform avec une listbox qui se remplit à l'ouverture du
classeur. Quand tu cliques en colonne E, l'userform s'affiche. Clique sur
ton choix. Celui-ci s'affiche sur la feuille.
Daniel

Bonjour,
En colonne "D" j'ai des textes.
Suivant le texte, je souhaiterais ajouter un texte en colonne "E" à la
suite du texte de la colonne "D".
Avoir la possibilité de changer de texte.
Exemple : D1=Ananas en E1=Fruits.
Exemple : D1=Tomate en E1=Légumes.
etc.................
Possible ?
Merci de votre aide
Cordialement
Guy




Guy85
Le #21401511
Ça fonctionne.
Je pensais suivant le texte (Ananas) en colonne D le nom type (Fruits) se
mettrait automatiquement en (colonne E) face à de tous les mots "Ananas"
etc.....
Cordialement
Guy

"Daniel.C"
Ca fonctionne chez moi, SAUF quand tu fermes la forme manuellement. J'ai
amélioré :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijGoj8oQI.xls
(Groupe Daniel 3.xls)
Daniel

re
Je vois le Userform mais rein dedans.
Guy

"Daniel.C" %
Re.
Regarde le fichier à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijw81Q9gW.xls
(Groupe Daniel 3.xls)
J'ai ajouté un userform avec une listbox qui se remplit à l'ouverture du
classeur. Quand tu cliques en colonne E, l'userform s'affiche. Clique
sur ton choix. Celui-ci s'affiche sur la feuille.
Daniel

Bonjour,
En colonne "D" j'ai des textes.
Suivant le texte, je souhaiterais ajouter un texte en colonne "E" à la
suite du texte de la colonne "D".
Avoir la possibilité de changer de texte.
Exemple : D1=Ananas en E1=Fruits.
Exemple : D1=Tomate en E1=Légumes.
etc.................
Possible ?
Merci de votre aide
Cordialement
Guy










Daniel.C
Le #21401491
Tu as plusieurs fois le mmot "ananas" en colonne D ?
Daniel

Ça fonctionne.
Je pensais suivant le texte (Ananas) en colonne D le nom type (Fruits) se
mettrait automatiquement en (colonne E) face à de tous les mots "Ananas"
etc.....
Cordialement
Guy

"Daniel.C"
Ca fonctionne chez moi, SAUF quand tu fermes la forme manuellement. J'ai
amélioré :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijGoj8oQI.xls
(Groupe Daniel 3.xls)
Daniel

re
Je vois le Userform mais rein dedans.
Guy

"Daniel.C" %
Re.
Regarde le fichier à l'adresse :
http://www.cijoint.fr/cjlink.php?file=cj201003/cijw81Q9gW.xls
(Groupe Daniel 3.xls)
J'ai ajouté un userform avec une listbox qui se remplit à l'ouverture du
classeur. Quand tu cliques en colonne E, l'userform s'affiche. Clique sur
ton choix. Celui-ci s'affiche sur la feuille.
Daniel

Bonjour,
En colonne "D" j'ai des textes.
Suivant le texte, je souhaiterais ajouter un texte en colonne "E" à la
suite du texte de la colonne "D".
Avoir la possibilité de changer de texte.
Exemple : D1=Ananas en E1=Fruits.
Exemple : D1=Tomate en E1=Légumes.
etc.................
Possible ?
Merci de votre aide
Cordialement
Guy










FdeCourt
Le #21401631
Salut,

Voilà une solution :

Sub recherche2()
Dim tmp()
Dim mesTypes()
Dim mesRecettes()
Dim x As Double
Dim dicoType As Object
On Error GoTo err_handler
mesTypes = Range("bdd")
mesRecettes = Range("mesRecettes")
ReDim tmp(1 To 2, 1 To UBound(mesRecettes))
Set dicoTypes = CreateObject("Scripting.Dictionary")
For x = 1 To UBound(mesTypes)
dicoTypes.Item(mesTypes(x, 1)) = mesTypes(x, 2)
Next x
For x = 1 To UBound(mesRecettes)
tmp(1, x) = mesRecettes(x, 1)
tmp(2, x) = dicoTypes.Item(mesRecettes(x, 1))
Next
With Feuil1
.Range(.Cells(1, 4), .Cells(UBound(tmp, 2), 5)).Value =
Application.Transpose(tmp)
End With
On Error GoTo 0
Exit Sub
err_handler:
MsgBox "Erreur"
End Sub

Elle part sur deux postulats :
Il existe deux nom :
- "bdd" dont la formule est ÞCALER(Types!$A$1;;;NBVAL(Types!$A:
$A);2)
- "mesRecettes" dont la formule est ÞCALER(Recettes!$D
$1;;;NBVAL(Recettes!$D:$D)+NBVAL(Recettes!$A:$A)-1)

Pour mesRecettes, je me suis basé sur le contenu de la feuille Recette

L'utilisation d'un objet Dictionary permet de diviser le temps de
traitement considérablement (par rapport à une boucle)

J'ai fait un test sur 65535 ingrédient et 65535 recettes, avec le
Dictionary cela prend 10 secondes, avec des boucles..... cela fait 3
minutes 15 et 30000 lignes ont été traitées !

Par contre, si tu des volumes trop important, il faut faire attention
(avec Excel, au moins jusqu'à 2000), le Application.transpose est
limité à quelques milliers de ligne (maxi 5000 puisqu'à 5000 ca
plante), donc il faut passer par une fonction :

Function InverseTab(T, Optional Base As Byte = 0)'Zon
‘Base par défaut est à 0 mais si on est en base 1 lui donnner la
valeur 1
Dim Temp(), I&, J&
ReDim Temp(Base To UBound(T, 2), Base To UBound(T))
For I = LBound(T, 2) To UBound(T, 2)
For J = LBound(T) To UBound(T)
Temp(I, J) = T(J, I)
Next J
Next I
InverseTab = Temp
End Function


Cordialement,

F.
FFO
Le #21401741
Salut à toi

Ces lignes devraient convenir :

i = 2
Ligne = 0
Do While i < Range("A65535").End(xlUp).Row + 1
On Error Resume Next
Ligne = Sheets("Feuil2").Columns("A:A").Find(What:=Range("A" & i),
After:=Sheets("Feuil2").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Row
If Ligne <> 0 Then
Range("B" & i) = Sheets("Feuil2").Range("B" & Ligne)
Ligne = 0
End If
i = i + 1
Loop

Attention :

Ligne = Sheets("Feuil2").Columns("A:A").Find(What:=Range("A" & i),
After:=Sheets("Feuil2").Range("A1"), LookIn:=xlValues, LookAt:=xlWhole).Row

a mettre bout à bout sur une seule ligne

Actualises "Feuil2" du nom de la feuille de référence listant tous les
articles avec leur catégorie associée

Exécutes la macro avec la feuille à mettre à jour active


Fais des essais et dis moi !!!!!
Publicité
Poster une réponse
Anonyme