XL 2016 Recherche de partie de mot dans les cellules d'un tableau et extractions des résultats

Lorenzini

XLDnaute Occasionnel
Bonjour,

...même dans le titre, j'ai du mal à m'exprimer ; c'est dire !
Je suis toujours débutant sur VBA ; c'est pourquoi je crie (de nouveau) à l'aiiiiiiiiiiide !!
Le fichier est en pièce jointe pour plus de facilités...
...
Dans le coin supérieur gauche de ma feuille 2 se trouve un bouton (loupe) ''rechercher''.
Un clic sur ce bouton ouvre un petit formulaire qui invite l'utilisateur à taper ce qu'il veut pour le rechercher.
Le truc, euh... y'en a plusieurs en fait :

- Comment faire une recherche ''approximative'' ; je veux dire : si on tape ''pharmacie'' dans l'invite de commande, la validation va lancer la recherche sur le mot EXACT !
Sauf que : quid si j'écris p.ex. : ''phar'' ou ''armac'' (qui est la partie du mot ''pharmacie'') ? ou encore : ''labo'' pour ''laboratoire'' ... et bien : çà ne fonctionne plus. 😞
J'avoue que cela fait maintenant 3 jours que je galère à essayer de tripatouiller des bouts de code par çi par là... sans y arriver. o_O
J'ignore comment on demande gentiment à VBA de rechercher une PARTIE d'un mot dans les cellules de mon tableau. 🤔
Ce fichier va être utilisé par plusieurs personnes. Certaines taperont ''pharma'' ; d'autres ''pharmacie'' ... On est d'accord que dans les 2 cas de figures (pour ne compter que ceux-ci), une bonne recherche doit pouvoir renvoyer chaque cellule CONTENANT ''pharma'' ou ''pharmacie'' ; soit ce qui aura été tapé etc... etc...
...
La deuxième chose que je souhaitais faire (et j'ai presque réussi) ... vous savez, ce fameux ''presque'' qui fait perdre la tête.
pourquoi lorsque j'extrais les résultats de ma recherche sur une feuille spécialement créée pour, la colonne B ne suit pas !?
Je devrais y retrouver les n° CORRESPONDANTS et non les calculs qu'ils me fait car il repart de 20230001 à la numérotation !?
Je ne comprends plus et j'avoue que je suis purement et simplement prêt à jeter l'éponge.
Mes modestes connaissances, bien qu'elles aient été repoussée, restent dépassée, j'en ai peur.

MERCI pour toute l'aide que vous pourrez m'apporter ! :)
 

Pièces jointes

  • Réception_Colis_Joseph2.xlsm
    823.8 KB · Affichages: 5
  • Question_1.jpg
    Question_1.jpg
    267.9 KB · Affichages: 15
  • Question_2.jpg
    Question_2.jpg
    205.9 KB · Affichages: 16

Lorenzini

XLDnaute Occasionnel
voila, j'ai trouvé

j'en ai profité pour commenter le code pour apporter quelques explications

et un peu de lecture si ca t'interresse


Je suis bouche bée ; chapeau !! 🧐
Et super merci pour les tutos, j'ai dévoré le 1er jusqu'à la moitié (je garde le reste pour plus tard) et ai encore appris qq petits trucs, 🤔 , c'est cool ! ☺️
Pour l'autre (un peu plus technique...merci aussi à Chris Newman !), j'ai survolé et ai déjà noté 2-3 trucs intéressants aussi ; j'y reviendrai plus tard aussi.
Alors, si je comprends bien : le
" .DataBodyRange.Clear" devient ".delete" et le ".Resize Range("B4:H5")" a totalement disparu... mmh... ok ok
Bravo en tout cas !
Dernière curiosité que je ne connaissais pas non plus :
Dans le Textbox1_Change :
UserForm1.CommandButton1.Enabled = (UserForm1.TextBox1 <> "")
J'avoue que je ne connaissais pas cette syntaxe précise (raison pour laquelle j'avais lié une formule conditionnelle if... <> "" ... then...
Encore merci vgendron !☺️
 

Lorenzini

XLDnaute Occasionnel
voila, j'ai trouvé

j'en ai profité pour commenter le code pour apporter quelques explications

et un peu de lecture si ca t'interresse


...je crois que j'ai un souci... :s
je n'arrive pas à encoder...
pourtant, cela semble correct !? je ne comprends pas...
il m'indique : erreur d'exécution '9' - l'indice n'appartient pas à la sélection...
 

Pièces jointes

  • Problème_encodage_1.jpg
    Problème_encodage_1.jpg
    190.6 KB · Affichages: 17
  • Problème_encodage_2.jpg
    Problème_encodage_2.jpg
    143.4 KB · Affichages: 17

Lorenzini

XLDnaute Occasionnel
c'est un pb de syntaxe

dans la feuille, entre Référence et Fournisseur, il y a un retour chariot, et pas un espace
idem pour la colonne d'a coté
je désespère car je ne comprends pas... j'arrivais à encoder avant et çà ne fonctionne plus... j'ignore pourquoi ?
J'ai vraiment essayé jusqu'à présent de me débrouiller pour trouver une solution... en vain !
Est-ce que vous pouvez m'aider sur ce coup-là car je sèche... :s
Les numéros devraient s'incrémenter et ce n'est pas le cas 😞 je ne comprends plus
...j'ai trouvé pour la mise en forme des lignes (1 sur 2 en bleu), j'ai compris, c'est ma formule conditionnelle dans les MFC qui explique... en fait, je voulais juste changer votre solution en commencant non pas par du bleu mais du blanc (tjs 1 sur 2)... du coup, j'avais trouvé cette solution...
mais pour l'incrémentation des lignes, là, je suis vraiment perdu :eek:
 

Pièces jointes

  • ProbIncrement1.jpg
    ProbIncrement1.jpg
    298.2 KB · Affichages: 16
  • Réception_Colis_Test.xlsm
    847.3 KB · Affichages: 0
Dernière édition:

vgendron

XLDnaute Barbatruc
le Numéro de colis que tu mets dans le label est maintenant calculé avec la fonction "Max" +1
il faut donc que la colonne N° de colis contiennent des nombres et pas du texte

la formule de la colonne ne sert à rien puisque c'est le code qui calcule le nouveau numéro de colis
note: la ligne n'est PAS créée tant que le bouton valider n'est pas cliqué
donc.. sur le bouton annuler: la partie qui supprime la dernière ligne n'existe plus

dans la colonne N° de colis, j'ai juste laissé le tout premier Numéro en faisant appel à la plage nommée "NumColis" qui est sur la feuille "Liste"
 

Pièces jointes

  • Réception_Colis_Joseph2 Version Table.xlsm
    819 KB · Affichages: 2

Lorenzini

XLDnaute Occasionnel
le Numéro de colis que tu mets dans le label est maintenant calculé avec la fonction "Max" +1
il faut donc que la colonne N° de colis contiennent des nombres et pas du texte

la formule de la colonne ne sert à rien puisque c'est le code qui calcule le nouveau numéro de colis
note: la ligne n'est PAS créée tant que le bouton valider n'est pas cliqué
donc.. sur le bouton annuler: la partie qui supprime la dernière ligne n'existe plus

dans la colonne N° de colis, j'ai juste laissé le tout premier Numéro en faisant appel à la plage nommée "NumColis" qui est sur la feuille "Liste"
MERCI ! 😁
 

Lorenzini

XLDnaute Occasionnel
le Numéro de colis que tu mets dans le label est maintenant calculé avec la fonction "Max" +1
il faut donc que la colonne N° de colis contiennent des nombres et pas du texte

la formule de la colonne ne sert à rien puisque c'est le code qui calcule le nouveau numéro de colis
note: la ligne n'est PAS créée tant que le bouton valider n'est pas cliqué
donc.. sur le bouton annuler: la partie qui supprime la dernière ligne n'existe plus

dans la colonne N° de colis, j'ai juste laissé le tout premier Numéro en faisant appel à la plage nommée "NumColis" qui est sur la feuille "List

le Numéro de colis que tu mets dans le label est maintenant calculé avec la fonction "Max" +1
il faut donc que la colonne N° de colis contiennent des nombres et pas du texte

la formule de la colonne ne sert à rien puisque c'est le code qui calcule le nouveau numéro de colis
note: la ligne n'est PAS créée tant que le bouton valider n'est pas cliqué
donc.. sur le bouton annuler: la partie qui supprime la dernière ligne n'existe plus

dans la colonne N° de colis, j'ai juste laissé le tout premier Numéro en faisant appel à la plage nommée "NumColis" qui est sur la feuille "Liste"
Bonjour vgendron,
j'ai deux questions (pour lesquelles je reviens directement vers toi car c'est toi qui m'a grandement aidé à développer ce que je voulais faire avec la recherche, etc.
J'ai continué à bidouiller le fichier ; c'est ainsi que j'y ai ajouté une colonne avec les dates et heures...
Mais j'ai ancore quelques petits soucis... :s

Est-ce que vous pourriez m'aider ?

Je vous remercie d'avance pour le temps consacré...
:)
 

Pièces jointes

  • Question_2b.jpg
    Question_2b.jpg
    403.6 KB · Affichages: 15
  • Question_2a.jpg
    Question_2a.jpg
    515 KB · Affichages: 14
  • Question_1.jpg
    Question_1.jpg
    409.4 KB · Affichages: 13
  • R5 - avecvgendron.xlsm
    932.5 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
Hello

je ne comprend pas pourquoi tu as ajouté la ligne
Rows("6:100000").Delete Shift:=xlUp
alors que juste en dessous, on vide proprement la table.

With Sheets("Recherche").ListObjects("t_Recherche") 'avec la table "t_Recherche" de la feuille "Recherche"
If Not (.DataBodyRange) Is Nothing Then 'si il y a quelque chose dans le databodyrange
.DataBodyRange.Delete 'on le supprime ==> a pour effet d'avoir une table vide avec la ligne d'entete et _
'une première ligne de données "virtuelle" ==> elle est vide, mais le listrows.count retourne 0
End If
End With
 

vgendron

XLDnaute Barbatruc
pour le problème de comptage
en fait, tu n'utilises pas la bonne fonction: "Countif" au lieu de Count
ta formule compte DANS la colonne B, le nombre de fois ou on trouve le critère
sauf que.. 10/08, c'est dans la colonne H qu'il faut le compter

ensuite, tu écris le critère en A1 et la formule en A2,
et lorsque tu as affiché le msgbox, tu effaces le critère et la formule..==> tout ca ne sert à rien finalement

==> pas besoin d'écrire puis effacer: VBA peut compter tout seul le nombre de lignes et te l'afficher
 

Pièces jointes

  • R5 - avecvgendron.xlsm
    912.3 KB · Affichages: 5

Lorenzini

XLDnaute Occasionnel
pour le problème de comptage
en fait, tu n'utilises pas la bonne fonction: "Countif" au lieu de Count
ta formule compte DANS la colonne B, le nombre de fois ou on trouve le critère
sauf que.. 10/08, c'est dans la colonne H qu'il faut le compter

ensuite, tu écris le critère en A1 et la formule en A2,
et lorsque tu as affiché le msgbox, tu effaces le critère et la formule..==> tout ca ne sert à rien finalement

==> pas besoin d'écrire puis effacer: VBA peut compter tout seul le nombre de lignes et te l'afficher
waaaaaaaaaah !!! MERCI MERCI MERCI MERCI !!!! WAAAA vous êtes un chef !! j'admire ; chapeau bas !!
Un tout tout grand merci ! je viens de tester et çà fonctionne à merveille !! :D
J'ai décidément (encore) bcp de chemin à faire en vba...
MERCI !!! :D
 

Lorenzini

XLDnaute Occasionnel
pour le problème de comptage
en fait, tu n'utilises pas la bonne fonction: "Countif" au lieu de Count
ta formule compte DANS la colonne B, le nombre de fois ou on trouve le critère
sauf que.. 10/08, c'est dans la colonne H qu'il faut le compter

ensuite, tu écris le critère en A1 et la formule en A2,
et lorsque tu as affiché le msgbox, tu effaces le critère et la formule..==> tout ca ne sert à rien finalement

==> pas besoin d'écrire puis effacer: VBA peut compter tout seul le nombre de lignes et te l'afficher
je reviens vous ennuyer une dernière fois (c'est promis, après, je vous laisse tranquille car vous m'avez déjà très bien aidé :) pour voir avec vous s'il y'a une solution qui existe à mon problème ? (images ci-dessous avec explications)
 

Pièces jointes

  • Question_3.jpg
    Question_3.jpg
    388.2 KB · Affichages: 12
  • Question_4.jpg
    Question_4.jpg
    382.3 KB · Affichages: 11

vgendron

XLDnaute Barbatruc
quand tu choisis de proteger une feuille, il y a des options que tu peux autoriser
notamment le tri et le filtrage

regarde ton code
j'ai créé deux sub "Proteger" et "déproteger"

puisque tu souhaites que l'utilisateur ne soit autorisé qu'à peu de chose, autant proteger le classeur à son ouverture
lorsque le code a besoin d'écrire: IL déprotège et reprotège
 

Pièces jointes

  • R5 - avecvgendron.xlsm
    913.3 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin