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 qui filtre une colonne de Tableau Nommé // à une valeur dans une autre colonne (et dédoublonne) [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut Combobox qui filtre une colonne de Tableau Nommé // à une valeur dans une autre colonne (et dédoublonne)
    Bonjour, toujours débutant mais avec un mois de pratique, j'ai créé un outil qui permet sans accéder à une feuille de calcul excel (sauf pour afficher des états générés par des TCD) et au travers de Userforms imbriqués de gérer clients/prestations/ et ... facturation ou plus exactement suivi de facturation.

    Ainsi j'arrive à quelque-chose comme ceci ou que j'aimerai résoudre comme cela, j'espère que ces deux captures d'écran seront plus parlantes qu'un long discours :

    Nom : Capture.PNG
Affichages : 498
Taille : 116,6 Ko

    Nom : Capture t_Invoices.PNG
Affichages : 357
Taille : 40,9 Ko

    Je reste très attaché aux tableaux nommés sur les conseils de Pierre Fauconnier que je remercie encore pour son aide dans mon précédent post sur ce forum car ils me permettent de faire faire par Excel des choses assez sophistiquées. Là je ne vois pas comment finaliser mon outil et n'ai pas trouvé sur le forum comment m'en sortir seul. Si quelqu'un peut m'aider à débloquer au moins ce combobox, je l'en remercie vivement.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut Fichier excel joint
    Bonjour, pour le cas où ce fichier pourrait clarifier mon précédent post. Cordialement

    (J'utilise Avast et Bitdefender et ils sont à jour)ToInvoice.xlsm

  3. #3
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut Aide souhaitée sur le dédoublonnage de la liste de choix...
    Bonjour,

    J'ai réussi à obtenir ce que je souhaitais sauf :

    - dédoublonner les valeurs du ComboBox
    (en effet si je dédoublonne je perds le filtrage ToInvoice = à 1)
    Il y a sûrement une autre façon de faire...

    - la facturette pdf ; mais ça je devrais finir par y arriver

    Par avance merci

    Voici mon code:

    formulaire
    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
    Option Explicit
     
    Private Sub cboChoice_Change()
      lblClientName.Caption = cboChoice.Value
      GetToInvoiceHT
    End Sub
     
    Private Sub cmdToInvoice_Click()
        mToInvoice.SaveInvoice tboInvoiceRef.Value, lblInvoiceDate.Caption, lblClientName.Caption, lblSigmaHT.Caption, lblPaid.Caption
        SetInvoiced
        Unload Me
        ShowFormToInvoice
    End Sub
     
    Function SetCboChoiceSource()
     
    Dim ligne As Integer: ligne = 2
     
    While (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value <> "")
      If ThisWorkbook.Worksheets("InPuts").Cells(ligne, 5).Value = 1 Then
      cboChoice.AddItem (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value)
      End If
      ligne = ligne + 1
    Wend
     
    End Function
    Function GetToInvoiceHT()
     
    Dim ligne As Integer: ligne = 2
    Dim sigma As Currency: sigma = 0
     
    While (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value <> "")
      If ThisWorkbook.Worksheets("InPuts").Cells(ligne, 5).Value = 1 And ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value = lblClientName.Caption Then
      sigma = sigma + (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 8).Value)
      End If
      ligne = ligne + 1
      lblSigmaHT.Caption = sigma
    Wend
     
    End Function
    Function SetInvoiced()
     
    Dim ligne As Integer: ligne = 2
     
    While (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value <> "")
      If ThisWorkbook.Worksheets("InPuts").Cells(ligne, 5).Value = 1 And ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value = lblClientName.Caption Then
       ThisWorkbook.Worksheets("InPuts").Cells(ligne, 5).Value = 0
       ThisWorkbook.Worksheets("InPuts").Cells(ligne, 6).Value = 1
       ThisWorkbook.Worksheets("InPuts").Cells(ligne, 11).Value = tboInvoiceRef.Value
      End If
      ligne = ligne + 1
    Wend
     
    End Function
     
    Function PrepareForm()
        SetCboChoiceSource
        cboChoice.Value = vbNullString
        tboInvoiceRef.Value = vbNullString
        lblInvoiceDate.Caption = Date
        lblClientName.Caption = vbNullString
        lblSigmaHT.Caption = vbNullString
        lblPaid.Caption = 0
    End Function
    module
    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
    Option Explicit
     
    Sub ShowFormToInvoice()
      Load ToInvoiceForm
      ToInvoiceForm.PrepareForm
      ToInvoiceForm.Show
      Unload ToInvoiceForm
    End Sub
     
    Function SaveInvoice(InvoiceRef As String, InvoiceDate As Date, ClientName As String, SigmaHT As Currency, Paid As Integer)
      ThisWorkbook.Worksheets("Invoices").Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
      ThisWorkbook.Worksheets("Invoices").Range("A2").Value = InvoiceRef
      ThisWorkbook.Worksheets("Invoices").Range("B2").Value = InvoiceDate
      ThisWorkbook.Worksheets("Invoices").Range("C2").Value = ClientName
      ThisWorkbook.Worksheets("Invoices").Range("D2").Value = SigmaHT
      ThisWorkbook.Worksheets("Invoices").Range("E2").Value = Paid
    End Function
    le fichier Excel
    ToInvoice.xlsm

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function SetCboChoiceSource()
     
    Dim ligne As Integer: ligne = 2
    Dim dico As Object: Set dico = CreateObject("Scripting.Dictionary")
    While (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value <> "")
      If ThisWorkbook.Worksheets("InPuts").Cells(ligne, 5).Value = 1 Then
      dico(ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value) = ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value
      End If
      ligne = ligne + 1
    Wend
    cboChoice.List = dico.keys
    End Function

  5. #5
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut 1000 mercis!
    J'étais en train de regarder le site de Mr. Boisgontier justement pour essayer de comprendre l'objet dictionnaire... Là je comprends plus vite
    Merci encore cher bon samaritain, ce qui fait 1001 mercis si je ne m'abuse.
    Eric

  6. #6
    Invité
    Invité(e)
    Par défaut
    un Dictionary possède une clé que tu peut utiliser c'est comme un clé primaire (clé univoque) il ne peut pas y en avoir deux identique!

  7. #7
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    un Dictionary possède une clé que tu peut utiliser c'est comme un clé primaire (clé univoque) il ne peut pas y en avoir deux identique!
    C'est très clair.
    Merci
    Eric

  8. #8
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    un Dictionary possède une clé que tu peut utiliser c'est comme un clé primaire (clé univoque) il ne peut pas y en avoir deux identique!
    Bonsoir Dysorthographie,

    Est-à-dire que tu me suggères de créer un dictionnaire pour gérer les InvoiceRef ?
    Ceci permet-il de fermer la porte aux doublons dès saisie d'une référence dans tboInvoiceRef ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    C'est ce que j'ai proposé au poste #4!

    Là je donnais une précision sur l'utilisation des dictionnaires.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut question subsidiaire
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function SetCboChoiceSource()
     
    Dim ligne As Integer: ligne = 2
    Dim dico As Object: Set dico = CreateObject("Scripting.Dictionary")
    While (ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value <> "")
      If ThisWorkbook.Worksheets("InPuts").Cells(ligne, 5).Value = 1 Then
      dico(ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value) = ThisWorkbook.Worksheets("InPuts").Cells(ligne, 1).Value
      End If
      ligne = ligne + 1
    Wend
    cboChoice.List = dico.keys
    End Function
    Cher Dysorthograprie, j'espère que je n'abuse pas de ton temps, mais considérant que Dictionary est un objet ActiveX, si ma contrainte était que mon code tourne aussi bien sous Windows que sous OSX, quelle autre voie explorerais-tu ?
    Merci d'avance pour tes lumières sur le sujet, Eric

  11. #11
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    J'utilise Mac et de temps en temps PC, pour aller sur les 2 plateformes il faut utiliser une collection et surtout éviter les code utilisant ActiveX et le DLL.
    La collection n'est pas aussi complet que le dictionnaire, mais c'est juste une autre gymnastique de codage pour arriver au même résultat.

    Edit : ajout :
    Je n'ai pas regardé ton code, mais tu peux déjà regarder dans la faq il y a un exemple concret traitant des doublons avec une collection.
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  12. #12
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Bonjour,

    J'utilise Mac et de temps en temps PC, pour aller sur les 2 plateformes il faut utiliser une collection et surtout éviter les code utilisant ActiveX et le DLL.
    La collection n'est pas aussi complet que le dictionnaire, mais c'est juste une autre gymnastique de codage pour arriver au même résultat.

    Je n'ai pas regardé ton code, mais tu peux déjà regarder dans la faq il y a un exemple concret traitant des doublons avec une collection.
    M
    Merci infiniment pour la réponse parfaitement claire comme d'habitude. Eric

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2013, 17h27
  2. [AC-2007] Comptage dans une zone de liste selon les valeurs d'une colonne
    Par lakhdar16 dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/07/2012, 11h11
  3. Réponses: 10
    Dernier message: 07/07/2011, 23h39
  4. Réponses: 3
    Dernier message: 05/08/2009, 00h34
  5. Réponses: 13
    Dernier message: 01/02/2006, 12h00

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