Lignes groupées > afficher ligne de la cellule active en VBA

Bonjour Forum !

Je gère plusieurs répertoires comportant plusieurs centaines de noms.

La feuille est organisée avec un plan, ce qui fait que j'ai jusqu'à 4 niveaux de groupage de lignes

(voir en PJ un exemple simplifié, pour des questions de confidentialité)

Il m'arrive souvent de chercher les coordonnées d'une personne dont je connais le nom.

Il est simple de la retrouver dans la liste avec la commande Edition > Rechercher, mais la ligne contenant le nom reste masquée du fait du plan.

Je dois alors cliquer sur les petits + à gauche de la feuille pour faire apparaitre la ligne souhaitée.

J'ai essayé d'utiliser les commandes existantes pour aller plus vite (Données > Grouper et créer plan > Afficher les détails) mais ça n'affiche pas la ligne en cours.

Est-ce qu'il y a moyen de faire ça en VBA ?

(à savoir : faire apparaitre la ligne de la cellule active, quand cette ligne est comprise dans un groupe de lignes et que ce groupe est "replié")

J'espère que mes explications sont assez claires...

33repertoire.xls (16.50 Ko)

Bonjour,

Ton fichier Op se présente de la même façon ? avec les lettres de l'alphabet ?

Ou bien il y a plus de "choix"

Tu dis.

Merci pour ta réponse.

Le fichier est très hiérarchisé (jusqu'à 4 niveau, et peut-être 5 si besoin est) :

Equipe de conception

- BET 1

- service études

- interlocuteur 1

- interlocuteur 2

- interlocuteur 3

- service travaux

- interlocuteur 1

- interlocuteur 2

- interlocuteur ayant quitté la société

- BET 2

- service études

- interlocuteur 1

- assistante

- interlocuteur 2

- service travaux

- interlocuteur 1

- interlocuteur 2

Client

- chargés d'affaires

- directeur

- chargé d'affaire

- assistante

- direction générale

- interlocuteur 1

- direction financière

etc...

Je ne vois pas de solution avec ton système

Que veux-tu afficher au final ? Une ligne ? un sous-ensemble ? arriver à un nom ? ...

Bonjour

A tout hasard

A tester

@lermite

Merci pour ta réponse.

Mon objectif : si je cherche le n° de tél de M. Moreau, je veux :

  • lancer une recherche avec la commande Edition > Rechercher, ce qui rendra active la cellule contenant le nom "Moreau"
  • lancer une macro-miracle qui affichera les détails permettant de révéler la ligne contenant cette cellule, même si elle est au 4ème niveau d'arborescence du plan.

@Banzai64

Merci également pour ta réponse.

Le principe est impeccable, mais en augmentant le nombre de niveaux d'arborescence, ça ne fonctionne plus

(cf ficher joint, par exemple en cherchant le nom "Desmares" >> la recherche fonctionne, mais pas l'affichage de la ligne)

J'ajoute un truc auquel je n'avais pas pensé au début : si possible, j'aimerais que la recherche puisse marcher même si le nom est incomplet :

par exemple, pouvoir taper Desm pour trouver Desmares.

J'ai bien conscience que si plusieurs noms comprennent la même chaîne, ça va poser problème, mais ce n'est pas bien grave.

Bonjour

A tester

C'est parfait !!!

Merci et bravo !

Bonjour Forum,

Actuellement, le code écrit par Banzai64 effectue une recherche à partir du début de la feuille, ce qui fait qu'on ne trouve que la 1ère occurence.

Petite requête : est-ce qu'un un gourou d'Excel saurait modifier le code pour que la recherche s'effectue à partir de la cellule active ?

Ça permettrait d'atteindre les occurences suivantes.

Merci !

Bonjour

Modifies cette ligne

  Set Cel = Cells.Find(what:=Quoi, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart)

Merci pour ta réponse.

En pratique, une fois détectée la 1ère occurence, si je relance la recherche, Excel revient à cette 1ère occurence.

J'ai aussi essayé de descendre la cellule active d'une ou 2 lignes, mais j'obtiens le même résultat...

Ce qui serait cool aussi, c'est si le(s) terme(s) recherché(s) étai(en)t mémorisés, car là, si je cherche la 5ème occurence, il faut que je saisisse 5 fois les mêmes termes.

Bon, j'ai bien conscience que je commence à me comporter en client un peu exigeant, donc si c'est trop, on laisse tomber...

Merci en tous cas.

Bonjour

Une autre version à tester

Merci pour ta réponse.

Bizarrement, ta macro fonctionne parfaitement dans le fichier joint, mais une fois transplantée dans une feuille qui contient plein de données (300 lignes, 3 colonnes, 5 niveaux de plan, beaucoup de cellules > 255 caractères) malheureusement confidentielles, donc impossible à mettre en ligne, la macro "loupe" la moitié des occurences...

Bonjour

Si tu arrives à rendre ton fichier anonyme il serait intéressant d'y faire des tests

Mais sans ça cela ne va pas être évident de comprendre le pourquoi

Bonne journée

Merci pour ta réponse.

Pour rendre mon fichier anonyme, je viens d'essayer plein de méthodes à base de Rechercher/Remplacer pour crypter les données, mais ça marche mal : de très nombreuses cellules ne sont pas du tout modifiées (j'ai l'impression qu'Excel ne va pas au bout du remplacement quand il rencontre des cellules > 255 caractères, mais c'est peut-être pas ça le pb).

Tu aurais un truc pour brouiller les données ?

Bonsoir

Fais un fichier semblable à tes fichiers tests, dans lequel tu y mets des cellules contenant plus de 255 caractères , et fais une recherche si cela ne passe pas cela vient de là

Sinon je n'ai pas de moyen pour brouiller des données

Malin !

Ta macro marche encore quand j'introduis des cellules > 255 caractères.

Pour ce qui est de Rechercher/Remplacer pour crypter, il semble y avoir un seuil à 912 caractères dans une cellule :

au-delà, Excel n'arrive plus à Remplacer et renvoie le message d'erreur "Formule trop longue", qui égare sur ce qui se passe vraiment.

Je m'en suis sorti en supprimant les quelques cellules dépassant ce seuil.

Pour revenir à la question du post, j'ai donc crypté mon fichier, et testé ta macro en recherchant la chaîne "On1R4èOH" qui est présente 10 fois en tout dans la feuille.

Et là, problème : ta macro ne la trouve que 2 fois.

Si tu as une idée de ce qui pose problème...

(je joins ton fichier v004 dans lequel j'ai ajouté ma feuille cryptée)

Merci encore pour ton aide jusqu'ici.

Bonsoir à tous !

Banzai, un petit oubli dans le code :

If InStr(1, Cel, Quoi, vbTextCompare) >= 1 Then

Bonjour

gloub a écrit :

J'ajoute un truc auquel je n'avais pas pensé au début : si possible, j'aimerais que la recherche puisse marcher même si le nom est incomplet :

par exemple, pouvoir taper Desm pour trouver Desmares.

J'ai bien conscience que si plusieurs noms comprennent la même chaîne, ça va poser problème, mais ce n'est pas bien grave.

La macro elle fait ça : Mais pour moi il fallait que le texte recherché commence par ....

Alors dans la macro supprimes les lignes surlignées

Option Explicit

Sub Recherche()
Dim Quoi As String, Depart As String
Dim Cel As Range
Dim Ligne As Long, LigneAncienne As Long

  Quoi = InputBox("Recherche")
  If Quoi = "" Then Exit Sub
  Set Cel = Cells.Find(what:=Quoi, LookIn:=xlFormulas, lookat:=xlPart)
  If Not Cel Is Nothing Then
    Depart = Cel.Address
    Do
      'If InStr(1, Cel, Quoi, vbTextCompare) = 1 Then
        If LigneAncienne > 0 Then
          On Error Resume Next
          ActiveSheet.Rows(LigneAncienne).ShowDetail = False
          On Error GoTo 0
        End If
        Ligne = Cel.Row
        Do While ActiveSheet.Rows(Ligne).OutlineLevel > 1
          Ligne = Ligne - 1
        Loop
        On Error Resume Next
        ActiveSheet.Rows(Ligne).ShowDetail = True
        On Error GoTo 0
        Cel.Select
        If MsgBox("Recherche suivante ?", vbQuestion + vbYesNo + vbDefaultButton1, "Continuer") <> vbYes Then Exit Sub
        LigneAncienne = Ligne
      'End If
      Set Cel = Cells.FindNext(Cel)
    Loop While Depart <> Cel.Address
  Else
    MsgBox "Introuvable : " & Quoi
  End If
End Sub

Edit : Bonsoir vba-new

vba-new a écrit :

Bonsoir à tous !

Banzai, un petit oubli dans le code :

If InStr(1, Cel, Quoi, vbTextCompare) >= 1 Then

Hé non ce n'est pas un oubli, juste une restriction

Banzai64 a écrit :

La macro elle fait ça : Mais pour moi il fallait que le texte recherché commence par ....

Effectivement ce n'était donc pas un oubli !

Je te relaisse la main.

Sinon pour info à gloub, la modification que j'ai proposée répondait à ça :

gloub a écrit :

Pour revenir à la question du post, j'ai donc crypté mon fichier, et testé ta macro en recherchant la chaîne "On1R4èOH" qui est présente 10 fois en tout dans la feuille.

Et là, problème : ta macro ne la trouve que 2 fois.

Rechercher des sujets similaires à "lignes groupees afficher ligne active vba"