IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

recherche accélérée dans une colonne avec une touche


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Pascal1970
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 31
    Par défaut recherche accélérée dans une colonne avec une touche
    J'ai cherché sur les forums mais je n'ai pas trouvé exactement ce dont je cherche.

    J'ai environ 500 noms dans ma colonne intitulé "NOM" qui sont automatiquement classer par ordre alphabétique. En ce moment, pour retrouver un nom j'utilise pgdown pour aller le plus vite.

    Supposons que je recherche "PASCAL" j'aimerais écrire "P" et le curseur ce dirigerait immédiatement sur la première cellule de la colonne qui commence par "P" La cellule devra être positionner en haut de la fenêtre et non dans le bas. Ensuite je pourrai continuer avec la touche pgdown au besoin....

    Qu'est-ce que vous me suggérer?

    Prenez notre que je suis débutant en VBA soyez précis

    Merci!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    A mettre dans le module de la feuille. La cellule cible est B1 et la plage visée est en colonne A à partir de A1. Tu entres une ou plusieurs lettres dans B1 et quand tu valides, la cellule sera sélectionnée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim Plage As Range
        Dim Cel As Range
     
        If Target.Count > 1 Then Exit Sub
        If Target.Address(0, 0) <> "B1" Then Exit Sub
     
        'défini la plage sur la colonne A à partir de A1, adapter...
        With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
     
        Set Cel = Plage.Find(Target.Value, , xlValues, xlPart)
     
        If Not Cel Is Nothing Then Cel.Select
     
    End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je placerais personnellement sur ma feuille une combobox Combobox1 (composant à prendre parmi les contrôles Activex de la boîte à outils).
    Si les données se trouvent en colonne A (exemple), j'affecterais la valeur A:A à sa propriété ListFillRange (dans la fenêtre des propriétés).
    Et ce code dans le module de code de la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox1_Change()
      If ComboBox1.ListIndex > -1 Then
        Application.Goto Range("A" & ComboBox1.ListIndex + 1)
        ComboBox1.Top = Range("A" & ComboBox1.ListIndex + 1).Top ' --->> ligne rajoutée pour garder la combo "à portée de main"
      End If
    End Sub
    Et rien d'autre, sauf ensuite essayer et voir que l'on obtient bien mieux encore que ce qui est demandé

    EDIT : j'ai rajouté une ligne de code pour assurer un confort en cas de liste longue en colonne A

  4. #4
    Membre averti Avatar de Pascal1970
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 31
    Par défaut
    Merci beaucoup Unparia,

    Par contre, je n'ai pas été en mesure de faire fonctionner votre formule, il faut dire que je mis connais très peu en VBA....

    Je n'ai pas saisi ce que vous vouliez me dire sur Combobox1 (composant à prendre parmi les contrôles Activex de la boîte à outils)? J'ai XL2003...

    Pour enregistrer le code sur la feuille, c'est ok.

    Si vous pouvez préciser les démarches que je dois faire ça serait très apprécié

    J'ai hâte de voir ce que vous m'avez suggérer!

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'ai hâte de voir ce que vous m'avez suggérer!
    Désolé, mais :
    - cet aspect-là n'est plus du VBA/Excel, mais la connaissance que tu as de ton interface Excel.
    - Je n'ai pas ta version, mais sais qu'elle offre, dans sa barre de menu, un onglet insertion (ou insert si version anglaise). En cliquant dessus, tu dois normalement arriver à une boîte à outils t'offrant la possibilité de choisir entre de simples contrôles formulaires ou des contrôles activex.
    Je ne saurais aller plus loin, sauf à me déplacer jusqu'à toi !

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une autre piste avec Like !
    Colles ce code dans un module standard, pose un bouton "Formulaire" sur ta feuille et affectes lui la macro "Test" (clic droit puis "Affecter une macro" et testes. Une boite va s'ouvrir entres la ou les lettres souhaitées et OK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Mot As String
     
        Mot = InputBox("Quel mot rechercher ?", "Rechercher")
     
        If Mot = "" Then Exit Sub
     
        'défini la plage sur la colonne A à partir de A1, adapter...
        With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
     
        For Each Cel In Plage
     
            If Cel.Value Like Mot & "*" Then
     
                Cel.Select
                Exit Sub
     
            End If
     
        Next Cel
     
    End Sub

  7. #7
    Membre averti Avatar de Pascal1970
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Octobre 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 31
    Par défaut
    Merci beaucoup THEZE!

    Par contre, ce que votre code me donne, c,est la première cellule de la colonne qui contient la lettre demandée...c'est bien mais ce n'est pas tout à fait l'effet escompté

    Je me réexplique: dans la colonne D à partir de la quatrième ligne, j'ai environs 500 noms de personne. Plusieurs commence par A, B, C, etc... si je recherche un nom qui commence par P, je veux qui se dirige sur le premier nom commençant par la lettre P, et non, le premier P qui trouve dans la colonne.

    Également, pour améliorer, pourrait-on utilisé une fenêtre distincte ou un bouton spécial au lieu de B1 ? Question de bien orienter l'utilisateur?

    Merci de prendre du temps pour moi c,est grandement apprécié ceci me permet de m'améliorer avec le language VBA.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. [WD14] Alimentation d'une colonne d'une tableau avec une autre colonne
    Par Deep Lowee dans le forum WinDev
    Réponses: 2
    Dernier message: 23/01/2013, 17h44
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. [DataGridViewButtonColumn] Bouton dans une colonne avec une image
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/11/2007, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo