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 :

Combobox et fonction indirect [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut Combobox et fonction indirect
    Bonjour à tous
    J'ai crée un tableau sous Excel 2010 qui me quantifier du matériel. Ce matériel est classé par famille, sous-famille et libellé (je précise que j'aurais opté pour une bdd access, mais je ne peux pas)
    J'ai donc créé des listes déroulantes avec la fonction validation et la formule indirect. Fonctionne parfaitement.
    Pour des raisons ergonomiques, je voudrais faire évoluer un peu le tableur en créant en VBA un formulaire qui se lance au double-clic dans une cellule et qui affiche directement
    la liste déroulante, qui s'initialiserait automatiquement en fonction de la cellule située à gauche. Ex : cellule active en D1, double clic, il récupère la valeur de C1 et m'affiche la liste correspondante
    avec la formule indirect.
    Je n'arrive pas à saisir la bonne formule sur Private Sub UserForm_Initialize().
    Comment dois-je déclarer la variable ? Et comment se fait l'appel de la fonction inidrect ?

    Un énorme merci d'avance pour votre aide
    BV

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour bvalenza, la forum
    si tu cherche à insérer un USERFORM avec deux combobox la valeur de la deuxième est conditionner par la valeur de la première (combi1 : catégorie et combo2 sous catégorie) et donnée combo 1 en colonneA et données combo2 en colonne B tu peux procéder de la façon suivante :
    après tu peux trouver la valeur de TEXTBOX (commentaire)
    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
    Dim dernLigne As Long
    Private Sub ComboBox1_Change()
    Dim CodeR As String
    ComboBox2.Clear
    With Sheets("feuil1")
      CodeR = ComboBox1.Value
      Set rg = .range("A1:A" & dernLigne)
     For Each cell In rg
      If cell.Value = CodeR Then
       ComboBox2 = .range("B" & cell.Row)
       If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .range("B" & cell.Row)
      End If
      Next cell
    End With
    End Sub
     
    Private Sub UserForm_Initialize()
    dernLigne = Sheets("feuil1").range("A" & Rows.Count).End(xlUp).Row
    Dim i As Integer
    dernLigne = Sheets("feuil1").range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To dernLigne
      ComboBox1 = Sheets("feuil1").range("A" & i)
      If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("feuil1").range("A" & i)
    Next i
    TextBox1.Value = ""
    ComboBox2.Value = ""
    End Sub

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut Re
    Bonjour BENNSAR et merci

    Concernant ta réponse voici ce que je décrypte (je ne maitrise pas aussi bien que toi le code, j'ai quelques bases)

    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
    Dim dernLigne As Long
    Private Sub ComboBox1_Change()
    Dim CodeR As String
    ComboBox2.Clear
    With Sheets("feuil1")
      CodeR = ComboBox1.Value
      Set rg = .range("A1:A" & dernLigne)
     For Each cell In rg
      If cell.Value = CodeR Then
       ComboBox2 = .range("B" & cell.Row)
       If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .range("B" & cell.Row)  //// -> c'est ici je pense que tu utilise la fonction indirect n'est ce pas ?
      End If
      Next cell
    End With
    End Sub
     
    Private Sub UserForm_Initialize()
    dernLigne = Sheets("feuil1").range("A" & Rows.Count).End(xlUp).Row
    Dim i As Integer
    dernLigne = Sheets("feuil1").range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To dernLigne
      ComboBox1 = Sheets("feuil1").range("A" & i)
      If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("feuil1").range("A" & i)
    Next i
    TextBox1.Value = ""
    ComboBox2.Value = ""
    End Sub
    je vais essayer de regarder tout ceci à tête reposée
    un grand merci et je reviens vers toi

  4. #4
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut Re
    test.xlsmtest.xlsm

    J'ai commencé à tester votre solution
    2 problèmes :
    - j'ai besoin de la fonction intercaler pour actualiser la deuxième liste en fonction de la première et j'ai l'impression qu'il ne procède qu'à une recherchev
    - par facilité je voudrai nommer mes plages de cellule pour les appeler plus facilement

    Je joins mon tableur d'essai pour etre plus clair


    merci beaucoup

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir
    voir ce ci :
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut re
    Merci 1000 fois, je vais pouvoir bien avancer
    c'st exactement ce que je voulais

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Pour compléter le champs réservé au commentaire faire le recherche du chapitre et le sous chapitre et une fois la condition est vérifiée te porte la colonne C
    bonne continuation et si c'est résolu merci de taper sur le bouton RESOLU
    Bonne continuation

  8. #8
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut re
    je teste sur ma troisième colonne
    et je reviens vers vous
    merci beaucoup

  9. #9
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut
    j'ai ajouté un troisième combobox et ça fonctionne parfaitement
    Deux choses pour terminer :
    - comment vider le 3ème combo à l'ouverture du formulaire
    j'ai essayé combo3.clear et combo3.value="" ne marche pas
    - je voulais créer ensuite un bouton de validation qui me récupère les trois variables de mon form (combo1, 2 et 3)
    et qui me les insères directement dans la ligne où je me trouve sur la feuille "saisie"
    je sais déclarer les variables et récupérer les valeurs, par contre comment lui dire quand par exemple je double clique sur la cellule A4
    que le formulaire s'affiche et qu'il me renvoie en A4, la valeur du combo1, en B4 la 2 et en C4 la 3
    je vois bien un peu avec activecell = ma variable mais comment décaler sur les deux autres cellules ?

    merci encore pour toute votre aide
    (cf fichier joint)test.xlsm

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    tu m'as envoyé l'ancien fichier
    voir avec ça :
    Fichiers attachés Fichiers attachés

  11. #11
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut
    merci c'es pratiquement ça

    j'avais commencé à tester avec un bouton valid
    et en mettant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
       If Me.ComboBox1 = "" Then
          MsgBox "Famille vide"
          Me.ComboBox1.SetFocus
          Exit Sub
      End If
     
      With Sheets("saisie")
        ligne = .Range("A65000").End(xlUp).Row + 1
        .Cells(ligne, 2) = Me.ComboBox1
        .Cells(ligne, 3) = Me.ComboBox2
        .Cells(ligne, 4) = Me.ComboBox3
      End With
    End sub
    et j'ai testé ton fichier, le seul problème c'est que je dois partir de la feuille "saisie" pour afficher le form par x2 clic, ça je sais faire
    mais le plus important, c'est que le retour des données se fasse de la ligne où je suis parti et non après celle de la dernière cellule remplie
    exemple : je double clique en A6, mon form s'ouvre, je remplie, je valide et mes données se mettent sur ma ligne 6 en A6, B6 et C6

    Je m'éclate grâce à vous, merci beaucoup

  12. #12
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    double clic pour afficher le userform??
    vérifié si ligne n'est pas définie dans une autre procédure?? car
    avec ça normalement il va renvoyer les donnée après la dernière ligne non vide??
    essayons de trouver une solution et éviter les pièces jointes qui manquent pas d'alourdir et charger ce super site mais si c'est le seul moyen pour trouver une solution m'envoyé un fichier test avec données fictives et je vaias essayer de trouver solution
    sachant que je suis aussi limité et débutant en vba (autodidacte)

    vérifier si t'as mis ça dans la feuille "saisie"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    UserForm1.Show
    End Sub

  13. #13
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut
    je viens de rajouter ton code sur la feuille saisie
    par contre il me renvoie les données à la première ligne vide et non pas sur la ligne d'où je lance le x2 clic
    j'ai cliqué en A2, il m'a créé un enregistrement en A7

  14. #14
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 243
    Par défaut
    j'ai trouvé !!!
    merci encore pour ton aide
    j'ai juste ajouté ceci dans le bouton de validation

    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
    Private Sub CommandButton1_Click()
    Ligne = ActiveCell.Row
     
       If Me.ComboBox1 = "" Then
          MsgBox "Famille vide"
          Me.ComboBox1.SetFocus
          Exit Sub
      End If
     
      With Sheets("saisie")
        'ligne = .Range("A65000").End(xlUp).Row + 1
        .Cells(Ligne, 2) = Me.ComboBox1
        .Cells(Ligne, 3) = Me.ComboBox2
        .Cells(Ligne, 4) = Me.ComboBox3
      End With
     
    End Sub
    merci encore

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

Discussions similaires

  1. remplir un combobox en fonction d'un autre
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 17/07/2007, 17h19
  2. Réponses: 2
    Dernier message: 29/09/2006, 16h40
  3. Fonction INDIRECT avec variable sur n° de colonne
    Par mat.guillaume dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/08/2006, 18h04
  4. Réponses: 3
    Dernier message: 01/06/2006, 19h45
  5. Remplir un combobox en fonction d'un autre
    Par emkka dans le forum Composants VCL
    Réponses: 10
    Dernier message: 30/04/2006, 19h17

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