Bonjour les amis,
j'ai un petit problème sur mon userform, les informations dans les TextBox ne s'affichent pas, peut être que j'ai oublié quelque chose. Dans tous mes sheets, j'ai mis des noms, utilisés comme code pour lié tous les sheets. Dans mon userform, j'utilise donc le nom comme "FiltrerDonnees". Quand je saisie un nom (textbox = textNom) dans mon userform, textbox affiche ce que je cherche: les infos dans sheest("Depense N"). Le Problème, quand je saisie un nom dans mon userform, mais cet fois ci, les infos sont dans sheets("CA N"), textbox n'affiche rien, Alors que j'ai bien défini les codes : Set ws = ThisWorkbook.Sheets("Depense N") et Set ws1 =ThisWorkbook.Sheets("CA N"). Les informations que je cherche se trouvent dans sheets("CA N") à partir de la ligne 8, colonne 15, 17 et 19. J'aimerai les mettre dans textbox : TextRecouvre, TextFees et TextNet. Pour mon code VBA complet, le voici:
Private Sub FiltrerDonnees()
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim lastRow As Long
Dim lastRow1 As Long
Dim nomRecherche As String
Dim nomCellule As String
Dim recouvre As Double
Dim comission As Double
Dim netrecouvre As Double
Dim transport As Double, debours As Double, deboursreel As Double, deboursdiff As Double, hotels As Double
Dim madateP As Variant, madateH As Variant
Dim totalTransport As Double, totalDebours As Double, totalDeboursreel As Double, totaldDeboursdiff As Double, totalHotels As Double, totalDepense As Double
' Référence à la feuille Depense N
Set ws = ThisWorkbook.Sheets("Depense N")
Set ws1 = ThisWorkbook.Sheets("CA N")
' Vider la ListBox avant chaque nouvelle recherche
ListTransport.Clear
ListHotel.Clear
' Initialiser les totaux
totalTransport = 0
totalDebours = 0
totalDeboursreel = 0
totaldeboursdiff = 0
totalHotels = 0
totalDepense = 0
'RECHERCHE ET FILTRAGE SELON LES CRITERES
' Récupérer les valeurs des TextBox en minuscule pour une comparaison insensible à la casse
nomRecherche = LCase(Trim(TextNom.Text))
' Si le premier champs NOM est vide, on n'affiche rien
If nomRecherche = "" Then Exit Sub
' Trouver la dernière ligne avec des données dans la colonne B (Nom)
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
lastRow1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row
'EN TETES DE LA LISTBOX
' Ajouter les EN TETES à la ListBox
With ListTransport
.ColumnCount = 8
.ColumnWidths = "90;90;50;50;70;50;50;50"
.AddItem "Designation"
.List(.ListCount - 1, 1) = "P"
.List(.ListCount - 1, 2) = "F.Pr"
.List(.ListCount - 1, 3) = "F.D"
.List(.ListCount - 1, 4) = "Mtt"
.List(.ListCount - 1, 5) = "Réf "
.List(.ListCount - 1, 6) = "Ac"
.List(.ListCount - 1, 7) = "Date"
End With
With ListHotel
.ColumnCount = 8
.ColumnWidths = "90;50;50;80;60;60;60;95"
.AddItem "Hotel"
.List(.ListCount - 1, 1) = "P"
.List(.ListCount - 1, 2) = "F.Pr"
.List(.ListCount - 1, 3) = "F.D"
.List(.ListCount - 1, 4) = "Mtt"
.List(.ListCount - 1, 5) = "Réf "
.List(.ListCount - 1, 6) = "Ac"
.List(.ListCount - 1, 7) = "Date"
End With
'BOUCLE POUR LE FILTRAGE
' Boucle pour parcourir les lignes et FILTRER selon les critères
For i = 2 To lastRow 'Commence à 2 pour ignorer la ligne des titres
nomCellule = LCase(ws.Cells(i, 2).Value) ' Colonne B : Nom
If nomRecherche = "" Or nomCellule Like "*" & nomRecherche & "*" Then
'FORMAT DATE ET CHIFFRE DANS LE LISTBOX
' Vérifier si la cellule contient un nombre, sinon mettre 0
If IsNumeric(ws.Cells(i, 10).Value) Then
transport = ws.Cells(i, 10).Value
Else
transport = 0
End If
If IsNumeric(ws.Cells(i, 16).Value) Then
debours = ws.Cells(i, 16).Value
Else
debours = 0
End If
If IsNumeric(ws.Cells(i, 17).Value) Then
deboursreel = ws.Cells(i, 17).Value
Else
deboursreel = 0
End If
If IsNumeric(ws.Cells(i, 18).Value) Then
deboursdiff = ws.Cells(i, 18).Value
Else
deboursdiff = 0
End If
If IsNumeric(ws.Cells(i, 24).Value) Then
hotels = ws.Cells(i, 24).Value
Else
hotels = 0
End If
If IsDate(ws.Cells(i, 13).Value) Then
madateP = ws.Cells(i, 13).Value ' Stocker la date si valide
Else
madateP = "" ' Laisser vide si ce n'est pas une date valide
End If
If IsDate(ws.Cells(i, 27).Value) Then
madateH = ws.Cells(i, 27).Value ' Stocker la date si valide
Else
madateH = "" ' Laisser vide si ce n'est pas une date valide
End If
' Ajouter aux totaux
totalTransport = totalTransport + transport
totalDebours = totalDebours + debours
totalDeboursreel = totalDeboursreel + deboursreel
totaldeboursdiff = totaldeboursdiff + deboursdiff
totalHotels = totalHotels + hotels
totalDepense = totalTransport + totalDeboursreel + totalHotels
'AJOUT DES DONNES DANS LISTBOX
' Ajouter les données filtrées à la ListBox
With ListTransport
.AddItem ws.Cells(i, 6).Value ' Nom (colonne B)
.List(.ListCount - 1, 1) = ws.Cells(i, 7).Value
.List(.ListCount - 1, 2) = ws.Cells(i, 8).Value
.List(.ListCount - 1, 3) = ws.Cells(i, 9).Value
.List(.ListCount - 1, 4) = Format(transport, "#,##0.00") ' Montant P
.List(.ListCount - 1, 5) = ws.Cells(i, 11).Value ' Ref Paiem P
.List(.ListCount - 1, 6) = ws.Cells(i, 12).Value ' Acompte P
.List(.ListCount - 1, 7) = ws.Cells(i, 13).Value ' Date Paiem P
End With
With ListHotel
.AddItem ws.Cells(i, 21).Value
.List(.ListCount - 1, 1) = ws.Cells(i, 22).Value
.List(.ListCount - 1, 2) = ws.Cells(i, 23).Value
.List(.ListCount - 1, 3) = Format(hotels, "#,##0.00") ' Montant P
.List(.ListCount - 1, 4) = ws.Cells(i, 25).Value ' Ref Paiem P
.List(.ListCount - 1, 5) = ws.Cells(i, 26).Value ' Acompte P
.List(.ListCount - 1, 6) = ws.Cells(i, 27).Value ' Date Paiem P
.List(.ListCount - 1, 7) = ws.Cells(i, 28).Value ' Observation
End With
' Récupérer le montant de la colonne 15, 17 et 18 (pour le TextBox TextRecouvre)
' Récupérer les données de la feuille "CA N" (ws1)
If i >= 8 Then ' Assurez-vous que la ligne est >= 8 pour "CA N"
If IsNumeric(ws1.Cells(i, 15).Value) Then
recouvre = ws1.Cells(i, 15).Value
Else
recouvre = 0
End If
If IsNumeric(ws1.Cells(i, 17).Value) Then
comission = ws1.Cells(i, 17).Value
Else
comission = 0
End If
If IsNumeric(ws1.Cells(i, 19).Value) Then
netrecouvre = ws1.Cells(i, 19).Value
Else
netrecouvre = 0
End If
' Afficher dans les TextBox
TextRecouvre.Text = Format(recouvre, "#,##0.00")
TextFees.Text = Format(comission, "#,##0.00")
TextNet.Text = Format(netrecouvre, "#,##0.00")
End If
End If
Next i
'FORMAT TOTAUX DANS TEXTBOX (et non LISTBOX)
' Mise à jour des TextBox avec les totaux calculés
TextTRANSP.Text = Format(totalTransport, "#,##0.00")
TextDeb.Text = Format(totalDebours, "#,##0.00")
TexDebreel.Text = Format(totalDeboursreel, "#,##0.00")
TextDiff.Text = Format(totaldeboursdiff, "#,##0.00")
TextHot.Text = Format(totalHotels, "#,##0.00")
TextDepense.Text = Format(totalDepense, "#,##0.00")
Cleanup:
Application.EnableEvents = True ' Réactiver les événements
End Sub
Merci les amis 😀
j'ai un petit problème sur mon userform, les informations dans les TextBox ne s'affichent pas, peut être que j'ai oublié quelque chose. Dans tous mes sheets, j'ai mis des noms, utilisés comme code pour lié tous les sheets. Dans mon userform, j'utilise donc le nom comme "FiltrerDonnees". Quand je saisie un nom (textbox = textNom) dans mon userform, textbox affiche ce que je cherche: les infos dans sheest("Depense N"). Le Problème, quand je saisie un nom dans mon userform, mais cet fois ci, les infos sont dans sheets("CA N"), textbox n'affiche rien, Alors que j'ai bien défini les codes : Set ws = ThisWorkbook.Sheets("Depense N") et Set ws1 =ThisWorkbook.Sheets("CA N"). Les informations que je cherche se trouvent dans sheets("CA N") à partir de la ligne 8, colonne 15, 17 et 19. J'aimerai les mettre dans textbox : TextRecouvre, TextFees et TextNet. Pour mon code VBA complet, le voici:
Private Sub FiltrerDonnees()
Dim ws As Worksheet
Dim ws1 As Worksheet
Dim lastRow As Long
Dim lastRow1 As Long
Dim nomRecherche As String
Dim nomCellule As String
Dim recouvre As Double
Dim comission As Double
Dim netrecouvre As Double
Dim transport As Double, debours As Double, deboursreel As Double, deboursdiff As Double, hotels As Double
Dim madateP As Variant, madateH As Variant
Dim totalTransport As Double, totalDebours As Double, totalDeboursreel As Double, totaldDeboursdiff As Double, totalHotels As Double, totalDepense As Double
' Référence à la feuille Depense N
Set ws = ThisWorkbook.Sheets("Depense N")
Set ws1 = ThisWorkbook.Sheets("CA N")
' Vider la ListBox avant chaque nouvelle recherche
ListTransport.Clear
ListHotel.Clear
' Initialiser les totaux
totalTransport = 0
totalDebours = 0
totalDeboursreel = 0
totaldeboursdiff = 0
totalHotels = 0
totalDepense = 0
'RECHERCHE ET FILTRAGE SELON LES CRITERES
' Récupérer les valeurs des TextBox en minuscule pour une comparaison insensible à la casse
nomRecherche = LCase(Trim(TextNom.Text))
' Si le premier champs NOM est vide, on n'affiche rien
If nomRecherche = "" Then Exit Sub
' Trouver la dernière ligne avec des données dans la colonne B (Nom)
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
lastRow1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row
'EN TETES DE LA LISTBOX
' Ajouter les EN TETES à la ListBox
With ListTransport
.ColumnCount = 8
.ColumnWidths = "90;90;50;50;70;50;50;50"
.AddItem "Designation"
.List(.ListCount - 1, 1) = "P"
.List(.ListCount - 1, 2) = "F.Pr"
.List(.ListCount - 1, 3) = "F.D"
.List(.ListCount - 1, 4) = "Mtt"
.List(.ListCount - 1, 5) = "Réf "
.List(.ListCount - 1, 6) = "Ac"
.List(.ListCount - 1, 7) = "Date"
End With
With ListHotel
.ColumnCount = 8
.ColumnWidths = "90;50;50;80;60;60;60;95"
.AddItem "Hotel"
.List(.ListCount - 1, 1) = "P"
.List(.ListCount - 1, 2) = "F.Pr"
.List(.ListCount - 1, 3) = "F.D"
.List(.ListCount - 1, 4) = "Mtt"
.List(.ListCount - 1, 5) = "Réf "
.List(.ListCount - 1, 6) = "Ac"
.List(.ListCount - 1, 7) = "Date"
End With
'BOUCLE POUR LE FILTRAGE
' Boucle pour parcourir les lignes et FILTRER selon les critères
For i = 2 To lastRow 'Commence à 2 pour ignorer la ligne des titres
nomCellule = LCase(ws.Cells(i, 2).Value) ' Colonne B : Nom
If nomRecherche = "" Or nomCellule Like "*" & nomRecherche & "*" Then
'FORMAT DATE ET CHIFFRE DANS LE LISTBOX
' Vérifier si la cellule contient un nombre, sinon mettre 0
If IsNumeric(ws.Cells(i, 10).Value) Then
transport = ws.Cells(i, 10).Value
Else
transport = 0
End If
If IsNumeric(ws.Cells(i, 16).Value) Then
debours = ws.Cells(i, 16).Value
Else
debours = 0
End If
If IsNumeric(ws.Cells(i, 17).Value) Then
deboursreel = ws.Cells(i, 17).Value
Else
deboursreel = 0
End If
If IsNumeric(ws.Cells(i, 18).Value) Then
deboursdiff = ws.Cells(i, 18).Value
Else
deboursdiff = 0
End If
If IsNumeric(ws.Cells(i, 24).Value) Then
hotels = ws.Cells(i, 24).Value
Else
hotels = 0
End If
If IsDate(ws.Cells(i, 13).Value) Then
madateP = ws.Cells(i, 13).Value ' Stocker la date si valide
Else
madateP = "" ' Laisser vide si ce n'est pas une date valide
End If
If IsDate(ws.Cells(i, 27).Value) Then
madateH = ws.Cells(i, 27).Value ' Stocker la date si valide
Else
madateH = "" ' Laisser vide si ce n'est pas une date valide
End If
' Ajouter aux totaux
totalTransport = totalTransport + transport
totalDebours = totalDebours + debours
totalDeboursreel = totalDeboursreel + deboursreel
totaldeboursdiff = totaldeboursdiff + deboursdiff
totalHotels = totalHotels + hotels
totalDepense = totalTransport + totalDeboursreel + totalHotels
'AJOUT DES DONNES DANS LISTBOX
' Ajouter les données filtrées à la ListBox
With ListTransport
.AddItem ws.Cells(i, 6).Value ' Nom (colonne B)
.List(.ListCount - 1, 1) = ws.Cells(i, 7).Value
.List(.ListCount - 1, 2) = ws.Cells(i, 8).Value
.List(.ListCount - 1, 3) = ws.Cells(i, 9).Value
.List(.ListCount - 1, 4) = Format(transport, "#,##0.00") ' Montant P
.List(.ListCount - 1, 5) = ws.Cells(i, 11).Value ' Ref Paiem P
.List(.ListCount - 1, 6) = ws.Cells(i, 12).Value ' Acompte P
.List(.ListCount - 1, 7) = ws.Cells(i, 13).Value ' Date Paiem P
End With
With ListHotel
.AddItem ws.Cells(i, 21).Value
.List(.ListCount - 1, 1) = ws.Cells(i, 22).Value
.List(.ListCount - 1, 2) = ws.Cells(i, 23).Value
.List(.ListCount - 1, 3) = Format(hotels, "#,##0.00") ' Montant P
.List(.ListCount - 1, 4) = ws.Cells(i, 25).Value ' Ref Paiem P
.List(.ListCount - 1, 5) = ws.Cells(i, 26).Value ' Acompte P
.List(.ListCount - 1, 6) = ws.Cells(i, 27).Value ' Date Paiem P
.List(.ListCount - 1, 7) = ws.Cells(i, 28).Value ' Observation
End With
' Récupérer le montant de la colonne 15, 17 et 18 (pour le TextBox TextRecouvre)
' Récupérer les données de la feuille "CA N" (ws1)
If i >= 8 Then ' Assurez-vous que la ligne est >= 8 pour "CA N"
If IsNumeric(ws1.Cells(i, 15).Value) Then
recouvre = ws1.Cells(i, 15).Value
Else
recouvre = 0
End If
If IsNumeric(ws1.Cells(i, 17).Value) Then
comission = ws1.Cells(i, 17).Value
Else
comission = 0
End If
If IsNumeric(ws1.Cells(i, 19).Value) Then
netrecouvre = ws1.Cells(i, 19).Value
Else
netrecouvre = 0
End If
' Afficher dans les TextBox
TextRecouvre.Text = Format(recouvre, "#,##0.00")
TextFees.Text = Format(comission, "#,##0.00")
TextNet.Text = Format(netrecouvre, "#,##0.00")
End If
End If
Next i
'FORMAT TOTAUX DANS TEXTBOX (et non LISTBOX)
' Mise à jour des TextBox avec les totaux calculés
TextTRANSP.Text = Format(totalTransport, "#,##0.00")
TextDeb.Text = Format(totalDebours, "#,##0.00")
TexDebreel.Text = Format(totalDeboursreel, "#,##0.00")
TextDiff.Text = Format(totaldeboursdiff, "#,##0.00")
TextHot.Text = Format(totalHotels, "#,##0.00")
TextDepense.Text = Format(totalDepense, "#,##0.00")
Cleanup:
Application.EnableEvents = True ' Réactiver les événements
End Sub
Merci les amis 😀