Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche par VBA

25 réponses
Avatar
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

10 réponses

1 2 3
Avatar
FdeCourt
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.
Avatar
FdeCourt
Oups, je me suis avancé un peu vite..... tu veux que la recherche se
fasse en VBA, mais pourquoi ?
Avatar
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
Avatar
Guy85
re
Je vois le Userform mais rein dedans.
Guy

"Daniel.C" a écrit dans le message de news:
%
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




Avatar
Guy85
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" a écrit dans le message de news:

Oups, je me suis avancé un peu vite..... tu veux que la recherche se
fasse en VBA, mais pourquoi ?
Avatar
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" a écrit dans le message de news:
%
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




Avatar
Guy85
Ç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" a écrit dans le message de news:

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" a écrit dans le message de news:
%
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










Avatar
Daniel.C
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" a écrit dans le message de news:

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" a écrit dans le message de news:
%
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










Avatar
FdeCourt
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.
Avatar
FFO
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 !!!!!
1 2 3