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 :

Listview et devis [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut Listview et devis
    Bonjour à tous

    dans un fichier excel, j'ai base de données constituées de prix composés de la sorte :
    Domaine, nature, Catégorie, n° de prix, libellé et prix

    un exemple :

    FOURNITURES/PANNEAUX CLASSIQUE/PJS/PJS01/24.50€

    A partir de cette base je veux créer des devis.

    On peut uliser des combo en cascade mais peut-être aussi utiliser les listview.

    Quelqu'un a t-il déjà travaillé sur un projet identique ?

    Si oui en utilisant quelle méthode ?

    je ne demande pas un projet tout fait mais des pistes
    cordialement

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Points : 191
    Points
    191
    Par défaut
    Bonjour,
    J'ai déjà fais quelque chose dans ce genre et j'avais effectivement utilisé des combobox en cascade.
    Faudrait que je regarde mais il est probable que j'ai utilisé une listbox ou listview pour faire un récap des items selectionnés avec les combobox.

    Bon courage
    Etienne

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Merci LETIENNE

    si tu retrouves suis preneur

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Points : 191
    Points
    191
    Par défaut
    Bonjour,
    Bon désolé j'avais un peu zappé, j'ai retrouvé la chose.
    Il faudra surement l'adapter à ta base, la mienne était très sommaire (la feuille 1 du classeur, avec possibilité pour l'utilisateur de la modifier, c'était pour un groupe de graphistes freelance)
    La mécanique:
    combobox pour selectionner une catégorie
    une fois le choix fait une combobox s'affiche pour choisir un element
    une fois le choix fait des quantités et prix par défaut s'affichent, il est possible de les modifier.
    par clic sur un bouton ajout l'élément est ajouté et mis dans une listbox avec 4 colonnes (element, nombre, prix unitaire, prix total). Un élément peut être retiré par double clic.
    à la fin possibilité de rajouter une remise globale.
    et un bouton export génère le devis dans une feuille de calcul.
    Il est possible de faire un export vers un template Word, ça ne s'appliquait pas à mon cas (retravaillé par le graphiste dans inDesign probablement).

    Voici à quoi ressemble le userform :
    Nom : Capture.PNG
Affichages : 222
Taille : 20,1 Ko
    et voici le 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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    Dim LiCat() As Integer
    Dim TabPrix() As Variant
    Dim LiElem() As Integer
    Dim Cible As Boolean
    Dim Valeur As String
    Dim reduc As Single
     
     
     
     
    Private Sub BoutonAjout_Click()
    'Ajout d ''un élément
    Dim i As Integer, fin As Boolean
    'Cas n°1 la liste est vide
    fin = False
    If ListBox1.ListCount = 0 Then
        'On ajoute la catégorie puis l'élément
        ListBox1.AddItem ComboCat.Value
        ListBox1.AddItem ComboElem.Value
        If LaUnit.Caption = "forfait" Then
            ListBox1.List(1, 1) = 1
        Else
            ListBox1.List(1, 1) = TextBox1.Value
        End If
        ListBox1.List(1, 2) = LaUnit.Caption
        ListBox1.List(1, 3) = LaPrix.Caption
    Else
    'Cas n°2 la liste n'est pas vide
    'On regarde si un élément de la même catégorie a déjà été entré
        For i = 0 To ListBox1.ListCount - 1
            'Si oui on ajoute l'élément en dessous
            If ComboCat.Value = ListBox1.List(i, 0) Then
                ListBox1.AddItem ComboElem.Value, i + 1
                If LaUnit.Caption = "forfait" Then
                    ListBox1.List(i + 1, 1) = 1
                Else
                    ListBox1.List(i + 1, 1) = TextBox1.Value
                End If
                ListBox1.List(i + 1, 2) = LaUnit.Caption
                ListBox1.List(i + 1, 3) = LaPrix.Caption
                'un booléen sert à indiquer que l'élément a été ajouté
                fin = True
            End If
        Next i
     
            'Si non on ajoute la catégorie et l'élément à la fin
        If fin = False Then
            ListBox1.AddItem ComboCat.Value
            ListBox1.AddItem ComboElem.Value
            If LaUnit.Caption = "forfait" Then
                ListBox1.List(ListBox1.ListCount - 1, 1) = 1
            Else
                ListBox1.List(ListBox1.ListCount - 1, 1) = TextBox1.Value
            End If
            ListBox1.List(ListBox1.ListCount - 1, 2) = LaUnit.Caption
            ListBox1.List(ListBox1.ListCount - 1, 3) = LaPrix.Caption
        End If
     
    End If
    'Calcul du total
     
    CalcTotal
     
    End Sub
     
    Sub CalcTotal()
    Dim Total As Double
    If ListBox1.ListCount = 0 Then
    Exit Sub
    End If
    Total = 0
    For i = 0 To ListBox1.ListCount - 1
        If Not IsNull(ListBox1.List(i, 3)) Then
        Total = Total + CDbl(ListBox1.List(i, 3))
        End If
    Next i
    If CheckBox1.Value = True And IsNumeric(TextBox2.Value) And TextBox2.Value <> 0 Then
        Dim taux As Single
        taux = 1 - TextBox2.Value / 100
        reduc = Total * (1 - taux)
        Total = Int(Total * taux)
    End If
    LaPrixTotal.Caption = Total & "€"
    End Sub
     
    Private Sub BoutonExport_Click()
    'Ajout des lignes de commentaires à la listbox
    'Pour chaque ligne de la listbox en partant du bas on cherche dans le tableau l'élément correspondant
    'si l'indice vaut 1 on insère dans la listbox tous les élément indicés 2 suivants
    Dim i, j, n, k As Integer
    For i = ListBox1.ListCount - 1 To 0 Step -1
      For j = 1 To 123
        If ListBox1.List(i, 0) = TabPrix(j, 2) Then
            If j = 117 Then
                For k = 1 To 6
                    ListBox1.AddItem TabPrix(j + k, 2), i + k
                Next k
            Else
                n = j + 1
                While TabPrix(n, 1) = 2
                    ListBox1.AddItem TabPrix(n, 2), i + n - j
                    n = n + 1
                Wend
            End If
        End If
      Next j
    Next i
    'Ajout de la ligne total
    If CheckBox1.Value = True And IsNumeric(TextBox2.Value) Then
        ListBox1.AddItem "Remise exceptionnelle -" & TextBox2.Value & " %"
        ListBox1.List(ListBox1.ListCount - 1, 3) = Int(reduc)
    End If
    ListBox1.AddItem "Total"
    ListBox1.List(ListBox1.ListCount - 1, 3) = LaPrixTotal.Caption
     
     
    ThisWorkbook.Sheets("Export").Cells.Clear
    Dim ligne As Integer
    ligne = ListBox1.ListCount
    With ThisWorkbook.Sheets("Export")
    .Range(.Cells(2, 2), .Cells(1 + ligne, 5)) = ListBox1.List()
    .Columns("E:E").NumberFormat = "#,##0.00 $"
    .Copy
    End With
     
     
    End Sub
     
    Private Sub CheckBox1_Click()
    CalcTotal
     
    End Sub
     
    Private Sub ComboCat_Change()
    Dim ligne As Integer
    LaElem.Visible = True
    ComboElem.Clear
    ligne = LiCat(ComboCat.ListIndex + 1) + 1
    ComboElem.Visible = True
    ReDim LiElem(1 To 1)
    Do
    If TabPrix(ligne, 1) = 1 Then
        n = n + 1
            ReDim Preserve LiElem(1 To n)
        'on ajoute le texte de la catégorie dans la liste de catégories
            ComboElem.AddItem TabPrix(ligne, 2)
        'on stock le numéro de la ligne pour retrouver rapidement les éléments
            LiElem(n) = ligne
    End If
    ligne = ligne + 1
    If ligne = 124 Then Exit Sub
    Loop Until TabPrix(ligne, 1) = 0
     
    End Sub
     
    Private Sub ComboElem_Change()
    If Not ComboElem.ListIndex = -1 Then
        LaPrixUnitaire.Caption = TabPrix(LiElem(ComboElem.ListIndex + 1), 6)
        LaPrixUnitaire.Visible = True
        TextBox1.Value = TabPrix(LiElem(ComboElem.ListIndex + 1), 4)
        ScrollBar1.Value = CDbl(TextBox1.Value) * 10
        TextBox1.Visible = True
        ScrollBar1.Visible = True
        LaUnit.Caption = TabPrix(LiElem(ComboElem.ListIndex + 1), 3)
        LaUnit.Visible = True
        Label4.Visible = True
        Label1.Visible = True
        LaPrix = CStr(CDbl(TextBox1.Value) * CInt(LaPrixUnitaire.Caption))
        BoutonAjout.Visible = True
        Label5.Visible = True
        Label6.Visible = True
    End If
    End Sub
     
    Private Sub ScrollBar1_Change()
    TextBox1.Value = ScrollBar1.Value / 10
    LaPrix = CStr(CDbl(TextBox1.Value) * CInt(LaPrixUnitaire.Caption))
    End Sub
     
    Private Sub TextBox1_Change()
    ScrollBar1.Value = CDbl(TextBox1.Value) * 10
    LaPrix = CStr(CDbl(TextBox1.Value) * CInt(LaPrixUnitaire.Caption))
     
     
    End Sub
     
    Private Sub TextBox2_Change()
    CalcTotal
    End Sub
     
    Private Sub UserForm_Initialize()
    'Entrée de la base de donnée dans une variable pour limiter les échanges excel<->vba
     
    'La BDD fait 123 lignes et 6 colonnes (dont une cachée)
    ReDim TabPrix(1 To 123, 1 To 6)
    TabPrix = ThisWorkbook.Sheets("BDD").Range("B2:G124").Value
    'Initialisation de la liste catégories
     
    Dim i, n As Integer
     
    ReDim LiCat(1 To 1)
    n = 0
    For i = 1 To 123
        'Si la première colonne contient 0, c'est une catégorie
        If TabPrix(i, 1) = 0 Then
        'on ajoute une catégorie
            n = n + 1
            ReDim Preserve LiCat(1 To n)
        'on ajoute le texte de la catégorie dans la liste de catégories
            ComboCat.AddItem TabPrix(i, 2)
        'on stock le numéro de la ligne pour retrouver rapidement les éléments
            LiCat(n) = i
        End If
    Next i
    End Sub
     
    Private Sub Listbox1_Dblclick(ByVal Cancel As MSForms.ReturnBoolean)
     
        ListBox1.RemoveItem (ListBox1.ListIndex)
    End Sub

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Bonjour Letienne

    Merci beaucoup pour ces infos
    je vais examiner ton code et le fonctionnement de l'usf, les différentes variables et objets
    cordialement

    tu n'aurais pas ton fichier par hasard
    aucun souci de confidentialité, ....
    merci
    @+

  6. #6
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 112
    Points : 191
    Points
    191
    Par défaut
    Ouais c'est peut être plus simple.
    Sachant que le code a été un peu baclé (genre la longueur de la base est en dur), il reste du boulot je pense.
    voici le fichier
    Devis.xlsm

  7. #7
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonsoir latienne,Pierre67
    voici une version a base de listview que j'ai commencer il y a quelque mois de cela et que je n'ai jamais finie parce que je trouvais qu'il s’alourdissait pour devenir une usine a gaz
    mais si piere67 peut en tirer quelque chose ,c'est fait pur ça


    Pascal

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    je vous remercie tous les 2

    je vais explorer et continuer mon projet.
    je suis sûr d'y trouver des choses intéressantes
    merci

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

Discussions similaires

  1. [Kylix] prob listview
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 22/10/2002, 21h37
  2. Une gauge dans un ListView
    Par Thom@s dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/10/2002, 10h32
  3. listview ??
    Par Galdarion dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/09/2002, 17h02
  4. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  5. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42

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