Userform avec tri croissant / décroissant

dj dim

XLDnaute Occasionnel
Bonjour à tous,

Je me permets de solliciter votre aide pour un problème de userform.

En effet, grâce à quelques aides j'ai crée une boite de dialogue me permettant de consulter et compléter un onglet intitulé "facturation".

Le problème est que j'ai ajouté une fonction me permettant de classer par ordre croissant ou décroissant les différents critères de la listview (n° de compte - agence - client) malheureusement les valeurs de varient pas en fonction du compte selectionné.

Vous trouverez ci-dessous le code inséré :

Code:
Option Compare Text 'POUR IGNORER DIFFERENCE MAJUSCULES / MINUSCULES

'------ Ecriture des champs renseignés dans la Boite de Dialogue sur l'onglet Facturation ------'

Private Sub BoutonValider_Click()

If ComboBox1.Value = "Janvier" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 10).Value = Val(TextBox1.Text)
If ComboBox1.Value = "Janvier" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 11).Value = Me.TextBox2.Value
If ComboBox1.Value = "Janvier" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 12).Value = Me.TextBox3.Value

If ComboBox1.Value = "Février" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 13).Value = Me.TextBox1.Value
If ComboBox1.Value = "Février" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 14).Value = Me.TextBox2.Value
If ComboBox1.Value = "Février" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 15).Value = Me.TextBox3.Value

If ComboBox1.Value = "Mars" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 16).Value = Me.TextBox1.Value
If ComboBox1.Value = "Mars" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 17).Value = Me.TextBox2.Value
If ComboBox1.Value = "Mars" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 18).Value = Me.TextBox3.Value

If ComboBox1.Value = "Avril" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 19).Value = Me.TextBox1.Value
If ComboBox1.Value = "Avril" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 20).Value = Me.TextBox2.Value
If ComboBox1.Value = "Avril" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 21).Value = Me.TextBox3.Value

If ComboBox1.Value = "Mai" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 22).Value = Me.TextBox1.Value
If ComboBox1.Value = "Mai" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 23).Value = Me.TextBox2.Value
If ComboBox1.Value = "Mai" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 24).Value = Me.TextBox3.Value

If ComboBox1.Value = "Juin" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 25).Value = Me.TextBox1.Value
If ComboBox1.Value = "Juin" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 26).Value = Me.TextBox2.Value
If ComboBox1.Value = "Juin" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 27).Value = Me.TextBox3.Value

If ComboBox1.Value = "Juillet" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 28).Value = Me.TextBox1.Value
If ComboBox1.Value = "Juillet" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 29).Value = Me.TextBox2.Value
If ComboBox1.Value = "Juillet" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 30).Value = Me.TextBox3.Value

If ComboBox1.Value = "Août" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 31).Value = Me.TextBox1.Value
If ComboBox1.Value = "Août" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 32).Value = Me.TextBox2.Value
If ComboBox1.Value = "Août" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 33).Value = Me.TextBox3.Value

If ComboBox1.Value = "Septembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 34).Value = Me.TextBox1.Value
If ComboBox1.Value = "Septembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 35).Value = Me.TextBox2.Value
If ComboBox1.Value = "Septembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 36).Value = Me.TextBox3.Value

If ComboBox1.Value = "Octobre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 37).Value = Me.TextBox1.Value
If ComboBox1.Value = "Octobre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 38).Value = Me.TextBox2.Value
If ComboBox1.Value = "Octobre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 39).Value = Me.TextBox3.Value

If ComboBox1.Value = "Novembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 40).Value = Me.TextBox1.Value
If ComboBox1.Value = "Novembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 41).Value = Me.TextBox2.Value
If ComboBox1.Value = "Novembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 42).Value = Me.TextBox3.Value

If ComboBox1.Value = "Décembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 43).Value = Me.TextBox1.Value
If ComboBox1.Value = "Décembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 44).Value = Me.TextBox2.Value
If ComboBox1.Value = "Décembre" Then ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 45).Value = Me.TextBox3.Value

End Sub
Private Sub ListView1_Click()


If ComboBox1.Value = "Janvier" Then Me.TextBox2.Value = "=Application.Worksheet.VLOOKUP(Me.ListView1.SelectedItem,Commercial!A4:K200,10,FALSE)"
If ComboBox1.Value = "Janvier" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 11).Value
If ComboBox1.Value = "Janvier" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 12).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Février" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 13).Value
If ComboBox1.Value = "Février" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 14).Value
If ComboBox1.Value = "Février" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 15).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Mars" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 16).Value
If ComboBox1.Value = "Mars" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 17).Value
If ComboBox1.Value = "Mars" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 18).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Avril" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 19).Value
If ComboBox1.Value = "Avril" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 20).Value
If ComboBox1.Value = "Avril" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 21).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Mai" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 22).Value
If ComboBox1.Value = "Mai" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 23).Value
If ComboBox1.Value = "Mai" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 24).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Juin" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 25).Value
If ComboBox1.Value = "Juin" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 26).Value
If ComboBox1.Value = "Juin" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 27).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Juillet" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 28).Value
If ComboBox1.Value = "Juillet" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 29).Value
If ComboBox1.Value = "Juillet" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 30).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Août" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 31).Value
If ComboBox1.Value = "Août" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 32).Value
If ComboBox1.Value = "Août" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 33).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Septembre" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 34).Value
If ComboBox1.Value = "Septembre" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 35).Value
If ComboBox1.Value = "Septembre" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 36).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Octobre" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 37).Value
If ComboBox1.Value = "Octobre" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 38).Value
If ComboBox1.Value = "Octobre" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 39).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Novembre" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 40).Value
If ComboBox1.Value = "Novembre" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 41).Value
If ComboBox1.Value = "Novembre" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 42).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value

If ComboBox1.Value = "Décembre" Then Me.TextBox1.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 43).Value
If ComboBox1.Value = "Décembre" Then Me.TextBox2.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 44).Value
If ComboBox1.Value = "Décembre" Then Me.TextBox3.Value = ActiveSheet.Cells(Me.ListView1.SelectedItem.Index + 5, 45).Value
Me.TextBox4.Text = Sheets("Commercial").Cells(Me.ListView1.SelectedItem.Index + 4, 11).Value


Me.Label4.Caption = Me.ListView1.SelectedItem.Text & " - " _
& Me.ListView1.SelectedItem.ListSubItems(1).Text & " - " & Me.ListView1.SelectedItem.ListSubItems(2).Text


TextBox1.Value = Format(TextBox1.Value, "# ,##0.00 [-40C]")
TextBox2.Value = Format(TextBox2.Value, "0.00%")
TextBox3.Value = Format(TextBox3.Value, "# ,##0.00 [-40C]")


End Sub

'----------- MISE EN FORME ET RECHERCHE DES INFOS DU COMBOX1 -------------'

Private Sub UserForm_Initialize()
For i = 1 To 12 ' CHARGEMENT DES MOIS DANS UNE ANNEE, ET MISE EN MAJUSCULES
ComboBox1.AddItem Format(Format("1/" & i, "mmmm"), ">")

Next i
ComboBox1.Value = Format(Format(CDate(Date), "mmmm"), ">")

 With Me.ListView1
             .Gridlines = True
             .View = 3
             .MultiSelect = True
             .FullRowSelect = True

                     With .ColumnHeaders
                          .Add , , "N° COMPTE", 80
                          .Add , , "AGENCE", 80
                          .Add , , "CLIENT", 190 ', lvwColumnRight
                     End With
End With

Worksheets("Facturation").Activate

With Me.ListView1

  For j = 6 To ActiveSheet.Range("A65536").End(xlUp).Row
      .ListItems.Add , , ActiveSheet.Cells(j, 1).Value 'N° DE COMPTE
      .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(j, 2).Value ' AGENCE
      .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(j, 3).Value ' NON CLIENT

Next j
End With

For Each FEUILLE In ThisWorkbook.Worksheets
    If FEUILLE.Name = ComboBox1.Value Then FEUILLE.Activate
Next

N°LIGNE = 5

Me.TextBox1.Text = ActiveSheet.Cells(N°LIGNE, 1).Value
Me.TextBox2.Text = ActiveSheet.Cells(N°LIGNE, 2).Value
Me.TextBox3.Text = ActiveSheet.Cells(N°LIGNE, 3).Value

Me.Label4.Caption = Me.ComboBox1.Value & " - " & Me.ListView1.ListItems(1).Text & " - " _
& Me.ListView1.ListItems(1).ListSubItems(1).Text & " - " & Me.ListView1.ListItems(1).ListSubItems(2).Text

End Sub
    
' ------ Tri lors de la sélection d'une colonne ----------'

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    ListView1.Sorted = False
    ListView1.SortKey = ColumnHeader.Index - 1
    
    If ListView1.SortOrder = lvwAscending Then
        ListView1.SortOrder = lvwDescending
        Else
        ListView1.SortOrder = lvwAscending
    End If
    
    ListView1.Sorted = True
End Sub

'---------- Multiplication dans la TextBox3 ------------'

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        On Error Resume Next ' Si ce n'est pas une saisie conforme!
        TextBox2 = Replace(TextBox2.Value, ".", ",")
        
        TextBox3 = TextBox1 * TextBox2 / 100
        TextBox2 = TextBox2 & "%"
        TextBox1.Value = Format(TextBox1.Value, "# ,##0.00 [-40C]")
        TextBox3.Value = Format(TextBox3.Value, "# ,##0.00 [-40C]")
End Sub


'Tester : Val(TextBox1.Value)pour valeurs numeriques'
 

Gael

XLDnaute Barbatruc
Re : Userform avec tri croissant / décroissant

Re,

Il y a encore un bug dans le champ pourcentage, il faut modifier la procédure comme suit:

Code:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        On Error Resume Next ' Si ce n'est pas une saisie conforme!
        TextBox2 = Replace(TextBox2.Value, ".", ",")
        
        [COLOR=red]TextBox2 = Format(TextBox2.Value / 100, "# ,##0.00 %")
        TextBox3 = TextBox1 * TextBox2[/COLOR]
        TextBox1.Value = Format(TextBox1.Value, "# ,##0.00 [-40C]")
        TextBox3.Value = Format(TextBox3.Value, "# ,##0.00 [-40C]")
End Sub

Sinon tu rajoutes un caractère "%" au format texte et on arrive à avoir dans le champ "2,00 %%%%%%".

@+

Gael
 

Gael

XLDnaute Barbatruc
Re : Userform avec tri croissant / décroissant

Re,

J'ai rectifié 2 ou 3 erreurs notamment pour que les mises à jours dans la feuille se fassent bien dans un format numérique et non pas texte.

La procédure de mise à jour devient:

Code:
Private Sub BoutonValider_Click()
ActiveSheet.Unprotect Password:="gael"
    
If Me.TextBox1.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CDec(Me.TextBox1.Value)
End If
If Me.TextBox2.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value = CDec(Format(Me.TextBox2.Value, "0.00"))
End If
If Me.TextBox3.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value = CDec(Me.TextBox3.Value)
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="gael"
End Sub

Pour la procédure de multiplication:

Code:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        On Error Resume Next ' Si ce n'est pas une saisie conforme!
        TextBox2 = Replace(TextBox2.Value, ".", ",")
        TextBox3 = TextBox1 * TextBox2 / 100
 
        TextBox2.Value = Format(TextBox2.Value / 100, "0.00%")        
        TextBox1.Value = Format(TextBox1.Value, "# ,##0.00 [-40C]")
        TextBox3.Value = Format(TextBox3.Value, "# ,##0.00 [-40C]")
End Sub

Ca devrait marcher. Vérifie bien les résultats sur la feuille de calcul après validation.

@+

Gael
 

dj dim

XLDnaute Occasionnel
Re : Userform avec tri croissant / décroissant

Un immense merci à toi Gaël !

Tout fonctionne parfaitement et mieux encore!

PS: J'ai d'ailleurs du mal à comprendre ce qui clochait sur la multiplication!

Si je devais faire la fine bouche je te demanderai deux choses supplémentaires :

- comment ne faire apparaitre que certains clients identifiés par une "X" dans la colonne G de la feuille "Facturation" ? Puis ajouter une CheckBox permettant cette fonction ?

- comment changer de couleur de fond ou de couleur de texte de la TextBox4 en fonction d'un critère indiqué dans ma feuille "commercial" dans la colonne K.

Exemple :
"Pied de facture" = Bleu Clair
"Facture Complémentaire" = Rose
"Sur les Tarifs" = Vert

Encore une fois merci pour tout ;)
 
Dernière édition:

Gael

XLDnaute Barbatruc
Re : Userform avec tri croissant / décroissant

Dimitri,

Pour changer la couleur de fond en fonction de la valeur dans la feuille "Commercial" tu peut mettre le code suivant dans la procédure Listview1.click:

Code:
.
.
.
With Sheets("Commercial").Range("J1:J100")
Set c = .Find(Me.ListView1.SelectedItem, LookIn:=xlValues)
If Not c Is Nothing Then Me.TextBox4 = c.Offset(0, 1)
End With
[COLOR=red]Select Case c.Offset(0, 1).Value
    Case "Pied de facture"
        Me.TextBox4.BackColor = RGB(255, 0, 0)
    Case "Facture complémentaire"
        Me.TextBox4.BackColor = RGB(0, 255, 0)
    Case "Sur les Tarifs"
        Me.TextBox4.BackColor = RGB(0, 0, 255)
End Select[/COLOR]
[COLOR=black].[/COLOR]
[COLOR=black].[/COLOR]
[COLOR=black].[/[/COLOR]CODE]
 
Et pour sélectionner les comptes en mettant un "x" dans la colonne G, il suffit de filtrer la création des items:
 
[CODE][COLOR=red]If Cells(j, 7) <> "x" Then[/COLOR]
      .ListItems.Add , , ActiveSheet.Cells(j, 1).Value 'N° DE COMPTE
      .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(j, 2).Value ' AGENCE
      .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(j, 3).Value ' NON CLIENT
    [COLOR=red]End If[/COLOR]

Par la suite, tu peux rajouter la possibilité de ne plus afficher un client en cochant une case dans l'USF qui mettra un "x" en face du compte.

@+

Gael
 

dj dim

XLDnaute Occasionnel
Re : Userform avec tri croissant / décroissant

Bonjour Gaël et les autres,

C'est parfait ! Et pour la éniéme fois je te remercie Gaël pour tout le temps consacré à m'aider.

Je vais juste tenter l'adaptation de ton code afin que je n'ai qu'une checkbox à cocher pour afficher uniquement les comptes identifiés par une "X".

J'ai d'ailleurs trouvé un lien intéressant pour les codes couleur rgb si cela intéresse certains :
HTML:
http://priscilla.73.online.fr/codecouleur.php

Encore merci ;)
 

dj dim

XLDnaute Occasionnel
Re : Userform avec tri croissant / décroissant

Help me Gaël et les autres !!!

Je viens de m'apercevoir que la TextBox2 qui comprends les pourcentages m'arrondi ces derniers lors de l'écriture sur la feuille "Facturation" et également la TextBox Montant.

Comment faire pour avoir les montants exacts à 0.01 près ?
 

Gael

XLDnaute Barbatruc
Re : Userform avec tri croissant / décroissant

Bonjour Dimitri, bonjour à tous,

Exact, je ne l'avais pas vu.

Petite correction, mettre 4 "0" lors de la conversion:

Code:
If Me.TextBox2.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value = CDec(Format(Me.TextBox2.Value, "0.[COLOR=red]0000[/COLOR]"))
End If

@+

Gael
 

dj dim

XLDnaute Occasionnel
Re : Userform avec tri croissant / décroissant

Bonjour Gaël, Bonjour à tous,

Je viens de me rendre compte d'un nouveau problème :

Il n'est pas possible de saisir le montant du CA à l'aide du pavé numérique (problème de virgule)

Est-il possible de remplacer instantanément le point par une virgule lors de la saisie dans un usf ?
 

Gael

XLDnaute Barbatruc
Re : Userform avec tri croissant / décroissant

Bonjour Dimitri,

Essaye d'ajouter la procédure suivante:

Code:
Private Sub TextBox2_Change()
TextBox2 = Replace(TextBox2.Value, ".", ",")
End Sub

Dans ce cas, tu peux supprimer l'instruction équivalente dans la procédure "TextBox2_Exit"

@+

Gael
 

dj dim

XLDnaute Occasionnel
Re : Userform avec tri croissant / décroissant

Bonjour Gaël et les autres,

Je me permets de vous solliciter çà nouveau car j'ai inseré dans mon précédent userform une TextBox (TextBox5) me permettant d'inserer des commentaires dans la case qui recevra la valeur de la TextBox4.

Malheureusement mon code ne fonctionne pas et je ne vois pas où cela cloche : "erreur de compilation : argument non facultatif"

Voici le code :

Code:
Option Compare Text 'POUR IGNORER DIFFERENCE MAJUSCULES / MINUSCULES


Private ligne As Integer


'------ Ecriture des champs renseignés dans la Boite de Dialogue sur l'onglet Facturation ------'

Private Sub BoutonValider_Click()
ActiveSheet.Unprotect Password:="dt"
    
If Me.TextBox1.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CDec(Format(Me.TextBox1.Value, "0.0000"))
End If
If Me.TextBox2.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value = CDec(Format(Me.TextBox2.Value, "0.0000"))
End If
If Me.TextBox3.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value = CDec(Format(Me.TextBox3.Value, "0.0000"))
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="dt"
  On Error Resume Next
  With ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12)
   .AddComment
   On Error GoTo 0
   .Comment.Text Text:=Replace(Me.TextBox5, "")
   .Comment.Visible = True
   .Comment.Shape.Select
   Selection.AutoSize = True
   .Comment.Visible = False
  End With
  Unload Me
End Sub


'----------- Mise en forme et recherche des infos du ComboBox1 -------------'

Private Sub UserForm_Initialize()
For i = 1 To 12 ' CHARGEMENT DES MOIS DANS UNE ANNEE, ET MISE EN MAJUSCULES
ComboBox1.AddItem Format(Format("1/" & i, "mmmm"), ">")

Next i
ComboBox1.Value = Format(Format(CDate(Date), "mmmm"), ">")

 With Me.ListView1
             .Gridlines = True
             .View = 3
             .MultiSelect = True
             .FullRowSelect = True

                     With .ColumnHeaders
                          .Add , , "N° COMPTE", 60
                          .Add , , "AGENCE", 80, lvwColumnCenter
                          .Add , , "CLIENT", 185
                     End With
End With

Worksheets("Facturation").Activate

With Me.ListView1

  For j = 6 To ActiveSheet.Range("A65536").End(xlUp).Row
      .ListItems.Add , , ActiveSheet.Cells(j, 1).Value 'N° DE COMPTE
      .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(j, 2).Value ' AGENCE
      .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(j, 3).Value ' NON CLIENT


Next j
End With

For Each FEUILLE In ThisWorkbook.Worksheets
    If FEUILLE.Name = ComboBox1.Value Then FEUILLE.Activate
Next

ligne = 6

Me.TextBox1.Text = ActiveSheet.Cells(ligne, 1).Value
Me.TextBox2.Text = ActiveSheet.Cells(ligne, 2).Value
Me.TextBox3.Text = ActiveSheet.Cells(ligne, 3).Value

Me.Label4.Caption = Me.ComboBox1.Value & " - " & Me.ListView1.ListItems(1).Text & " - " _
& Me.ListView1.ListItems(1).ListSubItems(1).Text & " - " & Me.ListView1.ListItems(1).ListSubItems(2).Text

End Sub


'----------- Mise en forme et recherche des infos de la ListView1 -------------'

Private Sub ListView1_Click()

Dim c As Range
With ActiveSheet.Range("A6:A500")
Set c = .Find(Me.ListView1.SelectedItem, LookIn:=xlValues)
If Not c Is Nothing Then ligne = c.Row
End With
With Sheets("Commercial").Range("A5:A500")
Set c = .Find(Me.ListView1.SelectedItem, LookIn:=xlValues)
If Not c Is Nothing Then Me.TextBox4 = c.Offset(0, 10)
Select Case c.Offset(0, 10).Value
Case ""
Me.TextBox4.BackColor = RGB(255, 255, 255)
Case "Pieds de Facture"
Me.TextBox4.BackColor = RGB(151, 255, 255) 'cyan'
Case "Facture Complémentaire"
Me.TextBox4.BackColor = RGB(255, 105, 180) 'rose'
Case "Sur les Tarifs"
Me.TextBox4.BackColor = RGB(0, 255, 0) 'vert fluo'
End Select
End With



Me.TextBox1.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value
Me.TextBox2.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value
Me.TextBox3.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value

Me.Label4.Caption = Me.ListView1.SelectedItem.Text & " - " _
& Me.ListView1.SelectedItem.ListSubItems(1).Text & " - " & Me.ListView1.SelectedItem.ListSubItems(2).Text

TextBox1.Value = Format(TextBox1.Value, "# ,##0.00 [-40C]")
TextBox2.Value = Format(TextBox2.Value, "0.00%")
TextBox3.Value = Format(TextBox3.Value, "# ,##0.00 [-40C]")

If ActiveCell.Comment Is Nothing Then
    Facturation.TextBox5 = Environ("username") & Chr(13)
  Else
    Facturation.TextBox5 = ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Comment.Text
  End If
End Sub


' ------ Tri lors de la sélection d'une colonne ----------'

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    ListView1.Sorted = False
    ListView1.SortKey = ColumnHeader.Index - 1
    
    If ListView1.SortOrder = lvwAscending Then
        ListView1.SortOrder = lvwDescending
        Else
        ListView1.SortOrder = lvwAscending
    End If
    
    ListView1.Sorted = True
End Sub


'--------- Remplace les . par des , dans la TextBox1 ---------'

Private Sub TextBox1_Change()
TextBox1 = Replace(TextBox1.Value, ".", ",")
End Sub


'--------- Remplace les . par des , dans la TextBox2 ---------'

Private Sub TextBox2_Change()
TextBox2 = Replace(TextBox2.Value, ".", ",")
End Sub


'--------- Remplace les . par des , dans la TextBox3 ---------'

Private Sub TextBox3_Change()
TextBox3 = Replace(TextBox3.Value, ".", ",")
End Sub


'---------- Multiplication dans la TextBox3 ------------'

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        On Error Resume Next ' Si ce n'est pas une saisie conforme!
        TextBox3 = TextBox1 * TextBox2 / 100
 
        TextBox2.Value = Format(TextBox2.Value / 100, "0.00%")
        TextBox1.Value = Format(TextBox1.Value, "# ,##0.00 [-40C]")
        TextBox3.Value = Format(TextBox3.Value, "# ,##0.00 [-40C]")
End Sub
 

Gael

XLDnaute Barbatruc
Re : Userform avec tri croissant / décroissant

Bonjour Dj_Dim, bonjour à tous,

Désolé de te répondre aussi tard mais je ne me suis pas connecté depuis quelque temps.

Pour la création et mise à jour du commentaire le "replace" n'est pas nécessaire (sans oublier de ne protéger la feuille qu'à la fin de la procédure):

Code:
...
On Error Resume Next
  With ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12)
   .AddComment
On Error GoTo 0
   .Comment.Visible = True
   .Comment.Text [COLOR=red]Text:=TextBox5.Text[/COLOR]
   .Comment.Shape.Select
   Selection.AutoSize = True
   .Comment.Visible = False
  End With
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="dt"
End Sub

Et si tu veux afficher le commentaire existant dans Textbox5 au moment de la sélection:

Code:
Me.TextBox1.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value
Me.TextBox2.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value
Me.TextBox3.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value
[COLOR=red]On Error Resume Next
Me.TextBox5.Value = Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Comment.Text
On Error GoTo 0[/COLOR]

@+

Gael
 

dj dim

XLDnaute Occasionnel
Re : Userform avec tri croissant / décroissant

Bonjour à tous, Bonjour Gaël,

Désolé de te répondre avec autant de retard. Encore une fois merci pour ton aide.

J'ai bien saisi ton code et la création du commentaire se fait bien sauf que ce que j'ai noté reste ensuite affiché dans la textbox mais en changeant de selection !

Est-il d'ailleurs possible que lorqu'on efface tout ce que l'on a ecrit précédemment dans le commentaire via la textbox, cela efface completement le commentaire.


Je ne sais plus que faire :(

PS : as ton possibilité d'afficher le username de celui qui a saisi le commentaire ?
 
Dernière édition:

Discussions similaires

Réponses
17
Affichages
810

Statistiques des forums

Discussions
315 092
Messages
2 116 118
Membres
112 665
dernier inscrit
JPHD