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'
 

dj dim

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

Salut Gaël,

Tu trouveras ci-joint le fichier simplifier au max pour te donner une idée du problème.

HTML:
http://cjoint.com/?hflrzZ5IDN

J'ai vu également que l'orsque je rentre une valeur supérieure à 10000 dans le userform, cette valeur ne s'affiche pas correctement dans le tableau "facturation"

Merci par avance ;)
 
Dernière édition:

Gael

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

Rebonjour à tous,

Je te propose le code suivant pour les 2 procédures que j'ai modifié:

Code:
'------ Ecriture des champs renseignés dans la Boite de Dialogue sur l'onglet Facturation ------'
Private ligne As Integer

Private Sub BoutonValider_Click()
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value = Me.TextBox2.Value
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value = Me.TextBox3.Value
End Sub
Private Sub ListView1_Click()
Dim c As Range
With ActiveSheet.Range("A6:A100")
Set c = .Find(Me.ListView1.SelectedItem, LookIn:=xlValues)
If Not c Is Nothing Then ligne = c.Row
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]")

End Sub

La recherche du n° de ligne est importante à cause du tri possible dans la listview.

Csng sert à convertir en numérique la valeur du CA

J'ai remplacé les tests mois par mois en me servant de l'index du mois dans la liste ce qui simplifie le code.

essaye et dis-moi ce qui est encore à modifier.

@+

Gael
 

Gael

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

Re,

Tu remplaces simplement les 2 procédures:

Code:
Private Sub BoutonValider_Click()
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value = Me.TextBox2.Value
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value = Me.TextBox3.Value
End Sub

Code:
Private Sub ListView1_Click()
Dim c As Range
With ActiveSheet.Range("A6:A100")
Set c = .Find(Me.ListView1.SelectedItem, LookIn:=xlValues)
If Not c Is Nothing Then ligne = c.Row
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]")

End Sub

@+

Gael
 

YANN-56

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

Bonsoir Dimitri, Bonsoir Gael et à ceux qui passeront par ici.

Salut particulier à un Morbihannais comme moi. :) :) :)

Dimitri! J'espère que tu sauras apprécier l'aide de Gaël, :confused:
et ne pas le laisser tomber comme une vielle chaussette par la suite!
(Y compris dédain pour les aides personnelles où j'ai investi beaucoup de temps)

Pas très amicalement :mad:

Yann (Alias Yves)
 

dj dim

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

Gaël,

Nikel tout fonctionne! Merci beaucoup pour ton aide.

J'ai juste un souci pour aller chercher des infos dans une autre feuille intitulée "Commercial" afin de compléter la TextBox4 et en tenant compte de la fonctionnalité "croissant/décroissant".

Comment adapter ton code ? :(
 

Gael

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

Bonsoir Yves, Dimitri, le forum,

Yves, merci de ton coucou. Si tu passes un jour vers Lorient, tu peux toujours me faire signe, je serais content de te rencontrer.

Dimitri, En créant une feuille "Commercial" avec la liste des n°s de compte en colonne J et les types de facturation en colonne K, tu peux ajouter 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

@+

Gael
 

dj dim

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

Excellent!

Il me reste une erreur '1004' lors de l'écriture sur le tableau, le code suivant est en surbrillance :

Code:
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)

Merci 1000 fois pour ton aide Gaël :)
 
Dernière édition:

Gael

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

Re,

C'est le cas lorsque ligne=0 ce qui se produit si tu clicques sur valider sans avoir sélectionné une ligne de la listview donc sans passer par la recherche du code qui initialise le n° de ligne.

Dans l'initialisation, remplace la variable N°LIGNE par celle que j'ai créée (Ligne) qu'il faut initialiser à 6:

Code:
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

Ajoute également un test du contenu de Textbox1 car s'il est à blanc, la fonction Csng te renverra une erreur 13:

Code:
If Me.TextBox1.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)
End If

et tout devrait marcher correctement.

@+

Gael
 

dj dim

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

Bonjour Gaël,

J'ai beau essayer ton code cela ne marche pas. J 'ai toujours la même erreur sur la même ligne de code.

Tu trouveras ci-dessous le nouveau code :

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

Private Sub BoutonValider_Click()

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

End Sub

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)
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]")

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

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

If Me.TextBox1.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)
End If

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

Bonjour Dimitri, bonjour à tous,

Le test de la valeur à blanc de Me.textbox1 n'est pas à mettre dans l'initialisation mais dans la procédure "BoutonValider_click" là où se trouve l'instruction Csng.

Par ailleurs, je pense que tu n'as pas du mettre l'instruction:

Code:
Private Ligne as integer

en début de procédure.

Le début du code doit être le suivant:

Code:
Option Compare Text 'POUR IGNORER DIFFERENCE MAJUSCULES / MINUSCULES
'------ Ecriture des champs renseignés dans la Boite de Dialogue sur l'onglet Facturation ------'
Private ligne As Integer

Private Sub BoutonValider_Click()
If Me.TextBox1.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)
End If
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 11).Value = Me.TextBox2.Value
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 12).Value = Me.TextBox3.Value
End Sub

Et il faut supprimer dans l'initialisation les 3 lignes que tu as rajouté:

Code:
If Me.TextBox1.Value <> "" Then
ActiveSheet.Cells(ligne, Me.ComboBox1.ListIndex * 3 + 10).Value = CSng(Me.TextBox1.Value)
End If

Essaye et dis-moi si c'est OK.

@+

Gael
 

dj dim

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

Excellent!

Ca fonctionne parfaitement !

Le seul "hic" c'est que je ne peux pas protéger la feuille et je souhaitais imposer l'utilisation du userform pour modifier les données

Encore une fois : Merci beaucoup Gaël pour ton aide précieuse
 

Gael

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

Re,

Tu peux protéger la feuille, il suffit de la déprotéger avant d'effectuer une modification.

Pour essayer:

Tu sélectionnes toute la feuille avec le bouton en haut à gauche.
Tu fais format-cellule-protection et tu clicques dans "Verrouillée"
Tu fais outil-protection-protéger la feuille tu décoches "Sélectionner les cellules verrouillées" puis tu choisis un mot de passe, par exemple "gael" et tu confirmes le mot de passe.

Dans la procédure BoutonValider_Click, tu ajoutes les instructions de déprotection/protection:

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

@+

Gael
 

Discussions similaires

Réponses
17
Affichages
337

Statistiques des forums

Discussions
312 211
Messages
2 086 286
Membres
103 170
dernier inscrit
HASSEN@45