Creation formulaire de recherche VBA

Bonjour les amis ,
je viens solliciter votre aide pour un problème.Je voudrais créer un formulaire de recherche multicritère(frmrapadh) qui me renvoie des informations d’une table(adherent) entre deux dates (date debut, date fin) avec la possibilité de filtrer ou non par certains champs(collectrice, profession, quartier). J’ai commencé la creation du formulaire(frmrapadh) mais je suis bloqué.Je joins le fichier en question.
Gestion tontineV3.xlsm (140,4 Ko)

Merci

Bonjour
Après avoir analyser ton formulaire frmrapadh celui_ci a 3 combobox qui permettent d’avoir 3 listes collectrice, profession, quartier pour réaliser des filtres
Tu souhaites si je comprends bien utiliser ces filtres pour récupérer des informations d’une table adherent
Quelles sont ces informations à récupérer ?
Où doit-on les récupérer ? (formulaire où, onglet lequel)
Beaucoup d’incertitudes à lever
Merci d’en dire plus

Suite du sujet Creation formulaire de recherche VBA :

Bonjour merci d’abord pour votre réaction.

Je souhaite utiliser ces filtres pour rechercher des informations(Nom Prenom Datenaiss quartier dateinscr codadh profession Collectrice numcpte telmemb)
dans la table adherent comprises entre deux dates et les afficher directement dans le formulaire frmrapadh. De manière pratique si je met date début= 01/01/2020 et date fin =31/01/2020 et que je sélectionne au niveau du combobox profession ‹ ‹ informaticien › ›, que la recherche affiche dans le formulaire frmrapadh tous les informaticiens dont la date inscription(champ se situant dans la table adherent) est comprise entre 01/01/2020 et 31/01/2020. par défaut si je ne sélectionne rien dns les combobox qu’il puisse m afficher tout sans filtre entre les deux dates.

Bonjour merci d’abord pour votre réaction.

Je souhaite utiliser ces filtres pour rechercher des informations(Nom Prenom Datenaiss quartier dateinscr codadh profession Collectrice numcpte telmemb)
dans la table adherent comprises entre deux dates et les afficher directement dans le formulaire frmrapadh. De manière pratique si je met date début= 01/01/2020 et date fin =31/01/2020 et que je sélectionne au niveau du combobox profession ‹ ‹ informaticien › ›, que la recherche affiche dans le formulaire frmrapadh tous les informaticiens dont la date inscription(champ se situant dans la table adherent) est comprise entre 01/01/2020 et 31/01/2020. par défaut si je ne sélectionne rien dns les combobox qu’il puisse m afficher tout sans filtre entre les deux dates.

Ci-joint ma proposition en espérant avoir bien compris tes attentes
J’ai créé un onglet supplémentaire de fonctionnement : « Filtre_adherent »
Dans cet onglet en colonne A la liste des informations avec chaque élément à la suite des uns des autres séparé par un petit tiret :

Nom-Prenom-Datenaiss-quartier-dateinscr-codadh-profession-Collectrice-numcpte-telmemb

Un bouton « Formulaire »
En activant ce bouton le formulaire s’ouvre avec l’ensemble des éléments de filtre vide qui a pour conséquence de remplir la colonne A de l’onglet « Filtre_adherent » de l’ensemble des données de l’onglet « adherent »
Cette ensemble se retrouve dans la combobox « Filtre adhérents » du formulaire
Cette liste est filtrée automatiquement soit par saisie des 2 dates (Date début et Date fin) soit par l’un des choix des 3 autres combobox (Collectrice Profession Quartier) soit par la combinaison des 2
Un seul choix parmis Collectrice Profession Quartier doit être effectué
Le choix de l’une supprime tous choix des 2 autres
Pour effectuer un rafraichissement il faut enlever et remettre un choix ou une saisie pour les dates

J’espère que cela te conviens
Fais des essais et dis moi

Gestion tontineV3.xlsm (175,6 Ko)

merci pour votre réactivité et pour le travail, ce que je voulais c’est que le résultat de la recherche se présente dans le formulaire sous forme de tableau . je vais joindre une image qui illustre un peu ce que je voulais dire .
exemple_type
Merci

c’est le même principe qu’avant (entre deux dates , avec les trois combobox) mais c’est juste l’affichage sous forme de tableau avec les entêtes .

c’est le même principe qu’avant (entre deux dates , avec les trois combobox) mais c’est juste l’affichage sous forme de tableau avec les entêtes .

Merci

J’ai du reprendre toute ma conception
Dommage que tu n’ais pas dés le départ exprimé cette attente en terme de présentation
Je pense que cette version devrait convenir
Fais des essais et dis moi

Gestion tontineV3.xlsm (175,4 Ko)

1 « J'aime »

super c’est exactement ce que je voulais , merci pour tout :+1:

Voici comment j’ai remodifié le formulaire pour lier les trois combobox entre eux et utiliser le bouton recherche aussi:

Private Sub btnrechadh_Click()
ListBox1.Visible = True
End Sub

Private Sub cbonomclientret_Change()
ListBox1.Visible = False
If cbonomclientret <> «  » Then
donnée = cbonomclientret
donnée2 = ComboBox1
donnée3 = ComboBox2
datedébut = «  »
datefin = «  »
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » Then
datedébut = Me.txtdatedebrapadh
datefin = Me.TextBox1
End If
If Sheets(« Filtre_adherent »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_adherent »).Range(« A2 », « J » & Sheets(« Filtre_adherent »).Range(« A65535 »).End(xlUp).Row).Clear
End If
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If datedébut <> «  » And datefin <> «  » And ComboBox1 = «  » And ComboBox2 = «  » Then
If Sheets(« adherent »).Range(« H » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
If datedébut <> «  » And datefin <> «  » And ComboBox1 <> «  » And ComboBox2 = «  » Then
If Sheets(« adherent »).Range(« H » & i) = donnée And Sheets(« adherent »).Range(« G » & i) = donnée2 And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
If datedébut <> «  » And datefin <> «  » And ComboBox1 <> «  » And ComboBox2 <> «  » Then
If Sheets(« adherent »).Range(« H » & i) = donnée And Sheets(« adherent »).Range(« G » & i) = donnée2 And Sheets(« adherent »).Range(« D » & i) = donnée3 And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
i = i + 1
Loop
Call userform_initialize
End If
End Sub

Private Sub ComboBox1_Change()
ListBox1.Visible = False
If ComboBox1 <> «  » Then
donnée = ComboBox1
donnée2 = cbonomclientret
donnée3 = ComboBox2
datedébut = «  »
datefin = «  »
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » Then
datedébut = Me.txtdatedebrapadh
datefin = Me.TextBox1
End If
If Sheets(« Filtre_adherent »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_adherent »).Range(« A2 », « J » & Sheets(« Filtre_adherent »).Range(« A65535 »).End(xlUp).Row).Clear
End If
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If datedébut <> «  » And datefin <> «  » And cbonomclientret = «  » And ComboBox2 = «  » Then
If Sheets(« adherent »).Range(« G » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
If datedébut <> «  » And datefin <> «  » And cbonomclientret <> «  » And ComboBox2 = «  » Then
If Sheets(« adherent »).Range(« G » & i) = donnée And Sheets(« adherent »).Range(« H » & i) = donnée2 And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
If datedébut <> «  » And datefin <> «  » And cbonomclientret <> «  » And ComboBox2 <> «  » Then
If Sheets(« adherent »).Range(« G » & i) = donnée And Sheets(« adherent »).Range(« H » & i) = donnée2 And Sheets(« adherent »).Range(« D » & i) = donnée3 And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
i = i + 1
Loop
Call userform_initialize
End If
End Sub

Private Sub ComboBox2_Change()
ListBox1.Visible = False
If ComboBox2 <> «  » Then
donnée = ComboBox2
donnée2 = cbonomclientret
donnée3 = ComboBox1
datedébut = «  »
datefin = «  »
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » Then
datedébut = Me.txtdatedebrapadh
datefin = Me.TextBox1
End If
If Sheets(« Filtre_adherent »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_adherent »).Range(« A2 », « J » & Sheets(« Filtre_adherent »).Range(« A65535 »).End(xlUp).Row).Clear
End If
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If datedébut <> «  » And datefin <> «  » And ComboBox1 = «  » And cbonomclientret = «  » Then
If Sheets(« adherent »).Range(« D » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
If datedébut <> «  » And datefin <> «  » And ComboBox1 = «  » And cbonomclientret <> «  » Then
If Sheets(« adherent »).Range(« D » & i) = donnée And Sheets(« adherent »).Range(« H » & i) = donnée2 And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
If datedébut <> «  » And datefin <> «  » And ComboBox1 <> «  » And cbonomclientret <> «  » Then
If Sheets(« adherent »).Range(« D » & i) = donnée And Sheets(« adherent »).Range(« H » & i) = donnée2 And Sheets(« adherent »).Range(« G » & i) = donnée3 And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
End If
i = i + 1
Loop
Call userform_initialize
End If
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub lblcollecrapadh_Click()

End Sub

Private Sub ListBox1_Click()

End Sub

Private Sub MultiPage1_Change()

End Sub

Private Sub TextBox1_Change()
ListBox1.Visible = False
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » Then
datedébut = Me.txtdatedebrapadh
datefin = Me.TextBox1
If Sheets(« Filtre_adherent »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_adherent »).Range(« A2 », « J » & Sheets(« Filtre_adherent »).Range(« A65535 »).End(xlUp).Row).Clear
End If
If cbonomclientret = «  » And ComboBox1 = «  » And ComboBox2 = «  » Then
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
Else

If cbonomclientret <> «  » And ComboBox1 = «  » And ComboBox2 = «  » Then
donnée = cbonomclientret
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« adherent »).Range(« H » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
End If

If cbonomclientret = «  » And ComboBox1 <> «  » And ComboBox2 = «  » Then
donnée = ComboBox1
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« adherent »).Range(« G » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
End If

If cbonomclientret = «  » And ComboBox1 = «  » And ComboBox2 <> «  » Then
donnée = ComboBox2
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« adherent »).Range(« D » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
End If
End If
Call userform_initialize
End If
End Sub

Private Sub txtdatedebrapadh_Change()
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » Then
datedébut = Me.txtdatedebrapadh
datefin = Me.TextBox1
If Sheets(« Filtre_adherent »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_adherent »).Range(« A2 », « J » & Sheets(« Filtre_adherent »).Range(« A65535 »).End(xlUp).Row).Clear
End If
If cbonomclientret = «  » And ComboBox1 = «  » And ComboBox2 = «  » Then
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
Else

If cbonomclientret <> «  » And ComboBox1 = «  » And ComboBox2 = «  » Then
donnée = cbonomclientret
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« adherent »).Range(« H » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
End If

If cbonomclientret = «  » And ComboBox1 <> «  » And ComboBox2 = «  » Then
donnée = ComboBox1
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« adherent »).Range(« G » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
End If

If cbonomclientret = «  » And ComboBox1 = «  » And ComboBox2 <> «  » Then
donnée = ComboBox2
ligne = 2
i = 2
Do While i < Sheets(« adherent »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« adherent »).Range(« D » & i) = donnée And CDate(Sheets(« adherent »).Range(« E » & i)) >= datedébut And CDate(Sheets(« adherent »).Range(« E » & i)) <= datefin Then
Sheets(« Filtre_adherent »).Range(« A » & ligne, « J » & ligne).Value = Sheets(« adherent »).Range(« A » & i, « J » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
End If
End If
Call userform_initialize
End If
End Sub

Private Sub userform_initialize()
Application.Wait (Now + TimeValue(« 0:00:01 »))
End Sub

Si cela te conviens c’est parfait
Une petite amélioration pour un traitement plus rapide lorsque on filtre par les dates :

A la place de ceci :

Private Sub txtdatedebrapadh_Change()
If Me.txtdatedebrapadh <> « » And Me.TextBox1 <> « » Then

mettre :

Private Sub txtdatedebrapadh_Change()
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » And UBound(Split(Me.txtdatedebrapadh, « / »)) = 2 And UBound(Split(Me.TextBox1, « / »)) = 2 Then

Idem ici :

Private Sub TextBox1_Change()
ListBox1.Visible = False
If Me.txtdatedebrapadh <> « » And Me.TextBox1 <> « » Then

mettre ceci :

Private Sub TextBox1_Change()
ListBox1.Visible = False
If Me.txtdatedebrapadh <> «  » And Me.TextBox1 <> «  » And UBound(Split(Me.txtdatedebrapadh, « / »)) = 2 And UBound(Split(Me.TextBox1, « / »)) = 2 Then

Et ainsi d’enclencher le traitement quand la saisie de la 2° date est réalisée au 2/3 et non dés le 1° caractère saisie ce qui redéclenche ce traitement à tous les caractères suivant saisie et donc engendre un petit délais pour obtenir le résultat

Un plus non négligeable qui rajoute du confort

1 « J'aime »

Bien reçu ; merci beaucoup , je l’ai remarqué effectivement

Rebonjour , j’espère que vous allez bien j’ai un souci au niveau de l’exécution du code d’un formulaire(frmbrouillard).
Au fait sur ce formulaire je voudrais afficher le solde antérieur(txtsoldeveille) à une date(txtdatedebbroui) saisie dans le formulaire.Le solde en question est la différence entre les colonnes"montantdep" et « montantret » de la feuille « brouillard_caisse » antérieure à la date ''txtdatedebbroui" saisie dans le formulaire .ce solde antérieur doit s’afficher au niveau de "Solde veille du formulaire « frmbrouillard ». J"ai essayé un code mais il ne marche pas .Prière m’aider svp.
Ci-dessous le fichier et mon code
Gestion tontineV6.xlsm (448,6 Ko)

Private Sub txtdatedebbroui_Change()
lstbroui.Visible = False
If Me.txtdatedebbroui <> «  » And Me.txtdatefinbroui <> «  » And UBound(Split(Me.txtdatedebbroui, « / »)) = 2 And UBound(Split(Me.txtdatefinbroui, « / »)) = 2 Then
datedébut = Me.txtdatedebbroui
datefin = Me.txtdatefinbroui
If Sheets(« Filtre_brouillard »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_brouillard »).Range(« A2 », « H » & Sheets(« Filtre_brouillard »).Range(« A65535 »).End(xlUp).Row).Clear
End If
If cbotypopebroui = «  » Then
ligne = 2
i = 2
Do While i < Sheets(« Brouillard_caisse »).Range(« A65535 »).End(xlUp).Row + 1
If CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) >= datedébut And CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) <= datefin Then
Sheets(« Filtre_brouillard »).Range(« A » & ligne, « H » & ligne).Value = Sheets(« Brouillard_caisse »).Range(« A » & i, « H » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
Else
If cbotypopebroui <> «  » Then
donnée = cbotypopebroui
ligne = 2
i = 2
D2 = 0
D3 = 0
Do While i < Sheets(« Brouillard_caisse »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« Brouillard_caisse »).Range(« C » & i) = donnée And CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) >= datedébut And CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) <= datefin Then
Sheets(« Filtre_brouillard »).Range(« A » & ligne, « H » & ligne).Value = Sheets(« Brouillard_caisse »).Range(« A » & i, « H » & i).Value
ligne = ligne + 1
End If
If CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) < datedébut Then
If Sheets(« Brouillard_caisse »).Range(« C » & i).Value = « DEP » Then
D2 = D2 + Sheets(« Brouillard_caisse »).Range(« F » & i).Value
End If
If Sheets(« Brouillard_caisse »).Range(« C » & i).Value = « RET » Then
D3 = D3 + Sheets(« Brouillard_caisse »).Range(« G » & i).Value
End If
End If
i = i + 1
Loop
End If
soldvei = D2 - D3
Me.txtsoldeveille.Value = soldvei
End If
Call userform_initialize
End If
End Sub

Private Sub txtdatefinbroui_Change()
lstbroui.Visible = False
If Me.txtdatedebbroui <> «  » And Me.txtdatefinbroui <> «  » And UBound(Split(Me.txtdatedebbroui, « / »)) = 2 And UBound(Split(Me.txtdatefinbroui, « / »)) = 2 Then
datedébut = Me.txtdatedebbroui
datefin = Me.txtdatefinbroui
If Sheets(« Filtre_brouillard »).Range(« A2 ») <> «  » Then
Sheets(« Filtre_brouillard »).Range(« A2 », « H » & Sheets(« Filtre_brouillard »).Range(« A65535 »).End(xlUp).Row).Clear
End If
If cbotypopebroui = «  » Then
ligne = 2
i = 2
Do While i < Sheets(« Brouillard_caisse »).Range(« A65535 »).End(xlUp).Row + 1
If CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) >= datedébut And CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) <= datefin Then
Sheets(« Filtre_brouillard »).Range(« A » & ligne, « H » & ligne).Value = Sheets(« Brouillard_caisse »).Range(« A » & i, « H » & i).Value
ligne = ligne + 1
End If
i = i + 1
Loop
Else

If cbotypopebroui <> «  » Then
donnée = cbotypopebroui
ligne = 2
i = 2
Do While i < Sheets(« Brouillard_caisse »).Range(« A65535 »).End(xlUp).Row + 1
If Sheets(« Brouillard_caisse »).Range(« C » & i) = donnée And CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) >= datedébut And CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) <= datefin Then
Sheets(« Filtre_brouillard »).Range(« A » & ligne, « H » & ligne).Value = Sheets(« Brouillard_caisse »).Range(« A » & i, « H » & i).Value
ligne = ligne + 1
End If
If CDate(Sheets(« Brouillard_caisse »).Range(« A » & i)) < datedébut Then
If Sheets(« Brouillard_caisse »).Range(« C » & i).Value = « DEP » Then
D2 = D2 + Sheets(« Brouillard_caisse »).Range(« F » & i).Value
End If
If Sheets(« Brouillard_caisse »).Range(« C » & i).Value = « RET » Then
D3 = D3 + Sheets(« Brouillard_caisse »).Range(« G » & i).Value
End If
End If
i = i + 1
Loop
End If
soldvei = D2 - D3
Me.txtsoldeveille.Value = soldvei
End If
Call userform_initialize
End If
End Sub

Private Sub userform_initialize()
Application.Wait (Now + TimeValue(« 0:00:01 »))
End Sub

Bonjour
Pour étudier ce dysfonctionnement il serait souhaitable que j’accède à la structure de ton formulaire
Celui est verrouillé par mot de passe
Peux tu m’envoyer un exemplaire déverrouillé pour que je puisse t’aider
Merci

:grinning: Ah oui sorry ,je testais la fonctionnalité j’ai oublié.
Ci-dessous le fichier déverouillé
Gestion tontineV6.xlsm (448,6 Ko)

Merci d’avance

Je viends de tester c’est nickel :

Maintenant je l’ai testé en remplissant les dates puis le type d’opération puis en retournant dans la date de début et de la modifier pour déclencher la procédure qui alimente le solde veille

Ton code est parfait puisque ce dernier champ a bien été alimenté

C’est peut être dans un autre cas de figure que tu constates l’anomalie mais il faut me dire précisément laquelle pour en cerner la raison qui de toute façon n’est pas dans les lignes de code proprement dites mais certainement dans leur implantation

Merci du retour

Je pense avoir découvert l’objet de tes soucis
En testant à l’inverse le résultat Solde veille en agissant sur la date de fin je n’ai pas du tout obtenu le même résultat avec un chiffre exorbitant alors qu’avec l’intervention sur la date de début le résultat est bien celui attendu soit -3500
Pourtant ce sont exactement les même lignes de codes qui le fournissent mais implantées à 2 endroits différents
L’origine en est sur cette ligne pour la partie incluse dans la procédure « Private Sub txtdatefinbroui_Change() »

D2 = D2 + Sheets(« Brouillard_caisse »).Range(« F » & i).Value

Alors que dans l’autre traitement de la date de début la somme s’effectue bien correctement dans celui-ci au lieu d’une somme les chiffres se mettent les uns derrière les autres sans être totalisés
Les mystères d’Excel 2 résultats complétement différents pour un même traitement strictement identique
La seule parade à cette aberration c’est d’écrire cette ligne comme ceci :

D2 = D2 + Sheets(« Brouillard_caisse »).Range(« F » & i).Value*1

Rajouter en bout de Sheets(« Brouillard_caisse »).Range(« F » & i).Value la multiplication par 1 qui donne le même résultat mais sans cette aberration
Seule nécessité c’est de définir les variable concerné par l’opération ici D2 avec une valeur numérique à 0
Donc mettre en préambule de la boucle la définition des variable D2 et D3 comme ceci :
donnée = cbotypopebroui
ligne = 2
i = 2
D2 = 0
D3 = 0
Do While i < Sheets(« Brouillard_caisse »).Range(« A65535 »).End(xlUp).Row + 1

Puis rajouter 1 ici :
D2 = D2 + Sheets(« Brouillard_caisse »).Range(« F » & i).Value
1
D3 = D3 + Sheets(« Brouillard_caisse »).Range(« G » & i).Value*1

Je te joins ton fichier corrigé tout fonctionne normalement quelque soit la date modifiée « Solde veille » = -3500

J’espère que tout tes soucis sont oubliés ainsi

Gestion tontineV6-2.xlsm (444,8 Ko)

Ah oui je vois , merci beaucoup pour l’analyse. le problème est en partie résolu , l’autre chose que je voulais c’est que le solde veille s’affiche directement à la saisie de la date debut(sans attendre la date fin ou la combobox) qu’on ai entré ou pas une valeur dans la combobox "cbotypopebroui’’
En gros que l’affichage du solde veille dépende uniquement de la saisie de la date debut et qu’il s’affiche en même temps(qu’on ai pas besoin de revenir modifier la date debut avant que ça ne s’affiche )

Merci

J’ai donc supprimé toutes les lignes de code qui alimentent « Solde veille » et j’ai rajoutées ces instructions dans la procédure « Private Sub txtdatedebbroui_Change() » en tout début :

If Me.txtdatedebbroui <> «  » And UBound(Split(Me.txtdatedebbroui, « / »)) = 2 Then
D2 = 0
D3 = 0
h = 2
Do While h < Sheets(« Brouillard_caisse »).Range(« A65535 »).End(xlUp).Row + 1
If CDate(Sheets(« Brouillard_caisse »).Range(« A » & h)) < Me.txtdatedebbroui Then
If Sheets(« Brouillard_caisse »).Range(« C » & h).Value = « DEP » Then
D2 = D2 + Sheets(« Brouillard_caisse »).Range(« F » & h).Value * 1
End If
If Sheets(« Brouillard_caisse »).Range(« C » & h).Value = « RET » Then
D3 = D3 + Sheets(« Brouillard_caisse »).Range(« G » & h).Value * 1
End If
End If
h = h + 1
Loop
soldvei = D2 - D3
Me.txtsoldeveille.Value = soldvei
Else
Me.txtsoldeveille.Value = 0
End If

Ainsi « Solde veille » est alimenté en fonction uniquement de la saisie de la date de début

Ci-joint ton fichier adapté dans cet esprit

Gestion tontineV6-2.xlsm (493,5 Ko)

1 « J'aime »