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 Userform via un tableau VBA [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut Recherche Userform via un tableau VBA
    Bonjour a tous,

    Présentation:
    J'ai créé un userform qui me permet de contrôler des poteaux incendie. Chaque hydrant porte un nom spécifique comportant un code de la commune et le numéro du poteau. (ex 28120-00004) 28120 étant le code communale et 00004 le numéro de l'hydrant.

    Nom : Screenshot_3.png
Affichages : 1142
Taille : 74,2 Ko

    Demande: (zone Jaune de l'image)

    Je souhaiterais que lors du choix de la commune, le Textbox "code sdis" affiche le premier code du poteau (qui appartient à la commune) e que grace au fléche je puisse passé a l'hydrant suivant.

    Code:

    Actuellement j'arrive a enregistrer l'ensemble de mes donnéss dans un tableau VBA et de les afficher dans le Textbox du "Code SDIS" mais je ne parvient pas a le faire modifier par les flèches.

    Mon code actuelle est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub codesdis_Change()
    Dim tableau(2500, 1), I As Integer 'Déclaration du tableau en variable pour l'enregistrement des codes SDIS et commune
     
    For I = 0 To 2500
        tableau(I, 0) = Sheets("TGRI").Range("L" & I + 2)
        tableau(I, 1) = Sheets("TGRI").Range("K" & I + 2)
        Next
        codesdis.Value = Application.WorksheetFunction.VLookup(ComboBox1, tableau, 2, False)
     
    End Sub
    Objet:
    Nom de la feuille source: TGRI
    Source code SDIS : K9:K2500
    Source commune : L9:L2500
    Outils userform "Codes SDIS" : codesdis
    Outils userform "Commune" : Combobox1

    A savoir:
    L'utilisation d'un tableau VBA n'est pas obligatoire je souhaite simplement un code qui me permet de faire ce que je souhaite.
    La valeur du Textbox "Code SDIS" permettra de renseigner l'ensemble de l'Userform ainsi que de transmettre les nouvelles données dans mon tableau excel.

    Si vous souhaitez plus d'information je peux bien sur vous en fournir. Pour des raisons de confidentialité des données je ne peux vous transmettre le fichier (j'en suis désolé).

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wouairness Voir le message
    Bonjour,

    De mon point de vue, c'est au changement de commune que la variable Tableau doit être chargée ou filtrée avec seulement les bornes concernant la commune. Lorsque votre code sdis change, le reste des données en jaune change. Plutôt qu'un TextBox, une ListBox contenant la liste des poteaux de la commune serait plus adaptée et vous n'auriez pas forcément besoin des flèches. En cas d'utilisation des flèches, il suffit d'agir la propriété ListIndex de la ListBox comme avec code sdis change et de récupérer les infos correspondantes soit dans votre onglet soit dans votre matrice si vous chargez ces infos dedans.
    Pour cette raison, la mise à jour des champs en jaune doit plutôt se faire dans une procédure spécifique pour ne pas avoir à répéter le code dans les différents événements (code sdis et les flèches).

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut
    Je te remercie pour ton implication Eric et effectivement pour simplifier l'utilisation du formulaire je vais suivre ton conseil et changer le textbox du codesdis en combobox afin d'y enregistrer la liste des codes hydrants, tout en gardant le système de flèche pour un meilleur confort. Mais malheureusement mon code d'assignation pour le combobox "codesdis" ne fonctionne pas, sûrement qu'il ne pioche pas au bon endroit.

    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
    27
    28
    29
    30
    31
    Sub ComboBox1_Change()
     
    Dim valeurcherche As String
    Dim plagederecherche As Integer
    Dim resultadelarecherche As Range
    Dim collonetrouvee As Integer
    Dim lignetrouvee As Integer
    Dim colonne As Integer, nbLignes As Integer, i As Integer
     
    '+++assignation de la liste dans le codesdis
     
     
        'Zone de liste vidée 
        codesdis.Clear
     
        'Numéro de la sélection
        colonne = ComboBox1.ListIndex + 7
        MsgBox colonne
     
        'Si le numéro de colonne = 0  la procédure est quittée
        If colonne = 0 Then Exit Sub
     
        'Nombre de lignes de la colonne de la commune choisi
        nbLignes = Sheets("source").Cells(2, colonne).End(xlDown).Row
     
        'Boucle pour ajouter les codes hydrant dans la zone de liste
        For i = 2 To nbLignes
     
     
            codesdis.AddItem Sheets("codage").Cells(i, colonne)
        Next
    De plus je souhaiterais que quand j'utilise les flèches, qu'il bloque sur le dernier de la liste ainssi que le premier afin qu'il ne passe pas sur une autre commune par erreur. J'ai voulue passer par un système qui détecte la première et dernière de la liste mais sans succès. Je pense qu'il serais préférable de passer par un tableau afin de gérer dans l'ensemble du code les différentes actions portées sur les "code sdis". Si jamais vous avez une idée d'un bout de code permettant cela je suis preneur. Je vous souhaite une bonne journée.

  4. #4
    Invité
    Invité(e)
    Par défaut Avec Excel 365, pas avec Excel 2013
    Citation Envoyé par wouairness Voir le message
    Si ton tableau est un tableau structuré, regarde cette réponse de Pierre FAUCONNIER : https://www.developpez.net/forums/d2.../#post11665814
    Il te suffirait de filtrer la commune puis de charger ta ListBox avec le résultat. Celui-ci devrait être quasi instantané.

    Visiblement cette solution n'est pas disponible sur Office 2013, désolé. La méthode Filter est disponible en VBA, requêter sur le forum pour obtenir des exemples.
    Dernière modification par Invité ; 16/01/2021 à 04h15. Motif: Disponible sur Excel 365

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut
    Bonjour

    Je n'es pas pue gérer l'enchainement des code hydrant via les flèches je les ai donc simplement supprimer et utiliser l
    le combobox pour le choix. Grace au code suivant, que je pose ici si il permet a d'autre de résoudre leur problème.
    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
    Dim nbcommune As Integer, hautplagecode As Range '
     
        nbcommune = WorksheetFunction.CountIf(Sheets("TGRI").Range("L9:L2500"), ComboBox1.Value) ' compter le nombre de valeur du combobox est présent dans la source
        'nbcommune = nbcommune - 1
     
        'recherche de la premiére cellule de la plage
     
            Set hautplagecode = Sheets("TGRI").Range("L9:L2500").Find(valeurcherche, , xlValues, xlWhole, , xlNext)
            'MsgBox hautplagecode.Address
     
            If valeurcherche = Sheets("TGRI").Range("L9").Value Then
     
                 controle.codesdis.list = Worksheets("TGRI").Range(Cells(hautplagecode.Row - 1, hautplagecode.Column - 1), Cells(hautplagecode.Row + nbcommune - 2, hautplagecode.Column - 1)).Value
                'MsgBox plagecode.Address
     
     
            Else
                controle.codesdis.list = Worksheets("TGRI").Range(Cells(hautplagecode.Row, hautplagecode.Column - 2), Cells(hautplagecode.Row + nbcommune - 1, hautplagecode.Column - 2)).Value
                'MsgBox plagecode.Address
     
     
            End If
    Merci Eric pour ton aide

    Problème résolu

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

Discussions similaires

  1. Suppression tableau VBA via textbox
    Par jackborogar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/05/2012, 12h06
  2. Récupération recherche google via VBA
    Par mtaurines dans le forum Internet
    Réponses: 0
    Dernier message: 22/02/2012, 14h30
  3. copie entre excel et VBA via variable tableau
    Par Alfred23 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/09/2011, 17h00
  4. Réponses: 33
    Dernier message: 22/08/2011, 14h33
  5. [VBA-E]Recherche dans une variable tableau
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2006, 17h50

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