XL 2010 [Résolu] Afficher résultats par dates dans Listview

Lone-wolf

XLDnaute Barbatruc
De rien René, c'était la moindre des choses.

Ecoute, le dernier code que tu as mis, modifie la première ligne de commande et ensuite plus rien. Est-ce que avec Match, il y aurait moyen de modifier les doublons? À moins que je dise n'importe quoi.
 

Bebere

XLDnaute Barbatruc
bonjour Dodo,le forum
dans une commande tu n'auras pas 2 articles les mêmes
je pense qu'il faut rechercher l'article de la listview ,celui de la combobox peut être changé
je dois m'absenter,je ferai un code plus complet.Il y a moyen de simplifier en employant la propriété key de listview
en plus le code est plus sûr.Déjà mis un exemple dans une réponse précédente

Code:
    If Li = 0 Then MsgBox "votre sélection listview,svp": Exit Sub
    If MsgBox("Voulez-vous modifier cet enregistrement ?", vbYesNo, _
              "LES MILLES MERVEILLES") <> vbYes Then Exit Sub

    Total = CDbl(TxtPrix) * CDbl(TxtQte)
    'Montant = Total - Dif
    'Pourcent = Val(CmbRabais) / 100
    Dif = Total * (Val(CmbRabais) / 100)    'Pourcent
    Montant = Total - Dif

    With WsDC
        Set Rng = .Range("c2:c65536")
       
    End With

For Each cel In Rng
            If cel = Val(CmbCommandes) Then
                If cel.Offset(0, 1) = Me.ListView1.ListItems(Li).ListSubItems(2) Then
                    Ligne = cel.Row: Exit For
                End If
            End If
        Next cel

    Rng.Cells(Ligne, 4) = CmbArticles
    Rng.Cells(Ligne, 5) = Format(TxtQte, "0")
    Rng.Cells(Ligne, 6) = Format(TxtPrix, "0.00")
    Rng.Cells(Ligne, 7) = Format(Val(CmbRabais) / 100, "0%")
    Rng.Cells(Ligne, 8) = Format(TxtDif, "0.00")
    Rng.Cells(Ligne, 9) = Format(TxtMontant, "0.00")
 

Lone-wolf

XLDnaute Barbatruc
Bonjour René

il faut modifier la ligne: If Li = 0 Then MsgBox "votre sélection listview,svp": Exit Sub, elle ne prend pas en compte que j'ai déjà sélectionné l'Item.

Et erreur Incompatibilité de Type sur la ligne
cel.Offset(0, 1) = Me.ListView1.ListItems(Li).ListSubItems(2)
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Dodo oubli de ma part,le voilà(l'oubli)
Code:
Private Sub ListView1_ItemClick(ByVal item As MSComctlLib.ListItem)
Li = 0 'à ajouter quand fini avec li
With ListView1
Li = item.Index'à ajouter
 

Lone-wolf

XLDnaute Barbatruc
Re

Maintenant j'ai l'erreur Index out of bound sur la ligne: Me.ListView1.ListItems(Li).ListSubItems(2)
Pour .ListSubItems(2), ce n'est pas plutôt .ListSubItems(1)

With ListView1
Li = item.Index
CmbArticles = .SelectedItem.SubItems(1)

Et les données(peut-être à cause de Rng) sont décalées en colonne F.
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Dodo
Je ne sais une fois c'est 1 l'autre c'est 2.Y a t'il une colonne cachée dans la listview
pas eu le temps d'étudier le code plus
Demain je regarde,j'aurai plus de temps
 

Lone-wolf

XLDnaute Barbatruc
Re René

J'ai modifié la macro comme ceci

VB:
   If MsgBox("Voulez-vous modifier cet enregistrement ?", vbYesNo, _
              "LES MILLES MERVEILLES") <> vbYes Then Exit Sub

    Total = CDbl(TxtPrix) * CDbl(TxtQte)
    Dif = Total * (Val(CmbRabais) / 100)    'Pourcent
    Montant = Total - Dif

    With WsDC
        Set Rng = .Range("c2:c65536")

For Each cel In Rng
            If cel = Val(CmbCommandes) Then
                If cel.Offset(0, 1) = CmbArticles.Text Then
                    ligne = cel.Row: Exit For
                End If
            End If
        Next cel

    .Range("d" & ligne) = CmbArticles
    .Range("e" & ligne) = Format(TxtQte, "0")
    .Range("f" & ligne) = Format(TxtPrix, "0.00")
    .Range("g" & ligne) = Format(Val(CmbRabais) / 100, "0%")
    .Range("h" & ligne) = Format(TxtDif, "0.00")
    .Range("i" & ligne) = Format(TxtMontant, "0.00")
    End With
Puis éffectué les changement sur 2 commandes; c'est un peu lent, mais tout se passe bien.
 

grisan29

XLDnaute Accro
bonjour Lone-wolf, bebere et le forum
la je n'ai rien fait sur le dernier classeur mis en ligne page, mais je le rejoint car il sera plus facile de retrouver la partie du code a modifier car je l'ai indenté au complet et du coup est devenu plus lisible mais pas intégré les dernière modifications présentées
 

Fichiers joints

Lone-wolf

XLDnaute Barbatruc
Bonsoir Pascal,

j'ai pas compris du tout, ce que tu veux dire par là et pourquoi avoir mis le fichier alors?

En PJ, la nouvelle version. Attention! Après avoir pris une commande, clique sur Facture pour ajouter les données dans la feuille Sauvegarde.
 

Fichiers joints

grisan29

XLDnaute Accro
bonjour lone-wolf
je doute qu'après 3523 messages tu ne sache ce que veux dire indenté un code enfin
voici un exemple issu du module "macros_montants " du fichier que tu viens de joindre
Code:
Public Sub MontantFacture()
Dim tbl, i As Long, MonDico As Object, mondico1 As Object 'dictionary
Dim derlig&, x&, ard

Set MonDico = CreateObject("Scripting.Dictionary")
Set mondico1 = CreateObject("Scripting.Dictionary")

With WsDC
tbl = .Range("A2:I" & .Range("A65536").End(xlUp).Row)
End With

For i = 1 To UBound(tbl)
MonDico(tbl(i, 3)) = MonDico(tbl(i, 3)) + tbl(i, 9)
mondico1(tbl(i, 3)) = mondico1(tbl(i, 3)) + (tbl(i, 9) + tbl(i, 9) * 0.08)
Next i

With WsFact
.[H2].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.Items)
.[j2].Resize(mondico1.Count, 1) = Application.Transpose(mondico1.Items)
.[H2].Resize(MonDico.Count, 1).NumberFormat = "0.00"
.[j2].Resize(MonDico.Count, 1).NumberFormat = "0.00"

derlig = .Range("j" & Rows.Count).End(xlUp).Row
For x = 2 To derlig
ard = Round(.Range("j" & x), 1)
.Range("j" & x) = ard
Next x
End With
End Sub
et voici le même indenter
Code:
Public Sub MontantFacture()
    Dim tbl, i As Long, MonDico As Object, mondico1 As Object 'dictionary
    Dim derlig&, x&, ard
  
    Set MonDico = CreateObject("Scripting.Dictionary")
    Set mondico1 = CreateObject("Scripting.Dictionary")
  
    With WsDC
        tbl = .Range("A2:I" & .Range("A65536").End(xlUp).Row)
    End With
  
    For i = 1 To UBound(tbl)
        MonDico(tbl(i, 3)) = MonDico(tbl(i, 3)) + tbl(i, 9)
        mondico1(tbl(i, 3)) = mondico1(tbl(i, 3)) + (tbl(i, 9) + tbl(i, 9) * 0.08)
    Next i
      
        With WsFact
            .[H2].Resize(MonDico.Count, 1) = Application.Transpose(MonDico.Items)
            .[j2].Resize(mondico1.Count, 1) = Application.Transpose(mondico1.Items)
            .[H2].Resize(MonDico.Count, 1).NumberFormat = "0.00"
            .[j2].Resize(MonDico.Count, 1).NumberFormat = "0.00"
          
            derlig = .Range("j" & Rows.Count).End(xlUp).Row
            For x = 2 To derlig
                ard = Round(.Range("j" & x), 1)
                .Range("j" & x) = ard
                Next x
            End With
        End Sub
vois tu la différence, car j'ai passer plus d'une heure a le faire
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Pascal

Je viens de faire un copier-coller du code sur le bloc-note et lit attentivement chaque ligne; sans vouloir t'offenser, je ne vois rien de changer.

En PJ, le nouveau fichier. J'ai dû recorriger le code du formulaire UsfCommandes à cause des variables contrôles qui étaient erronées et mit la macros d'éffacement des bulletins dans workbook_open du classeur Data.
 

Fichiers joints

grisan29

XLDnaute Accro
bonjour Lone-wolf
non je suis d'accord avec toi, il n'y a rien de changer mais c'est plus facile a lire et savoir qui correspond a quoi
comme un manque de end with qui se fois mieux indenté" que pas
 

Bebere

XLDnaute Barbatruc
bonjour Dodo,Grisan
modifier le code usfmodcommandes en partie,surtout le bouton modifier
pour les changements tout se passe dans la listview,tu peux en faire plusieurs
le contenu de la listview est mis dans un tableau b et b remis dans les 4 feuilles
 

Fichiers joints

Bebere

XLDnaute Barbatruc
bonjour Dodo,Grisan,le forum
Les mille merveilles,il suffit de regarder la date et l'heure
sorry,plus pensé à les retirer
Pour ma part j'utilise smartindenter
 

Lone-wolf

XLDnaute Barbatruc
Bonjour René,

Il y a une problème, avec la textbox montant lors du changement des quantités, elle affiche le résultat en négatif. Exemple: -652485. Est-ce que tu aurais modifié autre chose?

EDIT: il y à aussi un souci avec rabais de la listview, elle met le résultat à zéro, alors que celui-ci est à 10 ou à 20 par ex. Et il faudrait ajouter le format 0.00.- et l'alignement à droite pour les textes numériques.

Mais vu qu'en ajoutant .- le résultat devient du texte. J'ai fait comme ceci pour la feuille Sauvegarde. If IsNumeric(Left(cel), 1) Then cel.HorizontalAlignment = xlRight: else cel.HorizontalAlignment = xlLeft.

Je te remet le dossier où j'ai apporté des modifications dans l'usfcommandes et le classeur Data.
 

Fichiers joints

Dernière édition:

Haut Bas