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 :

fonction find dans ComboBox [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut fonction find dans ComboBox
    Bonjour à tous,

    J'ai créé un userform qui permet de rechercher des information dans un sheet excel.
    J'y ai inséré un combobox qui permet à l'utilisateur de taper une référence, et cette combobox remonte les informations trouvés dans d'autre champs (textbox).
    Le soucis que j'ai, c'est que lorsque la référence n'est pas trouvé, une erreur 91 remonte.

    Comment puis-je contourner le problème?
    Je souhaiterai que, lorsque la référence n'est pas trouvé, un message d'erreur apparaisse et qu'aprés validation, l'utilisateur puisse corriger son erreur.

    Voici le code actuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub NumNCR_Change()
    Dim NumLigne As String
     
    'Détection du numéro de ligne pour la valeur de la colonne N° demande
    NumLigne = Columns(2).Find(NumNCR.Value, LookIn:=xlValues, LookAt:=xlPart).Row
     
    'Remplissage du formulaire
    PN.Value = Range("C" & NumLigne).Value
    OF.Value = Range("D" & NumLigne).Value
    Quantite.Value = Range("E" & NumLigne).Value
    Information complémentaire: la référence dans la combobox est forcément de 9 chiffres.

    Merci d'avance pour votre aide

  2. #2
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 516
    Par défaut
    Salut,
    En deux étapes, d'abord tu recherches une cellule avec la méthode Find, si trouvée alors tu affectes le numéro de ligne à la variable NumLigne.
    Un peu de lecture : https://learn.microsoft.com/en-us/of...cel.range.find

    Attention quand tu écrit : Columns(2).Find(NumNCR.Value, LookIn:=xlValues, LookAt:=xlPart).Row Excel va chercher l'information dans la feuille active.

    En gros cela devrait ressembler à cela :
    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
    Private Sub NumNCR_Change()
        'Détection du numéro de ligne pour la valeur de la colonne N° demande
        Dim rngSearch As Range
        ' // Adapter le nom de la feuille Feuil1 par la votre
        With Feuil1
            Set rngSearch = .Columns(2).Find(NumNCR.Value, LookIn:=xlValues, LookAt:=xlPart)
            If Not rngSearch Is Nothing Then
                Dim NumLigne As String
                NumLigne = rngSearch.Row
                'Remplissage du formulaire
                PN.Value = .Range("C" & NumLigne).Value
                OF.Value = .Range("D" & NumLigne).Value
                Quantite.Value = .Range("E" & NumLigne).Value
     
            Else
                MsgBox "La référence [" & NumNCR.Value & "] n'a pas été trouvée !" & vbCrLf _
                       & "" & vbCrLf _
                       & "Vérifiez qu'il n'y ai pas d'erreur de saisie, avant de continuer.", vbOKOnly Or vbInformation, Application.Name
     
            End If
        End With
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Par défaut
    Merci beaucoup pour votre aide.
    Cette méthode fonctionen parfaitement bien

    Citation Envoyé par Valtrase Voir le message
    Salut,
    En deux étapes, d'abord tu recherches une cellule avec la méthode Find, si trouvée alors tu affectes le numéro de ligne à la variable NumLigne.
    Un peu de lecture : https://learn.microsoft.com/en-us/of...cel.range.find

    Attention quand tu écrit : Columns(2).Find(NumNCR.Value, LookIn:=xlValues, LookAt:=xlPart).Row Excel va chercher l'information dans la feuille active.

    En gros cela devrait ressembler à cela :
    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
    Private Sub NumNCR_Change()
        'Détection du numéro de ligne pour la valeur de la colonne N° demande
        Dim rngSearch As Range
        ' // Adapter le nom de la feuille Feuil1 par la votre
        With Feuil1
            Set rngSearch = .Columns(2).Find(NumNCR.Value, LookIn:=xlValues, LookAt:=xlPart)
            If Not rngSearch Is Nothing Then
                Dim NumLigne As String
                NumLigne = rngSearch.Row
                'Remplissage du formulaire
                PN.Value = .Range("C" & NumLigne).Value
                OF.Value = .Range("D" & NumLigne).Value
                Quantite.Value = .Range("E" & NumLigne).Value
     
            Else
                MsgBox "La référence [" & NumNCR.Value & "] n'a pas été trouvée !" & vbCrLf _
                       & "" & vbCrLf _
                       & "Vérifiez qu'il n'y ai pas d'erreur de saisie, avant de continuer.", vbOKOnly Or vbInformation, Application.Name
     
            End If
        End With
    End Sub

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 581
    Par défaut
    Bonjour,
    J'imagine que NumNCR c'est ta ComboBox ?
    J'imagine que tu charges ta ComboBox avec des valeurs existantes dans ta feuille ?

    Note que ta ComboBox dispose de la propriété ListIndex qui donne la position ordinale du texte saisie !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub NumNCR_Change()
    If    NumNCR.ListIndex=-1 then exit sub
    Dim NumLigne As String
    https://www.developpez.net/forums/d1440075/logiciels/microsoft-office/excel/macros-vba-excel/besoin-d-aide-tableau-userforme-inventaire/

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

Discussions similaires

  1. [XL-2013] Fonction Find dans VBA
    Par emamousse dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 30/09/2016, 17h22
  2. [XL-2016] Fonction find dans tableau avec multiples colonnes
    Par bax710 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/06/2016, 17h44
  3. [PDO] Fonction substr dans combobox
    Par FANDENEGI dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/03/2013, 11h11
  4. [E-03] Aide sur la Fonction .Find dans VBA
    Par Gunsx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2009, 22h36
  5. Fonction Find dans un "Range" ?
    Par Calimero06 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2008, 09h47

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