Double positionnement succésif du curseur dans un tableau

Bonsoir

Voici 2 macros qui ont un peu la même utilité, sauf que la 1ère concerne plus de colonnes de visibles dans la ListBox

Ces macros ont été remaniées par Banzai64 il y quelques mois.

Les deux me permettent de se placer sur le thème de la cellule recherchée de manière à ce que le thème vienne se placer dans le coin supérieur de l'écran

La 2ème offre l’avantage de se placer ensuite sur la cellule elle-même.

J’ai cherché, en vain, à reproduire cet avantage sur la 1ère macro.

Je retourne donc sur le Forum, à la recherche de la solution

Merci

Option Explicit
Option Compare Text
Dim Ini As Boolean, L As Long
Private Sub Aller_Click()

End Sub
Private Sub UserForm_Activate()
Me.Left = 270
Me.Top = 130
End Sub
Private Sub ComboBox1_Change()
  If Ini = False Then Exit Sub
  Dim x As Range
  Set x = Columns(2).Find(ComboBox1.Value, , xlValues, xlPart, , , False)
    If Not x Is Nothing Then
      For L = x.Row To 1 Step -1
        If Left(Cells(L, 1), 5) = "Titre" Then Application.Goto Cells(L, 2), 1: Exit For
      Next
    End If
    'ActiveSheet.CommandButton1.Top = ActiveCell.Top
    Unload Me
End Sub
Private Sub ListBox1_Click()
  If Ini = False Then Exit Sub
  Dim x As Range
  Set x = Columns(2).Find(ListBox1.Value, , xlValues, xlPart, , , False)
    If Not x Is Nothing Then
      For L = x.Row To 1 Step -1
        If Left(Cells(L, 1), 5) = "Titre" Then Application.Goto Cells(L, 2), 1: Exit For
      Next
    End If
    'ActiveSheet.CommandButton1.Top = ActiveCell.Top
    Unload Me
End Sub
Private Sub TextBox1_ChangeOld()
  If TextBox1 = "" Then Exit Sub
  Dim Li As Long, Ln As Long
  With ListBox1
    .Clear
    For L = 2 To Cells(Rows.Count, 2).End(xlUp).Row
      If Cells(L, 2) Like "*" & TextBox1 & "*" Then
        If Left(Cells(L, 1), 5) <> "Titre" Then 'Le 1 désigne la colonne, Le 5 désigne la longueur du mot
          ListBox1.AddItem Cells(L, 2)
              For Li = L To 1 Step -1
            If Left(Cells(Li, 1), 5) = "Titre" Then Ln = Ln + 1: .List(.ListIndex + Ln, 1) = Cells(Li, 2): Exit For
          Next
        End If
      End If
    Next
  End With
  ListBox1.BackColor = &HC0FFFF
  Ini = True
End Sub
Private Sub TextBox1_Change()
  If TextBox1 = "" Then Exit Sub
  Dim Li As Long, Ln As Long
  With ListBox1
    .Clear
    For L = 2 To Cells(Rows.Count, 2).End(xlUp).Row
      If Cells(L, 2) Like "*" & TextBox1 & "*" Then
        If Left(Cells(L, 1), 5) <> "Titre" Then 'Le 1 désigne la colonne, Le 5 désigne la longueur du mot
          ListBox1.AddItem Cells(L, 2)
              For Li = L To 1 Step -1
           'If Left(Cells(Li, 1), 5) = "Titre" Then Ln = Ln + 1: .List(.ListIndex + Ln, 1) = Cells(Li, 2): Exit For
           'If Left(Cells(Li, 1), 5) = "Titre" Then Ln = Ln + 1: .List(.ListIndex + Ln, 1) = Cells(Li, 2): .List(.ListIndex + Ln, 2) = Cells(L, 32): Exit For
           'If Left(Cells(Li, 1), 5) = "Titre" Then Ln = Ln + 1: .List(.ListIndex + Ln, 1) = Cells(Li, 2): .List(.ListIndex + Ln, 2) = Cells(L, 7): .List(.ListIndex + Ln, 3) = Cells(L, 32): Exit For
            If Left(Cells(Li, 1), 5) = "Titre" Then Ln = Ln + 1: .List(.ListIndex + Ln, 1) = Cells(Li, 2): .List(.ListIndex + Ln, 2) = Cells(L, 7): .List(.ListIndex + Ln, 3) = Cells(L, 9): .List(.ListIndex + Ln, 4) = Cells(L, 32): Exit For
          Next
        End If
      End If
    Next
  End With
  ListBox1.BackColor = &H80FF80
  Ini = True
End Sub
Private Sub UserForm_Click()
MsgBox "x:" & Me.Left & vbCrLf & "y:" & Me.Top
End Sub
Option Explicit
Option Compare Text
Dim Ini As Boolean, L As Long
Private Sub ListBox1_Click()
Dim x As Range

  If Ini = False Then Exit Sub

  Set x = Columns(2).Find(ListBox1.Value, , xlValues, xlPart, , , False)
  If Not x Is Nothing Then

    Application.Goto Cells(x.Row, 2), Scroll:=True
  End If
  Application.Goto Cells(Me.ListBox1.Column(2), 2)

  'Unload Me

'  Dim x As Range
'  Set x = Columns(2).Find(ListBox1.Value, , xlValues, xlPart, , , False)
'    If Not x Is Nothing Then
'      For L = x.Row To 1 Step -1
'        If Left(Cells(L, 1), 5) = "Titre" Then Application.Goto Cells(L, 2), 1: Exit For
'      Next
'    End If
'    'ActiveSheet.CommandButton1.Top = ActiveCell.Top
'    Unload Me
End Sub
Private Sub TextBox1_Change()
  If TextBox1 = "" Then Exit Sub
  Dim Li As Long, Ln As Long
  With ListBox1
    .Clear
    .ColumnCount = 3
    .ColumnWidths = "-1;-1;0"
    For L = 2 To Cells(Rows.Count, 2).End(xlUp).Row
      If Cells(L, 2) Like "*" & TextBox1 & "*" Then
        If Left(Cells(L, 1), 5) <> "Titre" Then
          .AddItem Cells(L, 2)
            For Li = L To 1 Step -1
            If Left(Cells(Li, 1), 5) = "Titre" Then Ln = Ln + 1: .List(.ListIndex + Ln, 1) = Cells(Li, 2): Exit For
          Next
          .List(.ListCount - 1, 2) = L
        End If
      End If
    Next
  End With
  Ini = True
End Sub

Bonjour

Je ne vois pas de solution à ma demande

Je n'ai pas mis mon fichier car il bien trop important

néanmoins, si cela s'avère indispensable je peux reproduire un fichier exemple

qui reprendrait la structure de mon fichier

Merci d'avance pour une aide

Bonjour le Forum

Je suis toujours à la recherche d'une aide pour modifier ma macro

Peut-être que m'a demande n'est pas très claire ?

Si besoin, bien sûr, je peux m'expliquer plus en détail

Merci d'avance

Bonjour

Pourquoi tu ne joins pas ton fichier dans lequel tu exposes ton problème ?

Pour les personnes qui veulent t'aider cela serait plus facile d'avoir déjà le programme sous les yeux

Bonjour

Comme je l'avais expliqué, mon fichier est bien trop important

néanmoins, comme je l'avais proposé, si cela devait être nécessaire, je peux reproduire un fichier exemple

qui reprendrait la structure de mon fichier

Je m'y mets et je reviens sur le Forum

A+

Bonjour

Voici donc un fichier exemple

Actuellement, si je tape ma macro :

« Ctrl L » + « Produit 11 »

La fenêtre du thème de ce produit vient se placer dans le coin supérieur de l’écran

Je que je souhaite conserver.

Mais je souhaiterais en plus que le curseur vienne se placer ensuite sur la cellule « Produit 11 »

Merci d’avance

A+

11exemple.xlsm (22.69 Ko)

Bonjour

Ta question ne se ressemble pas avec celle-ci

https://forum.excel-pratique.com/excel/double-positionnement-succesif-du-curseur-dans-un-tableau-t28329.html#p160877

Damned : Pourquoi les balises URL ne fonctionnent pas ?

EDIT ADMIN : réponse : parce qu'il y avait 2x "#p160877" dans ton url

Bonsoir

Je vois que tu n'a pas du lire mon premier message concernant ma demande d'aide

Bonsoir

Voici 2 macros qui ont un peu la même utilité, sauf que la 1ère concerne plus de colonnes de visibles dans la ListBox

Ces macros ont été remaniées par Banzai64 il y quelques mois.

Les deux me permettent de se placer sur le thème de la cellule recherchée de manière à ce que le thème vienne se placer dans le coin supérieur de l'écran

La 2ème offre l’avantage de se placer ensuite sur la cellule elle-même.

J’ai cherché, en vain, à reproduire cet avantage sur la 1ère macro.

Je retourne donc sur le Forum, à la recherche de la solution

Merci

Comme tu le vois, j'avais bien spécifié qu'il s'agissait d'une macro remaniée sur le Forum

et en l’occurrence par toi même.

Le but de ma demande aujourd'hui, c'est d’obtenir ce même effet sur cette macro

Comme je l'ai dit aussi, j'ai bien essayé de prendre modèle sur la 2ème macro que j'ai listé dans ma demande

mais je n'y suis malheureusement pas arrivé.

A+

Bonjour

Je l'avais lu, mais je ne l'avais pas compris

Désolé

A voir

Re,

Merci, c'est bien ce que je souhaitais

Je vois que tu as géré directement à l'intérieur de la macro les largeurs des colonnes

Moi je l'avais fait par l'intermédiaire des paramètres

Pour retrouver mes largeurs, j'ai donc mis un ' devant

'.ColumnWidths = "-1;-1;-1;-1;-1;0"

Mais si tu peux m'expliquer à quoi correspond ces chiffres ??

Par contre, il y a un problème de lenteur

Je me retrouve avec un temps d'attente relativement long, en tout cas nettement plus long

avant d'obtenir la recherche que j'ai rentrée

Vois-tu d'où cela peux venir ?

A+

Bonjour

Le -1 indique une largeur standard

le 0 indique une largeur nulle (sic) donc colonne masquée

Pas de souci de lenteur

Merci pour l'explication sur les largeurs des colonnes

Tu n'as pas de soucis de lenteur

Moi non plus dans le fichier exemple, c'est normal

Mais mon fichier a plus de 5000 lignes et de nombreuses colonnes !

Et là, la différence entre la macro d'avant est énorme

A+

Bonjour

J'ai gonflé le fichier exemple pour que tu puisse constater cette lenteur

J 'ai mis les 2 macros

La nouvelle que tu viens de remanier : Ctrl L

et l'ancienne donc sans le double positionnement : Ctrl O

Si je tape Ctrl O "Prod" : Temps d'attente = 20 secondes, ce qui est déjà pas mal

Si je tape Ctrl L "Prod" : Temps d'attente = 45 secondes, Plus du double

Comme je ne pense pas que le double positionnement soit la cause de ce ralentissement

Il y a donc peut-être un problème quelque part ??

Merci d'avance, si tu vois d'où cela peux venir

Bonjour

Ce n'est pas le positionnement mais le chargement de la listbox qui ralentit

Essayes cette macro (chez moi elle va aussi vite que la macro Ctrl + O)

Mais regardes le résultat s'il est conforme

Private Sub TextBox1_Change()
Dim Theme As String
'Dim t
  If TextBox1 = "" Then Exit Sub
  't = Time
  With ListBox1
    .Clear
    .ColumnCount = 6
    .ColumnWidths = "-1;-1;-1;-1;-1;0"
    For L = 1 To Cells(Rows.Count, 2).End(xlUp).Row
      If Left(Cells(L, 1), 5) <> "Titre" Then                       'Le 1 désigne la colonne, Le 5 désigne la longueur du mot
        If Cells(L, 2) Like "*" & TextBox1 & "*" Then
          ListBox1.AddItem Cells(L, 2)
          .List(.ListCount - 1, 1) = Theme
          .List(.ListCount - 1, 2) = Cells(L, 7)
          .List(.ListCount - 1, 3) = Cells(L, 9)
          .List(.ListCount - 1, 4) = Cells(L, 32)
          .List(.ListCount - 1, 5) = L
        End If
      Else
        Theme = Cells(L, 2)
      End If
    Next L
  End With
  ListBox1.BackColor = &H80FF80
  'MsgBox "Durée " & Format(Time - t, "hh:mm:ss")
End Sub

Bonjour

Cela à l'air d'aller effectivement plus vite

Mais si cela reste encore plutôt très lent

Mais il y un problème

Quand je clique sur un nom

Rien ne se passe ....

Le positionnement ne s’effectue pas

A+

Bonjour

Ah ok, oui je l'avais corrigé sur la version que j'ai

Modifies aussi dans cette macro

Private Sub ListBox1_Click()
  'If Ini = False Then Exit Sub
  Dim x As Range
  Set x = Columns(2).Find(ListBox1.Value, , xlValues, xlPart, , , False)

  If Not x Is Nothing Then
    Application.Goto Cells(x.Row, 2), Scroll:=True
  End If
  Application.Goto Cells(Me.ListBox1.Column(5), 2)
End Sub

Cela n’a plus rien à voir !!

Il y a juste un petit moment d’attente entre le moment où je commence à taper ma recherche dans la TextBox et le moment où les caractères tapés commencent à s’afficher.

Pendant ce temps d’attente la TextBox passe du « Bleu » (sa couleur) au « Rose » (la couleur de fond de l’UserForm), puis redevient bleu dès que les caractères s'affichent,

Étrange phénomène

Ce n’est pas très important, car après cela va très vite, peut-être même plus vite qu’avant

Mais si tu vois d’où cela peut venir ?

Merci

A+

Bonjour

C'est le temps de chargement de la listBox qui est long

La texbox ne change pas de couleur (du moins chez moi)

Toujours identique : Bleue

Bonsoir

A vérifier

Une autre méthode d'alimenter la ListBox (juste pour Ctrl + L)

Bonsoir

Chapeau !!!

Là c’est la fusée, la perfection

Seul petit problème, j’ai trouvé un bug

J’ai mis pas mal de temps, beaucoup de temps même, avant de cerner le problème

Ce problème, en faite, se situe quand il y a que 1 seul nom correspondant à la recherche

Pour faire simple, plutôt que des phrases en longueur

Suit cette démarche, cela va te permettre de voir le problème

Reprend ton dernier fichier V003

Dans la cellule B10, tu rentre « Artik » à la place de « Article 9 »

Tu lance la macro Ctrl L « A »

Là tout va bien

Dès que tu va arriver à la lettre « K »

Soit Ctrl L « Artik »

Tu vas trouver ce curieux bug !

Il va lister les colonnes non plus dans la largeur

Mais dans la hauteur !

Et si tu clique sur « Artik »

Çà plante

A+

Rechercher des sujets similaires à "double positionnement succesif curseur tableau"