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 :

Application d'un taux selon condition [XL-2007]


Sujet :

Macros et VBA Excel

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir mercatog,

    Etant assez limiter au niveau du vba je ne sais pas comment démarrer, je me suis lancée dans un premier temps avec l'userform en image ci-dessus mais apparemment je me complique la vie.

    Je ne connais pas du tout listbox ou listview, tout ce que je peux dire c'est que je dois saisir les informations complémentaires pour l'article, le prix et sa quantité. Tient, je l'avais oublié celle-ci ! Le reste en ce qui concerne les combobox etaient en relation avec la feuille nommée listes

    De quelle manières je peux m'y prendre pour avoir ce que je recherchait au départ ?

    La nuit porte conseil, je vous souhaite une bonne nuit et encore merci

    Stephanie

  2. #22
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Le principe est de créer une seule rangée de saisie qui sera validée par un bouton. Les données saisies seront affichées dans une listview par exemple.
    Image exemple suivante
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour mercatog et au forum,

    mercatog, j'ai suivi vos conseils mais je bloque sur un point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Marge_Change()
      If Not IsNumeric(PrixM) And PrixM <> "." Then PrixM = "": Exit Sub
      PrixM = Format((sTotal * (CDbl(Marge.Value)) / 100), "0.00")
      PrixM = Replace(PrixM, ".", ",")
    End Sub
    Le calcul ne s'effectue pas

    Savez-vous pourquoi ?

    Autre chose, j'ai utilisé une listbox, serait-il plus pratique ou plus efficace avec une listview car je souhaiterais après que les lignes soient colorées 1 sur 2.

    Merci

    Stephanie
    Fichiers attachés Fichiers attachés

  4. #24
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Voila un début d'exemple (à compléter et adapter) utilisant une ListView nommé LISTING
    PS: J'ai renommé les contrôles
    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
    Option Explicit
    'Liste des contrôles de saisie
    Const LST As String = "cboCategorie cboArticle txtInfoArticle txtQte txtPrix cboMarge txtPrixM cboPort txtPrixVte"
    Dim TotPA As Double, TotPV As Double
     
    Private Sub UserForm_Initialize()
     
    With Feuil3
        Me.cboCategorie.List = .Range(.Cells(2, 1), .Cells(.Rows.Count, "A").End(xlUp)).Value
        Me.cboArticle.List = .Range(.Cells(2, 2), .Cells(.Rows.Count, "B").End(xlUp)).Value
        Me.cboMarge.List = .Range(.Cells(2, 3), .Cells(.Rows.Count, "C").End(xlUp)).Value
        Me.cboPort.List = .Range(.Cells(2, 4), .Cells(.Rows.Count, "D").End(xlUp)).Value
    End With
     
    'Définition des propriétés de la listview
    With Me.LISTING
        .Left = 50
        .Width = 700
        .HideColumnHeaders = False
        .View = lvwReport
        With .ColumnHeaders
            .Add , , "Catégorie", 100
            .Add , , "Article", 100
            .Add , , "Informations article", 165
            .Add , , "Qté", 50
            .Add , , "PU", 60
            .Add , , "Marge", 50
            .Add , , "PU (margé)", 60
            .Add , , "Port", 50
            .Add , , "PVte", 60
        End With
    End With
    End Sub
     
    Private Sub txtPrix_Change()
     
    Select Case txtPrix
        Case Is < 20: cboMarge.Value = 1.4
        Case 21 To 49: cboMarge.Value = 1.3
        Case 50 To 79: cboMarge.Value = 1.25
        Case 80 To 119: cboMarge.Value = 1.2
        Case 120 To 149: cboMarge.Value = 1.15
        Case Is >= 150: cboMarge.Value = 1.1
    End Select
    End Sub
     
    Private Sub cboMarge_Change()
     
    Me.txtPrixM = Valeur(Me.txtPrix) * Valeur(Me.cboMarge)
    TotPA = TotPA + Valeur(Me.txtQte) * Valeur(Me.txtPrixM)
    End Sub
     
    Private Sub txtPrixM_Change()
     
    Me.txtPrixM = Valeur(Me.txtPrix) * Valeur(Me.cboMarge)
    Me.txtPrixVte = Valeur(Me.txtPrixM) * Valeur(Me.cboPort)
    End Sub
     
    Private Sub cboPort_Change()
     
    Me.txtPrixVte = Valeur(Me.txtPrixM) * Valeur(Me.cboPort)
    TotPV = TotPV + Valeur(Me.txtQte) * Valeur(Me.txtPrixVte)
    End Sub
     
    Private Sub Liste_Click()
    Dim i As Byte
    Dim Tb
     
    If Not Vide Then
        Tb = Split(LST)
     
        With Me.LISTING
            .ListItems.Add , , Me.Controls(Tb(0)).Value
            For i = 1 To UBound(Tb)
                .ListItems(.ListItems.Count).ListSubItems.Add , , Me.Controls(Tb(i)).Value
            Next i
            RAZ
            Me.txtTPU = TotPA
        End With
    Else
        MsgBox "Remplir les données manquantes"
    End If
    End Sub
     
    Private Sub RAZ()
    Dim i As Byte
    Dim Tb
     
    Tb = Split(LST)
    For i = 0 To UBound(Tb)
        Me.Controls(Tb(i)).Value = ""
    Next i
    End Sub
     
    Private Function Vide() As Boolean
    Dim i As Byte
    Dim Tb
     
    Tb = Split(LST)
    For i = 0 To UBound(Tb)
        If Me.Controls(Tb(i)).Value = "" Then
            Vide = True
            Exit Function
        End If
    Next i
    End Function
     
    Private Function Valeur(ByVal Str As String) As Double
     
    Valeur = Val(Replace(Str, ",", "."))
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour mercatog et au forum,

    Mercatog, je vous remercie beaucoup pour votre code,

    En glanant des informations par ici et par là, entre autre " http://silkyroad.developpez.com/VBA/ListView/#LII-E ", j'ai pu avancer un peu mais je me retrouve avec d'autres problèmes
    - dès que je clique dans listview, je voudrais qu'au clic d'une ligne dans listview les informations s'affichent dans les ComboBox et Textbox afin de pouvoir apporter des modifications et valider la maj.

    - une erreur se produit et souligne en jaune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Controls("TextBox" & i) = LISTING.ListItems(LISTING.SelectedItem.Index).SubItems(i)
    - une 2ème erreur arrive lorsque je clique sur le bouton vert en haut à droite de la listview, nommé "Liste"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If Me.Controls(Tb(i)).Value = "" Then
    souligné en jaune aussi.

    1ère Question:
    Qu'est-ce-que j'ai pu faire comme erreur ?

    2ème Question:
    Est-ce que le reste vous parait convenable ?

    3ème Question:
    Peu-ton optimiser ce que j'ai mis ?

    Merci de votre précieuse aide

    Stephanie
    Fichiers attachés Fichiers attachés

  6. #26
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    1. Renomme la textebox Information articles comme ceci txtInfoArticle

    2. Ajoute cette ligne (.FullRowSelect) dans Userform_Initialize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            'Définition des propriétés de la listview
            With Me.LISTING
                .Left = 50
                .Width = 760
                .HideColumnHeaders = False
                .View = lvwReport
                .FullRowSelect = True
    3. Déclare une variable globale (en haut du module)
    La valeur de cette variable sera utilisé pour différencier la modification d'une ligne (Indx>0) ou d'ajout d'une ligne (Indx=0)

    le code de validation par le biais du bouton Liste devient comme ceci
    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
    Private Sub Liste_Click()
    Dim Tb
     
    If Not Vide Then
        Tb = Split(LST)
     
        With Me.LISTING
            If Indx = 0 Then
                'Ajout
                .ListItems.Add , , Me.Controls(Tb(0)).Value
                For i = 1 To UBound(Tb)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Me.Controls(Tb(i)).Value
                Next i
            Else
                'Modification
                .ListItems(Indx).Text = Me.Controls(Tb(0)).Value
                For i = 1 To UBound(Tb)
                    .ListItems(Indx).SubItems(i) = Me.Controls(Tb(i)).Value
                Next i
     
            End If
            RAZ
            Indx = 0
            Me.txtTPU = TotPA
        End With
    Else
        MsgBox "Remplir les données manquantes"
    End If
    End Sub
    4. LISTING_Click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub LISTING_Click()
    Dim Tb
    Dim i As Byte
     
    Tb = Split(LST)
    With LISTING
        Indx = .SelectedItem.Index
        Me.cboCategorie = .ListItems(Indx)
        For i = 1 To UBound(Tb)
            Me.Controls(Tb(i)) = .ListItems(Indx).SubItems(i)
        Next i
    End With
    End Sub
    Il reste du travail mais c'est déjà méthodique
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    bonjour mercatog et au forum,

    Mercatog, je vous remercie, je vais continuer

    Puis-je vous re-sollicitez à nouveau si j'ai d'autres problèmes sans abuser de votre temps sachant qu'il fait beau ?

    Merci

    Stephanie

  8. #28
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bien sûr le forum est là pour s'entraider entre les membres. Toutes tes questions sont les bienvenues.

    Sinon, il faudra peut être plus d'organisation dans tes derniers codes, mieux doucement mais sûrement.

    Ci-joint le code complet refait (à l'exception de l'enregistrement sur la feuille)

    PS: Peut être il faudra quelque part adapter à ton besoin (j'ai refais le code selon ma compréhension)
    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
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    Option Explicit
     
    'Liste des contrôles de saisie
    Const LST As String = "cboCategorie cboArticle txtInfoArticle txtQte txtPrix cboMarge txtPrixM cboPort txtPrixVte txtPrixVteHT"
    Const TauxTVA As Double = 0.196
    Dim TotPA As Double, TotPV As Double
    Dim Indx As Integer
     
    '=== Initialisation: remplissage des combo, définition et remplissage de la listview et des totaux
    Private Sub UserForm_Initialize()
    Dim Last As Long, y As Long
    Dim i As Byte
    Dim Tb
     
    'Remplissage des ComboBox
    With Feuil3
        Me.cboCategorie.List = .Range(.Cells(2, 1), .Cells(.Rows.Count, "A").End(xlUp)).Value
        Me.cboArticle.List = .Range(.Cells(2, 2), .Cells(.Rows.Count, "B").End(xlUp)).Value
        Me.cboMarge.List = .Range(.Cells(2, 3), .Cells(.Rows.Count, "C").End(xlUp)).Value
        Me.cboPort.List = .Range(.Cells(2, 4), .Cells(.Rows.Count, "D").End(xlUp)).Value
    End With
     
    Me.cboMarge.Enabled = False
    Me.txtPrixM.Enabled = False
    Me.txtPrixVte.Enabled = False
    Me.txtPrixVteHT.Enabled = False
     
    'Définition des propriétés de la listview
    With Me.LISTING
        .Left = 50
        .Width = 760
        .HideColumnHeaders = False
        .View = lvwReport
        .FullRowSelect = True
        With .ColumnHeaders
            .Add , , "Catégorie", 100
            .Add , , "Article", 100
            .Add , , "Informations article", 165
            .Add , , "Qté", 50
            .Add , , "PU TTC", 60
            .Add , , "Marge", 50
            .Add , , "PU (margé)", 60
            .Add , , "Port", 50
            .Add , , "PVte TTC", 60
            .Add , , "PVte HT", 60
        End With
    End With
     
    'Remplissage de la listview
    With Feuil2
        Last = .Cells(.Rows.Count, "A").End(xlUp).Row
        If Last >= 4 Then
            Tb = .Range("A4:J" & Last)
            With Me.LISTING
                For y = 1 To UBound(Tb, 1)
                    .ListItems.Add y, , Tb(y, 1)
                    For i = 2 To 10
                        .ListItems(y).ListSubItems.Add , , Tb(y, i)
                    Next i
                Next y
            End With
        End If
    End With
    'Remplissage des totaux
    AjouteTotal
    End Sub
     
    '=== Rapatriement des données de la ligne cliquée de la listview
    Private Sub LISTING_Click()
    Dim i As Byte
    Dim Tb
     
    With Me.LISTING
        If .ListItems.Count > 0 Then
            Tb = Split(LST)
            Indx = .SelectedItem.Index
            Me.cboCategorie = .ListItems(Indx)
            For i = 1 To UBound(Tb)
                Me.Controls(Tb(i)) = .ListItems(Indx).SubItems(i)
            Next i
        End If
    End With
    End Sub
     
    '=== Ajout ou modification des données saisies dans la listview
    Private Sub Liste_Click()
    Dim Tb
    Dim i As Byte
     
    If Not Vide Then
        Tb = Split(LST)
     
        With Me.LISTING
            If Indx = 0 Then
                'Ajout
                .ListItems.Add , , Me.Controls(Tb(0)).Value
                For i = 1 To UBound(Tb)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Me.Controls(Tb(i)).Value
                Next i
            Else
                'Modification
                .ListItems(Indx).Text = Me.Controls(Tb(0)).Value
                For i = 1 To UBound(Tb)
                    .ListItems(Indx).SubItems(i) = Me.Controls(Tb(i)).Value
                Next i
            End If
            RAZ
            Me.txtTPU = TotPA
        End With
        'Actualisation des totaux
        AjouteTotal
    Else
        MsgBox "Remplir les données manquantes"
    End If
    End Sub
     
    '=== Supprime la ligne de la listview
    Private Sub Enleve_Click()
    Dim Lx As Integer
     
    If Indx > 0 Then
        With LISTING.ListItems
            For Lx = 1 To .Count
                If .Item(Lx).Selected Then
                    .Remove Lx
                    Exit For
                End If
            Next Lx
        End With
        RAZ
        AjouteTotal
    End If
    End Sub
     
    '=== Au changement du PU, les autres controles sont mis à jour
    Private Sub txtPrix_Change()
    Dim Marge As Double
     
    Select Case Valeur(Me.txtPrix.Value)
        Case Is < 20: Marge = 1.4
        Case 21 To 49: Marge = 1.3
        Case 50 To 79: Marge = 1.25
        Case 80 To 119: Marge = 1.2
        Case 120 To 149: Marge = 1.15
        Case Is >= 150: Marge = 1.1
    End Select
    cboMarge.Value = Marge
     
    Me.txtPrixM = Format(Valeur(Me.txtPrix) * Marge, "0.00")
     
    Me.txtPrixM = Format(Valeur(Me.txtPrix) * Marge, "0.00")
    Me.txtPrixVte = Format(Valeur(Me.txtPrixM) + Valeur(Me.cboPort), "0.00")
    Me.txtPrixVteHT = Format(Valeur(txtPrixVte) / (1 + Valeur(TauxTVA)), "0.00")
    End Sub
     
    '=== Recalcule du PV en fonction du port
    Private Sub cboPort_Change()
     
    Me.txtPrixVteHT = Format(Valeur(txtPrixVte) / (1 + TauxTVA), "0.00")
    End Sub
     
    '=== Recalcul du PVHT
    Private Sub txtPrixVte_Change()
     
    Me.txtPrixVteHT = Format(Valeur(txtPrixVte) / (1 + TauxTVA), "0.00")
    End Sub
     
    '=== Vidage des champs de saisie
    Private Sub RAZ()
    Dim i As Byte
    Dim Tb
     
    Tb = Split(LST)
    For i = 0 To UBound(Tb)
        Me.Controls(Tb(i)).Value = ""
    Next i
    Indx = 0
    End Sub
     
    '=== Fonction de contrôle si l'un des champs de saisie est vide
    Private Function Vide() As Boolean
    Dim i As Byte
    Dim Tb
     
    Tb = Split(LST)
    For i = 0 To UBound(Tb)
        If Me.Controls(Tb(i)).Value = "" Then
            Vide = True
            Exit Function
        End If
    Next i
    End Function
     
    '=== Fonction de transformation d'un nombre en format texte vers un un double
    Private Function Valeur(ByVal Str As String) As Double
     
    Valeur = Val(Replace(Str, ",", "."))
    End Function
     
    '=== Procédure de recalcul des totaux
    Private Sub AjouteTotal()
    Dim Tb(1 To 7) As Double
    Dim Lx As Integer
    Dim i As Byte
     
    With Me.LISTING.ListItems
        If .Count > 0 Then
            For Lx = 1 To .Count
                With .Item(Lx)
                    'Tb(1):Qté,Tb(2):PU, Tb(3):Marge,Tb(4):PUMargé, Tb(5): Port, Tb(6):PV, Tb(7): PVHT
                    For i = 1 To 7
                        Tb(i) = Tb(i) + Valeur(.SubItems(i + 2))
                    Next i
                End With
            Next Lx
            Me.txtTPU = Format(Tb(2), "0.00")
            Me.TMarge = Format(Tb(4) - Tb(2), "0.00")
            Me.TPVte = Format(Tb(6), "0.00")
            Me.TPVteHT = Format(Tb(7), "0.00")
            TotPA = Tb(1) * Tb(4)
            TotPV = Tb(1) * Tb(6)
        End If
    End With
    End Sub
     
    '=== Fermeture de l'userform
    Private Sub Annuler_Click()
     
    Unload Me
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #29
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir Mercatog et le forum

    Mercatog, je vous suis infiniment reconnaissante car avec ce que vous faites pour nous aider et les autres aussi, j'avance dans la création d'userform, il y'a quelques mois c'était comme si on me parlait chinois bien que je n'ai rien contre eux.

    Ceci dit, il y a des choses que je ne comprends pas beaucoup,
    comment fonctionne "for each etc." malgré mes lectures auprès du site que je citais dans précédent post et ailleurs.

    A force de voir des exemples et de manipuler moi même ce genre de code, je finirais par y arriver, pour le moment je vous demande encore un peu de votre temps.

    Dans le code ci-dessous
    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
    Private Sub Enregistrer_Click()
     Dim Bl As Byte
    Dim LG As Long
     Bl = 3
     
     With LISTING
       For LG = 1 To .ListItems.Count
       Cells(LG + Bl, "A") = Valeur(.ListItems(LG).ListSubItems(1))
       Cells(LG + Bl, "B") = Valeur(.ListItems(LG).ListSubItems(2))
       Cells(LG + Bl, "C") = Valeur(.ListItems(LG).ListSubItems(3))
       Cells(LG + Bl, "D") = Valeur(.ListItems(LG).ListSubItems(4))
       Cells(LG + Bl, "E") = Valeur(.ListItems(LG).ListSubItems(5))
       Cells(LG + Bl, "F") = Valeur(.ListItems(LG).ListSubItems(6))
       Cells(LG + Bl, "G") = Valeur(.ListItems(LG).ListSubItems(7))
       Cells(LG + Bl, "H") = Valeur(.ListItems(LG).ListSubItems(8))
       Cells(LG + Bl, "I") = Valeur(.ListItems(LG).ListSubItems(9))
       Cells(LG + Bl, "J") = Valeur(.ListItems(LG).ListSubItems(10))
       Next
    End With
    End Sub
    une erreur est provoquée sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Cells(LG + Bl, "A") = CDbl(.ListItems(LG).ListSubItems(1))
    et la souligne en jaune

    J'ai pris par ci par la les infos mais je dois surement tromper quelque part et ne pas comprendre la chose !

    Pouvez-vous m'expliquer comment ça fonctionne et pourquoi ceci ne marche pas ?

    Merci d'avance

    Stephanie

  10. #30
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 876
    Points : 28 821
    Points
    28 821
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    S'il y a une erreur il y a en principe un message qui l'accompagne. Qu'est-ce qu'il dit ?
    Ceci dit sans m'avancer, il est possible qu'il manque l'objet feuille où se trouve la cellule dont question dans Cells(LG + Bl ,"A")
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorkSheets("Toto").Cells(LG + Bl ,"A") = CDbl(.ListItems(LG).ListSubItems(1))
    Il suffit que la feuille ne soit pas active pour provoquer une erreur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir mercatog, corona et au forum,

    Désolé, l'erreur provoquée
    "Erreur d'execution '9': L'indice n'appartient pasz à la selection."

    Corona, j'ai mis ceci
    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
    Private Sub Enregistrer_Click()
    Dim Bl As Byte
    Dim LG As Long
    Bl = 3
     
    With LISTING
       For LG = 1 To .ListItems.Count
       Worksheets("Feuil2").Cells(LG + Bl, "A") = Valeur(.ListItems(LG).ListSubItems(1))
       Worksheets("Feuil2").Cells(LG + Bl, "B") = Valeur(.ListItems(LG).ListSubItems(2))
       Worksheets("Feuil2").Cells(LG + Bl, "C") = Valeur(.ListItems(LG).ListSubItems(3))
       Worksheets("Feuil2").Cells(LG + Bl, "D") = Valeur(.ListItems(LG).ListSubItems(4))
       Worksheets("Feuil2").Cells(LG + Bl, "E") = Valeur(.ListItems(LG).ListSubItems(5))
       Worksheets("Feuil2").Cells(LG + Bl, "F") = Valeur(.ListItems(LG).ListSubItems(6))
       Worksheets("Feuil2").Cells(LG + Bl, "G") = Valeur(.ListItems(LG).ListSubItems(7))
       Worksheets("Feuil2").Cells(LG + Bl, "H") = Valeur(.ListItems(LG).ListSubItems(8))
       Worksheets("Feuil2").Cells(LG + Bl, "I") = Valeur(.ListItems(LG).ListSubItems(9))
       Worksheets("Feuil2").Cells(LG + Bl, "J") = Valeur(.ListItems(LG).ListSubItems(10))
       Next
    'Range("N4") = Valeur(Me.txtTPU)
    'Range("O4") = Valeur(Me.TMarge)
    'Range("P4") = Valeur(Me.TPVte)
    'Range("Q4") = Valeur(Me.TPVteHT)
      End With
      'Unload Me
    End Sub
    toujours la même erreur !

    Avec
    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
    Private Sub Enregistrer_Click()
    Dim Bl As Byte
    Dim LG As Long
    Bl = 3
    With Feuil2
     'Range("B28:J35,J36:J41").ClearContents
      With LISTING
       For LG = 1 To .ListItems.Count
       Cells(LG + Bl, "A") = Valeur(.ListItems(LG).ListSubItems(1))
       Cells(LG + Bl, "B") = Valeur(.ListItems(LG).ListSubItems(2))
       Cells(LG + Bl, "C") = Valeur(.ListItems(LG).ListSubItems(3))
       Cells(LG + Bl, "D") = Valeur(.ListItems(LG).ListSubItems(4))
       Cells(LG + Bl, "E") = Valeur(.ListItems(LG).ListSubItems(5))
       Cells(LG + Bl, "F") = Valeur(.ListItems(LG).ListSubItems(6))
       Cells(LG + Bl, "G") = Valeur(.ListItems(LG).ListSubItems(7))
       Cells(LG + Bl, "H") = Valeur(.ListItems(LG).ListSubItems(8))
       Cells(LG + Bl, "I") = Valeur(.ListItems(LG).ListSubItems(9))
       Cells(LG + Bl, "J") = Valeur(.ListItems(LG).ListSubItems(10))
       Next
    Range("N4") = Valeur(Me.txtTPU)
    Range("O4") = Valeur(Me.TMarge)
    Range("P4") = Valeur(Me.TPVte)
    Range("Q4") = Valeur(Me.TPVteHT)
      End With
    End With
      'Unload Me
    End Sub
    Erreur d'execution '35600': Index hors limites et dernières lignes soulignée en jaune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Cells(LG + Bl, "J") = Valeur(.ListItems(LG).ListSubItems(10))
    Merci

    Stephanie

  12. #32
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Attention, tu n'as pas ListSubItems(10), tu n'as que 9 et non 10
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #33
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Essaies comme ceci
    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
    Private Sub Enregistrer_Click()
    Dim Bl As Byte, i As Byte
    Dim Lg As Integer
     
    Bl = 3                                             'pour la première ligne d'écriture
    With Worksheets("Prix")
        .Range("B28:J35,J36:J41").ClearContents 'POURQUOI CETTE PLAGE?????????
        For Lg = 1 To Me.LISTING.ListItems.Count
            .Cells(Lg + Bl, 1) = Me.LISTING.ListItems(Lg).Text    'Categorie
            For i = 1 To 9
                .Cells(Lg + Bl, i + 1) = Me.LISTING.ListItems(Lg).ListSubItems(i)
            Next i
        Next Lg
        .Range("N4") = Valeur(Me.txtTPU)
        .Range("O4") = Valeur(Me.TMarge)
        .Range("P4") = Valeur(Me.TPVte)
        .Range("Q4") = Valeur(Me.TPVteHT)
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #34
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir mercatog, corona et au forum,

    Avec
    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
    Private Sub Enregistrer_Click()
    Dim Bl As Byte, i As Byte
    Dim Lg As Integer
     
    Bl = 3                                             'pour la première ligne d'écriture
    With Feuil2
        For Lg = 1 To .ListItems.Count
            .Cells(Lg + Bl, 1) = Me.LISTING.ListItems(Lg).Text    'Categorie
            For i = 1 To 9
                .Cells(Lg + Bl, i + 1) = Me.LISTING.ListItems(Lg).ListSubItems(i)
            Next i
        Next Lg
        .Range("N4") = Valeur(Me.txtTPU)
        .Range("O4") = Valeur(Me.TMarge)
        .Range("P4") = Valeur(Me.TPVte)
        .Range("Q4") = Valeur(Me.TPVteHT)
    End With
    End Sub
    erreur provoquée "Erreur de compilation: Membre de méthode ou de données introuvable"

    est selectionné dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         For Lg = 1 To .ListItems.Count
    Merci

    Stephanie

  15. #35
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Catégorie: Me.LISTING.ListItems(Lg).Text

    Article: .ListItems(LG).ListSubItems(1)

    ...etc


    EDIT

    En réponse, regarde qu'il y avait oubli de Me.LISTING

    Cette ligne devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        For Lg = 1 To Me.LISTING.ListItems.Count
    PS: J'ai l'impression qui tu es désormais dans la hâte sans prendre le temps de comprendre et de développer les idées. Malheureusement ce n'était pas le cas au début.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #36
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ci-joint code légèrement modifié (à adapter au cas où les quantités seront différentes de 1)

    PS: J'ai ajouté une variable Modif pour indiquer si des changement ont été enregistrés sur la feuille Prix ou non.

    PS2: J'efface les données de la feuille Prix avant chaque enregistrement des données de la listview

    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
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    Option Explicit
     
    'Liste des contrôles de saisie
    Const LST As String = "cboCategorie cboArticle txtInfoArticle txtQte txtPrix cboMarge txtPrixM cboPort txtPrixVte txtPrixVteHT"
    Const TauxTVA As Double = 0.196
    Dim TotPA As Double, TotPV As Double
    Dim Modif As Boolean                               'Pour contrôler si une modification a été enregitsrée ou non
    Dim Indx As Integer
     
    '=== Initialisation: remplissage des combo, définition et remplissage de la listview et des totaux
    Private Sub UserForm_Initialize()
    Dim Last As Long, y As Long
    Dim i As Byte
    Dim Tb
     
    'Remplissage des ComboBox
    With Feuil3
        Me.cboCategorie.List = .Range(.Cells(2, 1), .Cells(.Rows.Count, "A").End(xlUp)).Value
        Me.cboArticle.List = .Range(.Cells(2, 2), .Cells(.Rows.Count, "B").End(xlUp)).Value
        Me.cboMarge.List = .Range(.Cells(2, 3), .Cells(.Rows.Count, "C").End(xlUp)).Value
        Me.cboPort.List = .Range(.Cells(2, 4), .Cells(.Rows.Count, "D").End(xlUp)).Value
    End With
     
    Me.cboMarge.Enabled = False
    Me.txtPrixM.Enabled = False
    Me.txtPrixVte.Enabled = False
    Me.txtPrixVteHT.Enabled = False
     
    'Définition des propriétés de la listview
    With Me.LISTING
        .Left = 50
        .Width = 760
        .HideColumnHeaders = False
        .View = lvwReport
        .FullRowSelect = True
        With .ColumnHeaders
            .Add , , "Catégorie", 100
            .Add , , "Article", 100
            .Add , , "Informations article", 165
            .Add , , "Qté", 50
            .Add , , "PU TTC", 60
            .Add , , "Marge", 50
            .Add , , "PU (margé)", 60
            .Add , , "Port", 50
            .Add , , "PVte TTC", 60
            .Add , , "PVte HT", 60
        End With
    End With
     
    'Remplissage de la listview
    With Feuil2
        Last = .Cells(.Rows.Count, "A").End(xlUp).Row
        If Last >= 4 Then
            Tb = .Range("A4:J" & Last)
            With Me.LISTING
                For y = 1 To UBound(Tb, 1)
                    .ListItems.Add y, , Tb(y, 1)
                    For i = 2 To 10
                        .ListItems(y).ListSubItems.Add , , Tb(y, i)
                    Next i
                Next y
            End With
        End If
    End With
    'Remplissage des totaux
    AjouteTotal
    End Sub
     
    '=== Rapatriement des données de la ligne cliquée de la listview
    Private Sub LISTING_Click()
    Dim i As Byte
    Dim Tb
     
    With Me.LISTING
        If .ListItems.Count > 0 Then
            Tb = Split(LST)
            Indx = .SelectedItem.Index
            Me.cboCategorie = .ListItems(Indx)
            For i = 1 To UBound(Tb)
                Me.Controls(Tb(i)) = .ListItems(Indx).SubItems(i)
            Next i
        End If
    End With
    End Sub
     
    '=== Ajout ou modification des données saisies dans la listview
    Private Sub Liste_Click()
    Dim Tb
    Dim i As Byte
     
    If Not Vide Then
        Tb = Split(LST)
        Modif = True
        With Me.LISTING
            If Indx = 0 Then
                'Ajout
                .ListItems.Add , , Me.Controls(Tb(0)).Value
                For i = 1 To UBound(Tb)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Me.Controls(Tb(i)).Value
                Next i
            Else
                'Modification
                .ListItems(Indx).Text = Me.Controls(Tb(0)).Value
                For i = 1 To UBound(Tb)
                    .ListItems(Indx).SubItems(i) = Me.Controls(Tb(i)).Value
                Next i
            End If
            RAZ
            Me.txtTPU = TotPA
        End With
        'Actualisation des totaux
        AjouteTotal
    Else
        MsgBox "Remplir les données manquantes"
    End If
    End Sub
     
    '=== Supprime la ligne de la listview
    Private Sub Enleve_Click()
    Dim Lx As Integer
     
    If Indx > 0 Then
        Modif = True
        With LISTING.ListItems
            For Lx = 1 To .Count
                If .Item(Lx).Selected Then
                    .Remove Lx
                    Exit For
                End If
            Next Lx
        End With
        RAZ
    End If
    AjouteTotal
    End Sub
     
    '=== Au changement du PU, les autres controles sont mis à jour
    Private Sub txtPrix_Change()
    Dim Marge As Double
     
    Select Case Valeur(Me.txtPrix.Value)
        Case Is <= 20: Marge = 1.4
        Case 21 To 49: Marge = 1.3
        Case 50 To 79: Marge = 1.25
        Case 80 To 119: Marge = 1.2
        Case 120 To 149: Marge = 1.15
        Case Is >= 150: Marge = 1.1
    End Select
    cboMarge.Value = Marge
     
    Me.txtPrixM = Format(Valeur(Me.txtPrix) * Marge, "0.00")
     
    Me.txtPrixM = Format(Valeur(Me.txtPrix) * Marge, "0.00")
    Me.txtPrixVte = Format(Valeur(Me.txtPrixM) + Valeur(Me.cboPort), "0.00")
    Me.txtPrixVteHT = Format(Valeur(txtPrixVte) / (1 + Valeur(TauxTVA)), "0.00")
    End Sub
     
    '=== Recalcule du PV en fonction du port
    Private Sub cboPort_Change()
     
    Me.txtPrixVte = Format(Valeur(Me.txtPrixM) + Valeur(Me.cboPort), "0.00")
    'Me.txtPrixVteHT = Format(Valeur(txtPrixVte) / (1 + TauxTVA), "0.00")
    End Sub
     
    '=== Recalcul du PVHT
    Private Sub txtPrixVte_Change()
     
    Me.txtPrixVteHT = Format(Valeur(txtPrixVte) / (1 + TauxTVA), "0.00")
    End Sub
     
    '=== Enregistrement sur la feuille Feuil2
    Private Sub Enregistrer_Click()
    Dim Bl As Byte, i As Byte
    Dim LastLig As Long
    Dim Lg As Integer
     
    Bl = 3                                             'pour la première ligne d'écriture
    With Feuil2
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        If LastLig >= 4 Then
            .Range("A4:J" & LastLig).ClearContents     'POURQUOI CETTE PLAGE?????????
            .Range("N4:Q4").ClearContents
        End If
     
        If Me.LISTING.ListItems.Count > 0 Then
            For Lg = 1 To Me.LISTING.ListItems.Count
                .Cells(Lg + Bl, 1) = Me.LISTING.ListItems(Lg).Text    'Categorie
                For i = 1 To 9
                    .Cells(Lg + Bl, i + 1) = Me.LISTING.ListItems(Lg).ListSubItems(i)
                Next i
            Next Lg
     
            .Range("N4") = Valeur(Me.txtTPU)
            .Range("O4") = Valeur(Me.TMarge)
            .Range("P4") = Valeur(Me.TPVte)
            .Range("Q4") = Valeur(Me.TPVteHT)
        End If
        Modif = False
    End With
    Unload Me
    End Sub
     
    '=== Fermeture de l'userform
    Private Sub Annuler_Click()
     
    If Modif Then
        If MsgBox("Modifications non enregistrées" & vbNewLine & "Voulez vous annuler ces modifications?", vbYesNo + vbDefaultButton2) = vbYes Then Unload Me
    Else
        Unload Me
    End If
    End Sub
     
    '=== Vidage des champs de saisie
    Private Sub RAZ()
    Dim i As Byte
    Dim Tb
     
    Tb = Split(LST)
    For i = 0 To UBound(Tb)
        Me.Controls(Tb(i)).Value = ""
    Next i
    Indx = 0
    End Sub
     
    '=== Fonction de contrôle si l'un des champs de saisie est vide
    Private Function Vide() As Boolean
    Dim i As Byte
    Dim Tb
     
    Tb = Split(LST)
    For i = 0 To UBound(Tb)
        If Me.Controls(Tb(i)).Value = "" Then
            Vide = True
            Exit Function
        End If
    Next i
    End Function
     
    '=== Fonction de transformation d'un nombre en format texte vers un un double
    Private Function Valeur(ByVal Str As String) As Double
     
    Valeur = Val(Replace(Str, ",", "."))
    End Function
     
    '=== Procédure de recalcul des totaux
    Private Sub AjouteTotal()
    Dim Tb(1 To 7) As Double
    Dim Lx As Integer
    Dim i As Byte
     
    With Me.LISTING.ListItems
        If .Count > 0 Then
            For Lx = 1 To .Count
                With .Item(Lx)
                    'Tb(1):Qté,Tb(2):PU, Tb(3):Marge,Tb(4):PUMargé, Tb(5): Port, Tb(6):PV, Tb(7): PVHT
                    For i = 1 To 7
                        Tb(i) = Tb(i) + Valeur(.SubItems(i + 2))
                    Next i
                End With
            Next Lx
        End If
    End With
     
    Me.txtTPU = Format(Tb(2), "0.00")
    Me.TMarge = Format(Tb(4) - Tb(2), "0.00")
    Me.TPVte = Format(Tb(6), "0.00")
    Me.TPVteHT = Format(Tb(7), "0.00")
    TotPA = Tb(1) * Tb(4)
    TotPV = Tb(1) * Tb(6)
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonsoir mercatog, corona et au forum,

    Désolé Mercatog, je n'avais pas les yeux en face des trous à l'heure ou j'ai lu les messages. J'ai repris votre code et arrangé pour mon utilisation et tout fonctionne très bien.

    En vous remerciant, tous ceux qui ont participé à l'élaboration d'une partie de mon fichier.

    Stephanie

    PS: pourrais-je avoir une explication sur le déroulement du code enregistrement et les commandes similaires (for ... next, for each...next , etc.) car je n'ai pas très bien compris sur le site http://silkyroad.developpez.com/VBA/ListView/#LII-E

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [RAVE] champs selon conditions
    Par missmarion dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2006, 16h20
  2. [HTML][CSS] Redimensionner une image selon condition
    Par Eilkh dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/02/2006, 15h55
  3. [VB.net] Générer une date selon condition
    Par WriteLN dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/10/2005, 16h12
  4. [VB.NET] Changer de classe selon condition
    Par daner06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/10/2004, 10h04
  5. DLLs chargées selon condition
    Par Benjamin GAGNEUX dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 12/08/2004, 18h14

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