Creation formulaire de recherche VBA

J’ai testé et c’est exactement ce que je voulais .Vous êtes super ! Un grand merci pour la disponibilité !!

Rebonjour,
Je reviens avec deux petits soucis .

1- Sur la feuille « Brouillard_caisse » J’ai fais une différence des colonnes F et G (F-G) qui renvoie la valeur en K7.La feuille « Brouillard_caisse » est renseignée automatiquement lors de la saisie des formulaires « frmdepotcollec » et « frmretrait ». J’ai bien mis les colonnes F et G en format nombre mais lorqu’on rempli les formulaires « frmdepotcollec » et « frmretrait » , les valeurs renvoyées dans les colonnes F et G sont au format texte au lieu d’etre au format nombre , ce qui fait que la difference calculée en K7 ne se met pas à jour. Les champs des formulaires qui vont à ces niveaux pour F c’est « txtmontdep » de « frmdepotcollec » et pour G c’est « txtmonret » de « frmretrait ».J’ai essayé le code Me.txtmondep.value=format(Me.txtmontdep.value, « #####.0 ») que j’ai trouvé sur le net mais ca ne marche pas.

2- J’étais entrain de créer un numéro de pièce automatique dans la feuille « retraits » du format A01ANNEERET00001 (ANNEE c’est l’année en cours A012020RET00005 par exemple) au niveau de la colonne G qui s’auto-incremente dans le tableau à chaque saisie de retrait dans le formulaire .J’ai essayé les fonctions de excel ca a marché mais je me suis rendu compte que puisque c’est excel qui gère ca automatiquement , chaque fois que j’aurais à supprimer une ligne(pour erreur de saisie par exemple), ca desincremente automatiquement tous les numéros posterieurs à ce numero. je voulais voir s’il ya un moyen de gerer l’automatisation de la piece dans le formulaire frmretrait en VBA .
Ci-dessous le fichier
Gestion tontineV7.xlsm (443,6 Ko)

Merci

Tu peux essayer d utiliser ce que j ai utilisé pour réaliser correctement la somme

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

Le *1 en fin de donnée

Essaies et dis moi

Pour le reste je regarde demain

Oui oui je l’ai essayé ça n’a pas changé , la valeur renvoyée sur la feuille excel est toujours en format texte.

Il faut mettre par exemple comme ceci :

Sheets("Brouillard_caisse ").Range (« F1 »).Value=txtmontdep

Ou
Sheets(« Brouillard_caisse »).Range (« F1 »).Value=txtmontdep*1

Essaies

J ai mon PC éteint je regarde demain

Le premier point a marché avec l’ajout du *1.Il reste pour le point 2(pour la piece automatique)

Au cas vous voudriez travailler sur le fichier considerez cette version

Gestion tontineV7.xlsm (454,7 Ko)

Merci

Bonjour

J’ai modifié ta macro exécuté par le bouton « Retraits client » de l’onglet « Tableau de Bord » ainsi :

Sub formulaireretrait()
année = Format(Date, « YYYY »)
réservé = «  »
i = 2
Do While i < Sheets(« retraits »).Range(« G65535 »).End(xlUp).Row + 1
If Sheets(« retraits »).Range(« G » & i) <> «  » Then
If Mid(Sheets(« retraits »).Range(« G » & i), 4, 4) = année Then
If réservé <> «  » Then
If Right(Sheets(« retraits »).Range(« G » & i), 5) > Right(réservé, 5) Then
réservé= Sheets(« retraits »).Range(« G » & i)
End If
Else
réservé = Sheets(« retraits »).Range(« G » & i)
End If
End If
End If
i = i + 1
Loop
If réservé <> «  » Then
numéro = Mid(réservé, 1, Len(réservé) - 5) & Right(réservé, 5) + 1
Else
numéro = « A01 » & année & RET & « 00001 »
End If
frmretrait.txtnumpieceret = numéro
frmretrait.Show
End Sub

Ce traitement scrute toutes les données de la colonne G
Toutes celles qui du 4° au 8° caractère correspondent à l’année en cours sont comparées pour récupérer celle qui détient sur ses 5 derniers caractères le rang le plus élevé
Une fois la données de l’année au rang le plus haut récupérée je détermine le numéro suivant en lui ajoutant un +1 sur ses 5 derniers caractères que j’insère dans le textbox « Numéro de pièce » du formulaire
Si aucune donnée réservée n’est récupérée (1° numéro d’une nouvel année par exemple) je confectionne le numéro au format que tu as décrit :

A012020RET

auquel je rajoute le 1° rang soit 00001

ce qui donne ce nouveau numéro affecté pour l’année 2020 :

A012020RET00001

année 2021

A012021RET00001

Attention j’ai choisi la solution qui évite tout doublon celle d’analyser chaque cellule de la colonne G
C’est l’option la plus fiable mais si avec les quelques données en colonne G de l’onglet « retraits » le traitement du bouton 'Retraits client" est instantané il en sera pas de même si la colonne G prend de l’ampleur
Donc voir à l’usage un potentiel ralentissement de ce traitement lié au nombre de données grandissant de cette colonne G
Il faudra opter pour une autre approche si le délais de ce traitement devient rédhibitoire

J’ai légèrement agrandi le texbox « Numéro de pièce » pour une présentation du numéro correct

Si le format du numéro devait évoluer il faudra adapter ce code
Pour l’instant il fonctionne parfaitement avec le format que tu as fourni

Reste après à enregistrer ce numéro obtenu avec le bouton « Valider le retrait » du userform « Formulaire de retrait client »
Je te laisse la main à ce niveau

Donnes moi des nouvelles

Ci-joint ton fichier adapté

Gestion tontineV7.xlsm (448,9 Ko)

1 « J'aime »

Bonjour , merci pour le travail , j’ai executé le code , juste un petit souci au niveau de
numéro = « A01 » & année & « RET » & « 00001 » (il manquait les quotes) et au niveau de j’ai du formater le « 00001 » sinon en incrémentant il fait A012020RET2 au lieu de A012020RET00002
numéro = Mid(réservé, 1, Len(réservé) - 5) & Format(Right(réservé, 5) + 1, « 00000 »)

Après je me suis inspiré de ca pour ecrire ceci directement dans le formulaire frmretrait (Je ne sais si ca reglera le probleme de lenteur lorsque la base sera lourde :grinning:)

Private Sub cbonomclientret_Change()
A = « A01 »
B = Year(Date)
C = « RET »
D = « 00001 »
N = 1
M = 1
If txtdate <> «  » Then
If Sheets(« retraits »).Range(« G2 »).Value = «  » Then
Me.txtnumpieceret.Value = A & B & C & D
Else
N = Right(Sheets(« retraits »).Range(« G65335 »).End(xlUp).Value, 5)
Me.txtnumpieceret.Value = A & B & C & Format(N + 1, « 00000 »)
End If
End If

Merci

Très bien je vois que tu te défends en VBA
J avais envisagé cette option pour ne pas être tributaire de la charge de la colonne G
Mais si la colonne n est pas correctement triée la dernière donnée ne sera pas obligatoirement le dernier numéro et donc soucis soucis de s appuyer dessus pour déterminer le suivant
A imaginer au pire que cette colonne soit triée du plus grand au plus petit la ligne de code :

N = Right(Sheets(« retraits »).Range(« G65335 »).End(xlUp).Value, 5)

Récupéra le tout premier le plus ancien et non le plus récent ce qui ne sera pas bon

On est pas certain du bien fondé de la dernier donnée de la colonne ce qui m as conduit à mon choix d une analyse globale de toutes les données de la colonne G pour déterminer le nouveau code avec le risque d un délais de traitement qui risque de s amplifier

A toi de voir

Merci :grinning: pour le compliment en plus des recherches sur le net,j’essaye d’analyser la logique du contenu chaque fois que vous m’envoyez du code et ca ma permis de comprendre beaucoup de choses , sinon il ya 1 semaine je n’avais jamais écris du code , je n’imaginais même pas qu’on pouvais faire tout ceci avec excel. Donc le merci vous reviens :+1:.
Pour le 65335 est ce que ça veut dire que excel ne peut gérer que ce nombre de ligne dans une feuille ?
Puisque le volume d’activité qu’il va gerer n’est pas trop grand je crois que je vais y aller avec votre code pour etre sur qu’il renvoie le bon numero de piece .

Merci

Me concernant j ai aucun mérite ayant travaillé pendant près de 20 ans dans le monde de la programmation Excel Word access oracle et l environnement et à faire dialoguer tout ces univers entre eux avec le maximum d automatisation
Aujourd hui en très grande vacances de surcroît confine comme tout un chacun je M occupe et garde le pied un peu dans tout cela
Une sorte de petite passion

Pour un débutant chapeau j ai la nette impression que tu as cela dans la peau
Pour le 65536 ce chiffre trouve son origine dans Excel version 2003
A la époque c était le numéro de la dernière ligne des feuilles dans cette version
Le but étant de démarrer â coup sur le départ de l instruction :

Range(« G65335 »).End(xlUp)

La partie End qui veut dire fin d un état materialisé par la cellule de départ ciblée dans le Range qui précède si celle ci est vide la fin de cette état sera lorsque une première cellule trouvée sera non vide ici en remontant la colonne (xlUp) à la inverse si celle ci est non vide
lorsque une première cellule trouvée sera vide
Donc pour repérer dans cette esprit la dernière cellule non vide d une colonne on utilise cet ligne de code en prenant une cellule à l état vide bien plus bas et pour être certain de cet état on utilise la plus éloignée et donc à l époque d Excel 2003 on prenait celle de la dernière ligne de la feuille soit la 65536
Avec Excel d aujourd hui plus de limite de lignes donc j ai gardé ce numéro de ligne par habitude mais on pourrait très bien en prendre une autre l essentiel étant de prendre une cellule dont on est certain quelque soit le nombre de données qu elle soit toujours vide

Cette instruction existe dans l autre sens de haut en bas (xlDown) de droite à gauche (xltoleft) et gauche à droite (xltoright) avec exactement le même fonctionnement que le sens qui change

Voilà pour les explications du 65536

Pour le choix de ce traitement je commencerai effectivement par ma proposition mieux verouillée et à l usage voir si elle tient la route quite à la faire évoluer

Merci pour la brillante explication , elle me sera beaucoup utile .

Bonjour , je viens vous gener à nouveau pour deux inquietudes:

1- Je suis entrain de gerer les les accès par comptes utilisateur au fichier sur une page « connexion » mais il ya une erreur lors de l’affectation de la recherche Vlookup à ma variable ''mot_de_passe" en cliquant sur ''connexion" , la deconnexion elle marche bien .
Voici mon code :

Option Explicit
Private Sub workbook_open()

Sheets(« connexion »).Visible = True
Sheets(« Filtre_adherent »).Visible = 2
Sheets(« adherent »).Visible = 2
Sheets(« utilisateurs »).Visible = 2
Sheets(« collectrices »).Visible = 2
Sheets(« repartition_collecteur »).Visible = 2
Sheets(« cycle »).Visible = 2
Sheets(« depots »).Visible = 2
Sheets(« retraits »).Visible = 2
Sheets(« filtre_retraits »).Visible = 2
Sheets(« filtre_solde »).Visible = 2
Sheets(« Brouillard_caisse »).Visible = 2
Sheets(« type_ope »).Visible = 2
Sheets(« profession »).Visible = 2
Sheets(« Filtre_depots »).Visible = 2
Sheets(« type_piece »).Visible = 2
Sheets(« zone »).Visible = 2
Sheets(« Filtre_brouillard »).Visible = 2
Sheets(« tableau de bord »).Visible = 2

End Sub

Private Sub btnconnex_Click()
Dim mot_de_passe As String
Dim role As String

'mot_de_passe = WorksheetFunction.VLookup(txtusername, Sheets(« Utilisateurs »).Range(« B:D », 2), 0)
'role = WorksheetFunction.VLookup(txtusername, Sheets(« utilisateurs »).Range(« B:D », 3), 0)

'If mot_de_passe = txtpassw And role = « admin » Then
Sheets(« Filtre_adherent »).Visible = True
Sheets(« adherent »).Visible = True
Sheets(« utilisateurs »).Visible = True
Sheets(« collectrices »).Visible = True
Sheets(« repartition_collecteur »).Visible = True
Sheets(« cycle »).Visible = True
Sheets(« depots »).Visible = True
Sheets(« retraits »).Visible = True
Sheets(« filtre_retraits »).Visible = True
Sheets(« filtre_solde »).Visible = True
Sheets(« Brouillard_caisse »).Visible = True
Sheets(« type_ope »).Visible = True
Sheets(« profession »).Visible = True
Sheets(« Filtre_depots »).Visible = True
Sheets(« type_piece »).Visible = True
Sheets(« zone »).Visible = True
Sheets(« Filtre_brouillard »).Visible = True
Sheets(« tableau de bord »).Visible = True
Sheets(« tableau de bord »).Select
Sheets(« connexion »).Visible = 2
'End If

End Sub

2-/ L’autre problème concerne l’impression . Par exemple sur le formulaire « frmrapret » entre le 01/01/2020 et le 22/04/2020 les opérations depassent la partie visible de la listbox mais l’impression ne sort que la partie visible et coupe aussi une partie vers la droite .s’il y avait par exemple 1000 operations de retrait est ce possible de faire sortir ca sur plusieurs page avec l’entete d’en haut ?

Ci dessous le fichier
Gestion tontineV9.xlsm (487,6 Ko)

Aussi unexemple du fichier imprimé
Microsoft Visual Basic pour Applications.pdf (40,6 Ko)

Merci

J’ai commenté un certains nombre de ligne , normalement elles ne sont pas commentées.

Bonjour
De plus en plus fort rien ne te fait peur
Donc plusieurs anomalies constatées
Ici :
Ces lignes
mot_de_passe = WorksheetFunction.VLookup(txtusername, Sheets(« Utilisateurs »).Range(« B:D », 2), 0)
role = WorksheetFunction.VLookup(txtusername, Sheets(« utilisateurs »).Range(« B:D », 3), 0)

sont incorrectes

L’instruction Vlookup est suivi de la donnée à recherché txtusername de la plage de recherche Sheets(« Utilisateurs »).Range(« B:D ») et de la récupération dans cette plage de la donnée caractérisée par un chiffre qui correspond au décalage à réaliser par rapport à la colonne de la donnée
ce chiffre de décalage doit être mentionné après la zone de recherche or dans ton écriture elle est incluse dans cette zone
Sheets(« Utilisateurs »).Range(« B:D », 2)
Il faut écrire
Sheets(« Utilisateurs »).Range(« B:D »), 2
Ce qui donne
mot_de_passe = WorksheetFunction.VLookup(txtusername, Sheets(« Utilisateurs »).Range(« B:D »), 2, 0)
role = WorksheetFunction.VLookup(txtusername, Sheets(« utilisateurs »).Range(« B:D »), 3, 0)

Et tout baigne

De plus :

Lorsque on masque un onglet avec cette instruction :
Sheets(« connexion »).Visible = False
On démasque avec celle-ci :
Sheets(« connexion »).Visible = True
Si on masque avec :
Sheets(« connexion »).Visible = 2
On doit démasquer avec :
Sheets(« connexion »).Visible = -1
Sinon on ne démasque rien
J’ai donc adapté ton code dans cet esprit en utilisant pour masquer :
Sheets(« connexion »).Visible = 2
Pour démasquer
Sheets(« connexion »).Visible = -1

Cela fonctionne nettement mieux

Et encore :

Attention la macro évènementielle :
Private Sub workbook_open()
End Sub

Ne se met jamais derrière un bouton mais dans le Thiswoorkbook du classeur pour qu’ à son ouverture elle se déclenche

Donc j’ai rapatrié ces lignes dans le Thisworkbook :
Private Sub workbook_open()
Sheets(« connexion »).Visible = -1
Sheets(« Filtre_adherent »).Visible = 2
Sheets(« adherent »).Visible = 2
Sheets(« utilisateurs »).Visible = 2
Sheets(« collectrices »).Visible = 2
Sheets(« repartition_collecteur »).Visible = 2
Sheets(« cycle »).Visible = 2
Sheets(« depots »).Visible = 2
Sheets(« retraits »).Visible = 2
Sheets(« filtre_retraits »).Visible = 2
Sheets(« filtre_solde »).Visible = 2
Sheets(« Brouillard_caisse »).Visible = 2
Sheets(« type_ope »).Visible = 2
Sheets(« profession »).Visible = 2
Sheets(« Filtre_depots »).Visible = 2
Sheets(« type_piece »).Visible = 2
Sheets(« zone »).Visible = 2
Sheets(« Filtre_brouillard »).Visible = 2
Sheets(« tableau de bord »).Visible = 2
End Sub

Ce qui à pour effet après avoir activé les macros de masquer tous les onglets sauf l’onglet « Connexion »

Ci-joint ton fichier corrigé
Je regarde le 2° point

Gestion tontineV9-2.xlsm (458,8 Ko)

Pour le 2°
Ton instruction pour l’impression :
frmrapret.PrintForm
Imprime uniquement le userform « frmrapret »
Donc il est normal que son impression soit à l’identique de sa présentation
Je te propose d’imprimer la source de la listebox « lstrapret » qui est directement reliée aux donnée de l’onglet « Filtre_retraits »
En utilisant cette ligne de code à la place :
Sheets(« Filtre_retraits »).PrintOut

Pour avoir l’entête rajoute la dans cette onglet ainsi :
Sur la barre de tâche sélectionnes « Mise en page »
Choix « Imprimer les titres »
Dans la petite fenêtre qui vient de s’ouvrir choisi « Entête/Pied de page »
Cliques sur En-tête personalisée
Dans la nouvelle fenêtre affichée choisis la petite fenêtre pour mettre cet entête en fonction de la position souhaitée sur la feuille
Puis Ok

J’ai fais un essai c’est nickel

Donnes moi des nouvelles

Bien reçu , merci pour les explications .je vais essayer de revoir mes feuilles filtres pour y introduire certains éléments saisies dans le formulaire .je vous tiens informé.

Merci

Bonsoir , voici un peu comment j’ai géré cela
Gestion tontineV10.xlsm (499,4 Ko)
Test impression.pdf (60,9 Ko)
C’est le resultat de l’impression du formulaire « frmrapadh » .
J’ai retravaillé un peu la feuille « filtre_adherent » et le bouton « impression » de frmrapadh.

Merci pour les instructions

Bonjour ,

J’espere que vous vous portez bien , je reviens avec deux soucis.

1-/ J’ai créé un formulaire « frmmodifret » qui doit aller chercher des details sur une piece de retrait dans la feuille « retraits » et permettre de modifier ou supprimer la ligne en question.La modification ou la suppression doit affecter à la fois « retraits » et « brouillard_caisse » (puisque la piece se trouve au deux endroits). Dans mon code , la modification marche bien , mais la suppression au début j’ai remarqué qu’il fallait que je soit sur la feuille en question pour que ca marche et dans « brouillard_caisse » lorsque la piece n’existe pas , ca supprime toute autre ligne se situant dans la position « A2 ». Actuellement le code me sort une erreur carrement a l’execution. le meme probleme se repete dans le formulaires « frmdepcollec ».

2/ Le second souci concerne l’impression , lorsque j’imprime , l’impression me renvoie les données filtrées en plus de beaucoup de lignes vides .Si je fais auparavant une recherche qui a fais 100 lignes et qu’apres j’en fais une autre qui n’a que deux lignes de données , l’impression me renvoie les deux lignes de données en plus de 98 lignes vides .Vous pouvez prendre « Filtre_retraits » comme exemple , son formulaire c’est "frmrapret"Je crois que c’est les tableaux dans les feuilles « filtres_… » mais malheuresement j’ai besoin des tableaux aussi.
Je joins le fichier , le code pour le point 1 et un exemplaire d’impression pour le point 2.
Gestion tontineV10_2.xlsm (578,2 Ko)
Gestion tontineV10_2.pdf (51,9 Ko)

Private Sub cbocodadhret_Change()

End Sub

Private Sub btnmodifrechdep_Click()
txtmontret.Enabled = True
txtdateret.Enabled = True
End Sub

Private Sub btnquitter_Click()
Unload Me
End Sub

Private Sub btnsupprechdep_Click()

Dim i%, D1%, Ws As Worksheet
Set Ws = Sheets(« retraits »)
D1 = Ws.Range(« A » & Rows.Count).End(xlUp).Row
For i = 2 To D1
If Ws.Cells(i, 7).Value = Me.cbonumpieceret.Value Then
Rows(i).Delete
Exit For
End If
Next i

Dim j%, D2%, Ws2 As Worksheet
Set Ws2 = Sheets(« brouillard_caisse »)
D2 = Ws2.Range(« A » & Rows.Count).End(xlUp).Row
For j = 2 To D2
If Ws2.Cells(j, 2).Value = Me.cbonumpieceret.Value Then
Rows(j).Delete
MsgBox (« Suppression effectuée avec succès »)
Exit For
End If
Next j
End Sub

Private Sub btnvalider_Click()
Dim i%, D1%, Ws As Worksheet
Set Ws = Sheets(« retraits »)
D1 = Ws.Range(« A » & Rows.Count).End(xlUp).Row
For i = 2 To D1
If Ws.Cells(i, 7).Value = Me.cbonumpieceret.Value Then
Ws.Cells(i, 8).Value = Me.txtcodadhret.Value
Ws.Cells(i, 1).Value = Me.txtnommbret.Value
Ws.Cells(i, 2).Value = Me.txtprenclientret.Value
Ws.Cells(i, 4).Value = Me.txtmontret.Value * 1
Ws.Cells(i, 3).Value = Me.txtnomcollecret.Value
Ws.Cells(i, 5).Value = Me.txtnumcpteret.Value
Ws.Cells(i, 6).Value = Me.txtdateret.Value
Exit For
End If
Next i

Dim j%, D2%, Ws2 As Worksheet
Set Ws2 = Sheets(« brouillard_caisse »)
D2 = Ws2.Range(« A » & Rows.Count).End(xlUp).Row
For j = 2 To D2
If Ws2.Cells(j, 2).Value = Me.cbonumpieceret.Value Then
Ws2.Cells(j, 8).Value = Me.txtmontret.Value * 1
Ws2.Cells(j, 1).Value = Me.txtdateret.Value
MsgBox (« Modification effectuée avec succès »)
Exit For
End If
Next j
End Sub

Private Sub cbonumpieceret_Change()
Dim i%, D1%, Ws As Worksheet
Set Ws = Sheets(« retraits »)
D1 = Ws.Range(« A » & Rows.Count).End(xlUp).Row
For i = 2 To D1
If Ws.Cells(i, 7).Value = Me.cbonumpieceret.Value Then
Me.txtcodadhret.Value = Ws.Cells(i, 8).Value
Me.txtnommbret.Value = Ws.Cells(i, 1).Value
Me.txtprenclientret.Value = Ws.Cells(i, 2).Value
Me.txtmontret.Value = Ws.Cells(i, 4).Value
Me.txtnomcollecret.Value = Ws.Cells(i, 3).Value
Me.txtnumcpteret.Value = Ws.Cells(i, 5).Value
Me.txtdateret.Value = Ws.Cells(i, 6).Value

  Exit For
End If

Next i
End Sub

Bonjour

Pour le 1° point j’ai corrigé la procédure de suppression ainsi :

Private Sub btnsupprechdep_Click()

Dim i%, D1%, Ws As Worksheet
Set Ws = Sheets(« retraits »)
D1 = Ws.Range(« A » & Rows.Count).End(xlUp).Row
For i = 2 To D1
If Ws.Cells(i, 7).Value = Me.cbonumpieceret.Value Then
Ws.Rows("" & i & « : » & i & «  »).Delete
Exit For
End If
Next i

Dim j%, D2%, Ws2 As Worksheet
Set Ws2 = Sheets(« brouillard_caisse »)
D2 = Ws2.Range(« A » & Rows.Count).End(xlUp).Row
For j = 2 To D2
If Ws2.Cells(j, 2).Value = Me.cbonumpieceret.Value Then
Ws2.Rows("" & j & « : » & j & «  »).Delete
MsgBox (« Suppression effectu?e avec succ?s »)
Exit For
End If
Next j
End Sub

Si tu ne veux pas être contraint de mettre à l’écran l’onglet dans lequel le code doit intervenir le nom de l’onglet doit être cité dans l’instruction à accomplir

donc mettre non pas :

Rows(i).Delete

mais comme ceci :

Ws.Rows(i).Delete

ou

Sheets(« retraits »).Rows(i).Delete

de plus la partie Rows(i).Delete est incorrect

Il faut mettre comme ceci Ws.Rows("" & i & « : » & i & «  »).Delete

C’est maintenant avec ces adaptations pour ce point opérationnel essais à l’appui

Pour le 2° point j’ai rajouté dans la procédure d’impression ces lignes de code pour fixer une zone d’impression :

derligne = Sheets(« Filtre_retraits »).Range(« A65536 »).End(xlUp).Row
derligne = Sheets(« Filtre_retraits »).Range(« A » & derligne).End(xlUp).Row
Sheets(« Filtre_retraits »).PageSetup.PrintArea = « A1:H » & derligne

pour bien déterminer la variable derligne pour l’onglet « Filtre_retraits » j’ai du appliquer 2 fois la même procédure
Partant de la ligne 65536 pour la première la procédure c’est arrété à la ligne 44
J’ai renouvelé l’instruction à partir de la ligne 44 deuxième procédure pour obtenir la ligne 20
Attention donc de ne pas changer la structure de cet onglet pour obtenir la bonne ligne

Ainsi je défini la zone d’impression de A1 à H20

Et le tour est joué cela fonctionne pour l’impression

Pour les prochaines évolutions éventuelles n’oublies de me fournir un classeur déverrouillé ou de transmettre des codes d’accès à cette fin
Heureusement que j’avais la version précédente pour récupérer les précieuses informations

Fais des essais et dis moi

Ci-joint ton classeur corrigé

Gestion tontineV10_2.xlsm (584,9 Ko)