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 :

problème de type de donnée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 145
    Par défaut problème de type de donnée
    Voila, je suis en train de faire des listes déroulantes qui fonctionnent en cascade. J'ai repris un code du FAQ.

    Mais voila le soucis c'est que dès lors que l'on a une colonne avec des chiffres uniquement, les listes déroulantes suivantes ne fonctionnent plus.

    Et là mystère

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    'Les données sont dans les colonnes A à D, d'un onglet nommé "Base".
    'La procédure effectue un remplissage conditionnel des Combobox en fonction de
    'ce qui est sélectionnée dans le contrôle précédent:
    'La sélection du ComboBox1 (données colonne A) définit le contenu du ComboBox2 (données colonne B) ,
    'La sélection du ComboBox2 définit le contenu du ComboBox3 (données colonne C) …etc...
    '
     
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Base")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = Ws.Range("A65536").End(xlUp).Row
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
     
    Private Sub ComboBox3_Change()
        'Remplissage Combo4
        Alim_Combo 4, ComboBox3.Value
    End Sub
     
     
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = Ws.Range("A" & j)
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
            Next j
        Else
            'Alimentation conditionnelle des autres Combobox en fonction de
            'ce qui est sélectionnée dans le contrôle précédent:
            '(La sélection du ComboBox1 définit le contenu du ComboBox2,
            'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)
            For j = 2 To NbLignes
                If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = Cible Then
                    Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                    If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub
    Pour ma part j'ai ma première colonne de mon tableau qui regroupe des sections genre : 6081, 6055... donc après mes autres listes ne font apparaitre aucun résultat.Ca vient du type de donnée qui est mal déclaré, mais je sais pas où y déclarer????

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    essaie de faire partoutv

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 145
    Par défaut
    Je sais pas si c'est ce que tu me demandais, en tout cas y a pas d'amélioration.


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    'Les données sont dans les colonnes A à D, d'un onglet nommé "Base".
    'La procédure effectue un remplissage conditionnel des Combobox en fonction de
    'ce qui est sélectionnée dans le contrôle précédent:
    'La sélection du ComboBox1 (données colonne A) définit le contenu du ComboBox2 (données colonne B) ,
    'La sélection du ComboBox2 définit le contenu du ComboBox3 (données colonne C) …etc...
    '
     
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Base")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = CStr(Ws.Range("A65536").End(xlUp).Row)
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
     
    Private Sub ComboBox3_Change()
        'Remplissage Combo4
        Alim_Combo 4, ComboBox3.Value
    End Sub
     
     
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = CStr(Ws.Range("A" & j))
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
            Next j
        Else
            'Alimentation conditionnelle des autres Combobox en fonction de
            'ce qui est sélectionnée dans le contrôle précédent:
            '(La sélection du ComboBox1 définit le contenu du ComboBox2,
            'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)
            For j = 2 To NbLignes
                If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = Cible Then
                    Obj = CStr(Ws.Range("A" & j).Offset(0, CbxIndex - 1))
                    If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 145
    Par défaut
    Heu en fait tu avais raison j'ai oublié de mettre Cstr à un endroit. Là maintenant ça marche nikel.

    Merci merci merci mercatog

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    'Les données sont dans les colonnes A à D, d'un onglet nommé "Base".
    'La procédure effectue un remplissage conditionnel des Combobox en fonction de
    'ce qui est sélectionnée dans le contrôle précédent:
    'La sélection du ComboBox1 (données colonne A) définit le contenu du ComboBox2 (données colonne B) ,
    'La sélection du ComboBox2 définit le contenu du ComboBox3 (données colonne C) …etc...
    '
     
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Base")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = CStr(Ws.Range("A65536").End(xlUp).Row)
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
     
    Private Sub ComboBox3_Change()
        'Remplissage Combo4
        Alim_Combo 4, ComboBox3.Value
    End Sub
     
     
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = CStr(Ws.Range("A" & j))
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem CStr(Ws.Range("A" & j))
            Next j
        Else
            'Alimentation conditionnelle des autres Combobox en fonction de
            'ce qui est sélectionnée dans le contrôle précédent:
            '(La sélection du ComboBox1 définit le contenu du ComboBox2,
            'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)
            For j = 2 To NbLignes
                If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = CStr(Cible) Then
                    Obj = CStr(Ws.Range("A" & j).Offset(0, CbxIndex - 1))
                    If Obj.ListIndex = -1 Then Obj.AddItem CStr(Ws.Range("A" & j).Offset(0, CbxIndex - 1))
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut adriennoob et le forum
    Pas réellement envie de chercher à résoudre un mauvais fonctionnement erratique. Alors, juste une question : Quelle est l'origine des nombres ? un calcul ou une entrée manuelle ? Et leur format ?
    Si ça fonctionne pour des lettres, le code est bon, reste la nature des données
    A+

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Sauf ici, ne fallait pas mettre cstr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        'Définit le nombre de lignes dans la colonne A
        NbLignes = CStr(Ws.Range("A65536").End(xlUp).Row)  'Ici NbLignes integer

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

Discussions similaires

  1. gros problème de type de données
    Par maverick91 dans le forum Modélisation
    Réponses: 2
    Dernier message: 10/11/2008, 13h37
  2. Problème de type de données entre Java et Postgres
    Par La Piotte dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 31/01/2008, 20h23
  3. [BO 6.5.1] Problème de type de données
    Par maitre_yoda78 dans le forum Deski
    Réponses: 4
    Dernier message: 16/01/2008, 15h38
  4. Problème avec type de données
    Par yancimer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/09/2006, 16h54
  5. Réponses: 4
    Dernier message: 09/05/2006, 10h29

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