Bonsoir à toutes et tous !
Je viens vers vous car je bloque complètement depuis toute la journée malgré mes recherches, ça dépasse mes compétentes d'apprenti VBA ....
J'ai un tableau, je cherche plusieurs choses :
- dans les lignes B4 à LX4 (idem pour B6 à LX6 et B8 à LX8) a chercher une valeur prise depuis une combobox (cliquer sur le bouton AFFICHER > ce qui lance la macro rechercherEquipe (Valeur = A ou B ou C ou D ou E))
- ne garder d'afficher QUE les colonnes où la valeur est détecter
Donc admettons que je cherche à savoir ce qu'à fait l'équipe A, ça recherche dans les lignes B4 à LX4, B6 à LX6 et B8 à LX8 et si ça trouve l'équipe A ça affiche la colonne jusqu'à ne plus rien trouver.
Le bouton TERMINE affiche toutes les colonnes masquées.
Je bloque déjà sur la fonction find .... vous verrez un code qui ne fonctionne pas ...
Salut à toutes et tous !
A nouveau dans mes recherches, je progresse un peu mais je n'arrive pas trop à comprendre le résultat. Partie de code composé de ce que j'ai trouvé sur le net et mis pour mon besoin. Le résultat est 3. Je ne sais pas si je travail dans la bonne direction mais au moins on a un début.
Sub rechercherEquipe()
Dim equipe As Variant Dim recherche As Range equipe = UserForm1.ComboBox1.Value Set recherche = Range("B4:LX4").Find(equipe, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True) If recherche Is Nothing Then MsgBox ("Equipe non trouvée (ou non renseignée).") Else MsgBox ("Equipe trouvé en colonne") & recherche.Column End If
bonsoir,
je poursuis d'alimenter mon sujet .... j'espère qu'il y aura des réponses un jour ...?
J'ai trouvé un code sur le net que j'ai mis à mon problème (à priori assez identique , pas de l'écriture mais dans le résultat qui ne me permet pas d'avancer mais légèrement de progresser et de cibler le problème ...). J'ai juste fais pour afficher dans un msgbox le résultat de la recherche.
Or je m'aperçois que la recherche sur la ligne complète s'arrête dès qu'il a trouvé 1 fois la valeur de la combobox, s'il y en a d'autres il ne les cherche pas .... des idées pour poursuivre la recherche au range défini ???
Voici le code :
Sub rechercherEquipe() 'déclaration des variables : Dim Trouve As Range, PlageDeRecherche As Range Dim Valeur_Cherchee As String, AdresseTrouvee As String
'********* à adapter *********** 'affectation de valeurs aux variables : 'on cherche le mot "Trouve" ''REMPLACER''Valeur_Cherchee = "Trouve" Valeur_Cherchee = UserForm1.ComboBox1.Value 'dans la première colonne de la feuille active ''REMPLACER''Set PlageDeRecherche = ActiveSheet.Columns(1) Set PlageDeRecherche = Sheets("Année").Range("B5:LX5") '*******************************
'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole) Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
'traitement de l'erreur possible : Si on ne trouve rien : If Trouve Is Nothing Then 'ici, traitement pour le cas où la valeur n'est pas trouvée AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address Else 'ici, traitement pour le cas où la valeur est trouvée AdresseTrouvee = Trouve.Address End If MsgBox AdresseTrouvee 'AdresseTrouvee.Columns.Select 'vidage des variables Set PlageDeRecherche = Nothing Set Trouve = Nothing End Sub
Bonjour,
Il en vallait la peine d'attendre le résultat.
Un énorme merci, j'avais bien été sur cette page, mais comme je disais, ça dépassait un peu beaucoup mes compétences. J'avais des erreurs que je ne comprenais pas ... débutant ! ;)
Encore merci je vais poursuivre mon fichier cet après midi, ça m'a donné un coup de boost.
Si à l'occasion tu peux m'expliquer quelques petites choses ....
> je ne comprends pas où tu mets la plage de recherche voulue ?! idem pour feuille ....
> qu'est ce qu'un xla ?
J'en aurais d'autres comme la fonction function mais là c'est de la documentation que je dois faire .... m'enfin !!
Bon je confirme bien ... ne rien comprendre au code si tu pouvais m'expliquer ?
> module public ?
> je ne trouve pas la phase où s'il ne trouve pas l'équipe il fait le msgbox
> idem s'il trouve ....
> déclarer les plages (oui car là je dois faire pareil pour B7:LX7 et B9:LX9), le nom de la feuille, du classeur ...
>> du coup je ne peux pas poursuivre ... Eh oui je cherche à cacher les colonnes dont l'équipe ne correspond pas à la recherche et ne laisser que l'équipe recherchée ...
Ouiiiiiii j'ai trouvé ! j'ai dû tout reprendre et comprendre que le code est "coupé" en deux partie, une avec un sub et la seconde avec une function .... je me documentais sur ces parties en ayant enfin trouvé pour déterminer le range ou le reste puis coup de fatigue (effet des postes et du travail de nuit donc sieste car au boulot ce soir .....).
L'idée finale est simplement de chercher à voir ce que l'équipe recherchée à fait.
Donc si je veux voir l'équipe B, ça recherche dans les 3 lignes et si B apparait la colonne entière s'affiche, sinon les colonnes se cachent.
Ah mais en te marquant ça je me rends compte qu'on va se confronter au problème que si dans la ligne 5 il y a B ça voudra rester afficher, mais qu'en ligne 7 et 9 ça sera forcément pas B, donc ça voudra s'effacer ....
je pense qu'en fait il faut faire une recherche par colonne et donc se dire que s'il trouve l'équipe dans la colonne il l'affiche, sinon il la masque ...
je vais me pencher sur la question cette nuit ...
On doit donc agir sur le range pour le remplacer par columns ou quelque chose dans le genre ...
merci
RE !
Bon en fait modification du tableau ... donc mise à jour du code que vous m'aviez fait, jusque là rien d'extraordinaire, je tente de comprendre la manière dont c'est codé mais en vain ....
Je cherche à supprimer le msgbox et mettre à la place que si l'équipe recherchée est trouvée elle affiche la colonne entière sinon si ce n'est pas trouvé ça cache la colonne entière.
Nouveau fichier : https://www.cjoint.com/?DDAx4nXkAAa Merci pour l'aide !
Hello !
Peu à peu en train de comprendre comment ce code est fait, je suis arrivé à modifier deux petites choses pour tenter d'arriver au final : cacher les colonnes dont la recherche ne correspond pas.
Par contre dans un premier temps pour arriver à mes fins, je tente de cacher la colonne recherchée, mais si vous trouvez comment cacher celles qu'on ne recherche pas, tant mieux !!!!!
Cependant ça plante après le 1: (voir commentaires) ... si explications !!
Merci !
Sub rechercherEquipe() 'déclaration des variables : Dim Trouve As Integer, PlageDeRecherche As Range Dim Valeur_Cherchee As String, AdresseTrouvee As String
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤ modif recherche multiples Dim Tb() 'Adresse(s) de retour si trouvee(s) Dim i As Integer
'affectation de valeurs aux variables : Valeur_Cherchee = UserForm1.ComboBox1.Value Set PlageDeRecherche = Sheets("Année").Range("B5:LX5")
'appelle de la fonction recherche multiples Trouve = RechFind(Valeur_Cherchee, ThisWorkbook.Name, "Année", PlageDeRecherche.Address, Tb()) 'traitement de l'erreur possible : Si on ne trouve rien : If Trouve > 0 Then 'ici, traitement pour le cas valeur(s) trouvée(s) For i = 0 To UBound(Tb) ' AdresseTrouvee = AdresseTrouvee & "-" & Tb(i) AdresseTrouvee = AdresseTrouvee & Tb(i) Next i GoTo 1: 'trouvée
Else 'ici, traitement pour le cas où la valeur n'est pas trouvée ' AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address GoTo 2: