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

  • Initiateur de la discussion Initiateur de la discussion Lone-wolf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Lone-wolf

XLDnaute Barbatruc
Bonjour à toutes et à tous 🙂

En PJ et dans le formulaire UsfGestionES, j'aissaie d'afficher par dates les entrées et les sorties des différents articles. Je ne sais pas se qui se passe, la listview n'affiche aucuns résultas malgré une recherche avec Find.

J'ai aussi un souci concernant le format Date dans les Combobox's, elles affichent le format "dd/mm/yyyy" et moi j'aimerais qu'elles soient au format "dd.mm.yyyy". Les feuilles sont "Entrees" et "Sorties" du classeur Base qui se trouve dans le sous-dossier.

Merci d'avance pour l'aide que vous apporterez.
 

Pièces jointes

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.
 
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")
 
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:
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:
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.
 
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
 

Pièces jointes

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
 
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.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
571
Réponses
2
Affichages
1 K
Réponses
4
Affichages
2 K
Réponses
4
Affichages
1 K
Retour