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 :

Liste en cascade excel par du code VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    responsable formation
    Inscrit en
    Janvier 2020
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : responsable formation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 75
    Par défaut Liste en cascade excel par du code VBA
    Bonjour, je voudrais créer une liste en cascade excel avec le code VBA et en alimentant cette liste par une requête de ma base de donnée ACCESS.
    Pour une liste simple pas de souci cela fonctionne mais quand je commence à faire une présélection pour la liste en cascade ça ne marche plus et un message d'erreur apparait " erreur d'exécution aucune valeur donnée pour un ou plusieurs des paramètres requis"

    Voici mon code :
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    Private Sub Worksheet_Activate()
        Dim cnx As New ADODB.Connection
        Dim cmd As New ADODB.Command
        Dim rst As New ADODB.Recordset
        Dim resultat As Variant
        Dim Rcompte As Integer 'Nombre d'enregistrement recordset
     
     
    'Création de la connexion
        cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=*******.accdb;Persist Security Info=False;"
        Set cmd.ActiveConnection = cnx
    'Création de la commande
        cmd.CommandType = adCmdText
        cmd.CommandText = "SELECT DISTINCT LibelleCategorieFormation, IDCategorieFormation FROM R_FormationExcel ORDER BY IDCategorieFormation"
     
    'Execution de la commande
     
        Set rst = cmd.Execute
     
    'Compte le nombre d'enregistrement
        Rcompte = rst.RecordCount
        Debug.Print (Rcompte)
     
    'Parcour des enregistrement
        Do Until rst.EOF
        resultat = resultat & rst("LibelleCategorieFormation") & ","
        rst.MoveNext
        'Debug.Print resultat
        Loop
        rst.MoveFirst
        With Range("I5").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=resultat
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = False
        End With
     
    Rcompte = 0
     
    Set rst = Nothing
    Set cmd = Nothing
     
    resultat = ""
     
    'Création de la commande
        Set cmd.ActiveConnection = cnx
     
        cmd.CommandType = adCmdText
        cmd.CommandText = "SELECT * FROM R_FormationExcel WHERE LibelleCategorieFormation =" & Range("LibelleCategorieFormation")
     
    'Execution de la commande
        Set rst = cmd.Execute
     
    'Compte le nombre d'enregistrement
        Rcompte = rst.RecordCount
        Debug.Print (Rcompte)
     
    'Parcour des enregistrement
        Do Until rst.EOF
        resultat = resultat & rst("LibelleFormation") & ","
        rst.MoveNext
        Debug.Print resultat
        Loop
        rst.MoveFirst
     
        'Range("LibelleFormationAjoutFormation") = ""
        With Range("LibelleFormationAjoutFormation").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=resultat
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = False
        End With
     
     
    cnx.Close
    Set cnx = Nothing
     
     
    Set rst = Nothing
    Set cmd = Nothing
    resultat = ""
     
     
     
    End Sub
    Merci de votre aide.

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Hello,

    Je n'ai jms fais ce genre de chose à partir d'une base access,
    ke dirais que le souci vient de la ligne 56 ou la variable & Range("LibelleCategorieFormation") est égale à rien, vu que aucune valeur sélectionnée dans la liste de validation.

    Je pense qu'il faudrait travaillé avec des Combox, et ainsi pour faire l'update de la liste (cbo) suivante sur l'événement on change de la cbo.

    Bav

  3. #3
    Membre confirmé
    Homme Profil pro
    responsable formation
    Inscrit en
    Janvier 2020
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : responsable formation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 75
    Par défaut
    Bonjour mfoxy,
    pourtant quand je rentre une valeur dans la cellule Range ("LibelleCategorieFormation"), j ai comme même cette erreur qui s'affiche et le pire s'est que quand je suis dans la partie code et en mode pas a pas et qu'avec ma sourie je passe sur la ligne 56 il me fait bien apparaitre la valeur de ma feuil ou se trouve la cellule "LibelleCategorieFormation" alors je ne comprend pas d'où vient le problème.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ne faudrait-il pas placer des apostrophes (ou guillemets) avant et après Range("LibelleCategorieFormation") ? C'est une chaine de caractère

  5. #5
    Membre confirmé
    Homme Profil pro
    responsable formation
    Inscrit en
    Janvier 2020
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : responsable formation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 75
    Par défaut
    Bonjour je viens de faire le test mais cela ne fonctionne pas non plus.

Discussions similaires

  1. comment controler zone de liste sur feuille excel par vba
    Par skulker dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/07/2012, 22h36
  2. Compactage de la base par du code VBA?
    Par juliojc13 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/05/2007, 17h06
  3. Réponses: 10
    Dernier message: 24/08/2006, 19h52
  4. [VBA-E] Comment créer un bouton ds une wksheet par un code vba
    Par moicwill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2006, 17h12
  5. [Excel] Injecter du code VBA par le biais d'un fichier *.cvs
    Par llsn dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/05/2006, 20h42

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