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 avec combobox liés


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut problème avec combobox liés
    Bonjour

    Je refais une demande d'aide car je crois avoir mal publié la dernière

    J'ai un problème de code sur deux combobox que je voudrais lier. Mon code à marché la première fois lors d'un premier test, puis, plus rein. je ne dois pas être très loin de la solution, mais je ne trouve pas mon problème, je n'ai pas de message d'erreur mais mes combobox restent désespérément vides.

    Le problème se trouve sur l'userform "formulaire de saisie" sur les cboRubrique que je souhaite lier au cboTitre. Les listes se trouvent dans l'onglet Rubrique.

    Si quelqu'un peut m'aider, ce serai top!

    Voici mes codes et le dossier en pièce jointe :

    Merci beaucoup



    Dim colonne As Integer
    Dim i As Integer
    Dim j As Integer


    Private Sub cboRubrique_Change()
    i = 2
    frmSaisie.cboTitre.Clear
    Sheets("Rubrique").Range("B2:F2").Interior.ColorIndex = Clear
    Do While Cells(2, i).Value <> ""
    If Cells(2, i).Value = cboRubrique.Value Then
    Cells(2, i).Select
    ActiveCell.Interior.ColorIndex = 32
    colonne = ActiveCell.Column
    End If
    i = i + 1
    Loop
    j = 3
    Do While Cells(j, colonne).Value <> ""
    frmSaisie.cboTitre.AddItem Cells(j, colonne)
    j = j + 1
    Loop

    End Sub

    Private Sub UserForm_Initialize()

    colonne = 2
    Sheets("rubrique").Range("B2:F2").Interior.ColorIndex = Clear
    Do While Cells(2, colonne).Value <> ""
    frmSaisie.cboRubrique.AddItem Cells(2, colonne).Value
    colonne = colonne + 1
    Loop

    txtAn.Value = Format(Now, "yyyy")
    txtmoisauto.Value = Format(Now, "MMMM")
    Me.cboRubrique.SetFocus
    Me.lblMessage = "Veuillez saisir l'information à transmettre"


    End Sub

    Private Sub btnValider_Click()

    'test les contrôle pour vérifier saisie



    If Len(Me.cboRubrique) = 0 Then
    Me.lblMessage = "Veuillez selectionner une rubrique."
    Me.cboRubrique.SetFocus

    ElseIf Len(Me.cboTitre) = 0 Then
    Me.lblMessage = "Veuillez selectionner un titre."
    Me.cboTitre.SetFocus

    ElseIf Len(Me.txtInformation) = 0 Then
    Me.lblMessage = "Veuillez saisir l'information voulue."
    Me.txtInformation.SetFocus

    ElseIf Len(Me.cboSignature) = 0 Then
    Me.lblMessage = "Veuillez signer."
    Me.cboSignature.SetFocus

    Else


    'on cherche la dernière ligne de la source

    Feuil2.Activate
    Feuil2.Range("A1048576").End(xlUp).Offset(1, 0).Select

    'On affecte les données du formulaire dans la source

    ActiveCell = ActiveCell.Offset(-1, 0) + 1
    ActiveCell.Offset(0, 1) = Me.txtAn
    ActiveCell.Offset(0, 2) = Me.txtmoisauto
    ActiveCell.Offset(0, 3) = Me.cboRubrique
    ActiveCell.Offset(0, 4) = Me.cboTitre
    ActiveCell.Offset(0, 5) = Me.txtInformation
    ActiveCell.Offset(0, 6) = Me.cboSignature

    Call btnAnnuler_Click
    Unload Me
    Feuil2.Activate

    End If

    End Sub

    Private Sub btnAnnuler_Click()
    Me.txtAn = ""
    Me.txtmoisauto = ""
    Me.cboRubrique = ""
    Me.txtInformation = ""
    Me.cboSignature = ""
    Me.lblMessage = ""
    Me.lblMessage = "Veuillez saisir l'information à transmettre."

    End Sub

    Private Sub btnFermer_Click()
    Unload Me

    End Sub





    Communication_interne_SI_test.xlsm

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Pourquoi ne tires tu pas avantage de la propriété RecordSource des combo-box ?
    Ça marche même avec les plages nommées / tableaux.

    Techniquement, on ne peut pas lier une combo-box à une autre.
    Par contre, elles peuvent avoir la même source de données.

    Et bon sang !!
    Excel n'est pas une base de données !!
    Il n'en a pas les capacités, il est exécrables dans ce domaine (celui qui te fait croire le contraire est un menteur).
    Utilise des outils adaptés, MS Access par exemple, et si tu as besoin de quelque chose de plus robuste, tourne toi vers un vrai SGBD.

  3. #3
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut
    Bonjour Deedolith
    Au départ, j'avais effectivement utilisé des listes à utiliser dans chaque combobox sous Tableau Titre et Tableau Rubrique (encore disponibles sur l'onglet Liste) , mais à l'usage, ces listes vont être assez imposantes (car beaucoup de titre en lien avec chaque rubrique) et ne sont pas liées donc ne filtrent pas les informations entres elles. J'avais donc dans ma cboRubrique, toutes mes rubriques (parfait), mais dans ma cboTitre, j'avais également tous mes titres en lien avec toutes les rubriques, alors que je souhaite avoir le titre correspondant à ma rubrique (comme sur l'onglet Rubrique) , tout en ayant la possibilité de rajouter des rubriques et des titres de manière infinie.
    Comme je suis autodidacte et je cherche des tutoriels pour me perfectionner, je bloque de temps en temps sur certains points. Et hélas, je ne connais pas d'autres types de codage. Je suis sûre qu'il y a beaucoup plus perfectionné, mais je ne connais pour le moment que cela.
    Pour ce code, j'ai suivi à la lettre un tutoriel pour faire des combobox en cascade, mais il ne fonctionne pas et je ne trouve pas mon erreur.
    Avez-vous une idée?
    Merci pour votre temps
    Nat

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Une erreur qui saute aux yeux, c'est les références implicites, qui effectivement ne pointent pas sur ce que tu penses.
    Cells(2, i) c'est la cellule aux coordonnées (2, i) dans la feuille active du classeur actif.
    Mais, comme la feuille active est instable (il suffit de cliquer sur une autre pour que ça change), tu ne tapes tout simplement pas sur la bonne feuille pour récupérer tes données.
    La solution, c'est les références explicites, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Wb As Excel.Workbook
    Set Wb = ThisWorkbook    '// Wb référence le classeur qui contiens le code, et aucun autre.
     
    Dim Ws As Excel.Worksheet
    Set ws = Wb.Worksheets("Feuil1")    '// Ws référence la feuille nommée Feuil1, et aucune autre.
    Ensuite, je ne pense pas que la combo-box Rubrique soit soumise au moindre filtrage, donc l'utilisation de sa propriété RowSource est très indiquée.

    Ton tutoriel ne doit pas être très bon, il te manque l'instruction Option Explicit partout (et configure ton IDE pour l'ajouter automatiquement).

    L'utilisation des objets "Active" (fortement dépendant du contexte) est contre-indiquée, sauf raison valable (je n'en voit pas ici).

    Indente ton code, il n'est pas très lisible.
    La lisibilité doit être ta préoccupation numéro un, produire le comportement désiré n'arrive qu'en seconde position.

    Les variables déclarées au niveau du formulaire, sauf bonne raison, doivent être privées.

    Utilise et abuse autant que possible des tableaux structurés ainsi que leurs caractéristiques, ça t'éviteras de nombreuses recherche de première / dernière ligne.

    Un bon code VBA n'a que très rarement l'occasion de sélectionner / activer quoi que ce soit, c'est lent, et ça fait ressembler ton classeur à un sapin de Noël (dans la salon, c'est beau, mais pas sur un écran d'ordinateur).

    Tu violes le SRP: https://en.wikipedia.org/wiki/Single...lity_principle

    Il y a certainement d'autres choses à redire, mais ça fait déjà une bonne liste.

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 414
    Par défaut
    Bonjour,

    Je suis du même avis que deedolith, Excel n'est pas une base une données et il est certainement d'utiliser Access (ou équivalent) pour ce que vous êtes en train d'élaborer. Dans votre application Excel, vous verrez très vite qu'il sera assez compliqué de la "partager" entre plusieurs pc. Cela convient encore bien s'il n'y a que 1 seul utilisateur à la fois.

    Cependant pour avancer un peu, voici une solution pour frmSaisie en ayant plaçé chaque liste dans un tableau structuré différent (dont le nom est construit en reprenant le premier mot de son titre).

    Cordialement.

    P.S. discussion dédoublée sur celle-ci !
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. problème avec combobox liés
    Par nattalia dans le forum Excel
    Réponses: 27
    Dernier message: 21/11/2022, 15h25
  2. Réponses: 3
    Dernier message: 09/09/2008, 01h20
  3. problème avec combobox
    Par reverse_engineer dans le forum Struts 1
    Réponses: 5
    Dernier message: 13/07/2008, 19h20
  4. Problème avec Combobox et XML
    Par gstephane dans le forum Flex
    Réponses: 0
    Dernier message: 20/01/2008, 12h59
  5. [AS2] Problème avec ComboBox lors création d'un composant perso
    Par aldo-tlse dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 24/05/2006, 18h51

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