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 :

Erreur dans la récupération des valeurs de cellule après un tri dans combobox


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Bénévole assoc
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bénévole assoc
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Erreur dans la récupération des valeurs de cellule après un tri dans combobox
    Bonjour, débutant en vba je me retrouve devant un petit souci.

    Je n'arrive pas à récupérer les bonnes valeurs de cellules après avoir trié mes données dans une combobox.
    Les données affichées sont celles du numéro de ligne dans la feuille et non les données dans la ligne sélectionnée dans ma combobox.

    Voilà mes deux morceaux de codes utilisés pour les procédures.

    D'abord je charge mes données dans ma combobox et je les trie
    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
    '**********************************
    'Procédure pour alimenter et trier*
    'ma combobox cbxListNom à         *
    'l'ouverture de l'userform        *
    '**********************************
    Private Sub UserForm_Initialize()
     
     
      For Each c In Range("C2:C" & Range("C65536").End(xlUp).Row)
        cbxListNom = c
        If cbxListNom.ListIndex = -1 And cbxListNom <> "" Then cbxListNom.AddItem c
      Next c
      With cbxListNom
        For i = 0 To .ListCount - 1
          For k = 0 To .ListCount - 1
            If .List(i) < .List(k) Then
              temp = .List(i)
              .List(i) = .List(k)
              .List(k) = temp
            End If
          Next k
        Next i
        .ListIndex = -1
    End With
    Ensuite je récupère la valeur indiquée dans la combobox pour remplir mes txtbox:

    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
    '**************************
    '*Procédure pour activer  *
    '*la recherche par nom   *
    '**************************
    Private Sub btnValiderRecheNom_Click()
     
        Dim no_ligne As Integer
     
        no_ligne = cbxListNom.ListIndex + 2
            txtCivilite.Value = Cells(no_ligne, 2).Value
            txtNom.Value = Cells(no_ligne, 3).Value
            txtDateN.Value = Cells(no_ligne, 4).Value
            txtAdresse.Value = Cells(no_ligne, 5).Value
            txtCP.Value = Cells(no_ligne, 6).Value
            txtVille.Value = Cells(no_ligne, 7).Value
            txtTelephone.Value = Cells(no_ligne, 8).Value
            txtCourriel.Value = Cells(no_ligne, 9).Value
    Et c'est là que je ne récupère pas les bonnes infos

    J'ai la même procédure pour une recherche par code client qui marche très bien,
    mais il n'y a pas de tri puisque les n°de code clients suivent le même ordre que les n° de ligne de la feuille

    Merci pour l'aide.

  2. #2
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour,
    essayez celà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    no_ligne = cbxListNom.ListIndex + 2
            txtCivilite.Value = Cells(2, no_ligne).Value
            txtNom.Value = Cells(3, no_ligne).Value
            txtDateN.Value = Cells(4, no_ligne).Value
            txtAdresse.Value = Cells(5, no_ligne).Value
            txtCP.Value = Cells(6, no_ligne).Value
            txtVille.Value = Cells(7, no_ligne).Value
            txtTelephone.Value = Cells(8, no_ligne).Value
            txtCourriel.Value = Cells(9, no_ligne).Value
    Quand au tri, je n'en voit pas? Il devrait y avoir un code ressemblant a ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.Sort Key1:=Range("Y13"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    En ce qui me concerne, je les trierais avant de les charger dans le combobox. Mais, ai-je raison?

    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Bénévole assoc
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bénévole assoc
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci, Transitoire, je vais tester.

    En ce qui concerne le tri, ma feuille est trié sur une colonne de code, pour qu'à l'insertion d'une nouvelle ligne le code associé au client s'incrémente correctement je laisse trier sur la colonne code, sinon pour incrémenter mon code client correctement il faudrait que je recherche la valeur la plus grande dans la colonne, et ça je n'ai pas encore abordé la question.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Bénévole assoc
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bénévole assoc
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Re,

    la solution proposée ne fonctionne pas. Même moins bien, car au lieu de renvoyer une information quoique erronée, elle ne renvoie plus rien.

    Je me doute que mon souci viens d'une erreur de syntaxe, car pour récupérer mes données je fait référence au numéro de la ligne ou se trouve la valeur de ma combobox avant d'être triée.
    Ce qui fait que une fois triée elle n'est plus sur la même ligne. Donc il faudrait que je puisse récupérer le nouveau numéro de ligne, la nouvelle adresse.
    Je pense qu'il faudrait que j'active la cellule ou se trouve la valeur de ma combobox. Mais j'ai vu comment activer ou sélectionner une cellule ou une plage, une colonne ou une ligne, mais je n'ai pas trouvé pour activer à partir d'une valeur dans une txtbox ou combobox.

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Il est quand même facile d'imaginer (pas bien sorcier) l'une de ces deux solutions :
    - 1) soit celle d'un tri liminaire avant d'abonder la combobox, comme le suggère Transitoire
    - 2) soit celle d'une combobox à deux colonnes avec, dans la seconde, le N° de la ligne (N° à utiliser ensuite lors de tes traitements)
    Non ?

    Dans tous les cas de figure : vider la combobox avant de l'abonder
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

Discussions similaires

  1. [XL-2003] Afficher des valeurs de cellules en fonction d'un ComboBox
    Par Antemix dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/06/2014, 09h36
  2. Réponses: 1
    Dernier message: 03/10/2007, 14h39
  3. Réponses: 3
    Dernier message: 21/05/2007, 15h37
  4. Réponses: 2
    Dernier message: 07/03/2007, 17h12
  5. Réponses: 2
    Dernier message: 21/05/2006, 14h02

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