Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Bonsoir le forum,
Une fois de plus je fais appel à vous.
Je rencontre 2 problèmes que je n'arrive pas à résoudre:
1° Sur mes USF Visualiser et Modifier, mes textBox Heures ne s'affiche pas au format hh:mm bien que j'ai précisé ce format.
2° je n'arrive pas à l'ouverture de l'USF Devis à ce qu'il me donne automatiquement le N° Suivant qui devrait être 2021-002 puis au prochain devis 2021-003...
Auriez-vous la gentillesse de bien vouloir m'aider s'il vous plaît.
Je sais pouvoir compter sur votre aide.
Merci d'avance!
tu as écrit : « Je crois que Soan à raison, aujourd'hui je coupe: plage, déjeuner les pieds dans l'eau, sieste et......je reprends! »
quoi ? t'as déjà fini d'faire trempette ? ben t'as pas nagé bien longtemps, dis donc ! tu pourras jamais rattraper Laure Manaudou si tu t'entraînes aussi peu ! bon, t'as d'la chance, regarde, elle t'attend :
tu as aussi écrit : « Je vais de ce pas décortiquer tes codes. » ; ben ça non plus ça t'a pas pris bien longtemps ! moi qui croyais qu'on t'reverrai plus avant un mois ou deux ! bon, c'est vrai qu'mes codes sont très faciles à comprendre, et en plus c'est comme les crêpes : c'est bien plus...
Yeahou, Soan, ChTi160
Bonsoir,
J'ai encore besoin d'un coup de main.
J'ai modifié mon USF DevisModifié en lui donnant la même configuration que l'USF Facture.
L'idée d'avoir une ListBox qui récupère tous les devis avec le filtre je l'ai trouvé trop top. J'ai voulue avoir la même chose avec l'USF DevisModifié. Je n'arrive pas à lui dire de m'afficher le N° de la facture si je sélectionne dans le filtre devis avec Facture. et si il n'y a pas de facture il laisse la textBox N° facture vide.
J'ai également un soucis avec l'ajustement de la ListBox en fonction du contenu du choix effectué dans le filtre.
Comme vous pouvez le constater, j'ai retenu l'idée de ChT160 en reprenant le bouton "Initialiser". J'ai trouver cela très pratique.
J'ai aussi des difficultés à ce que la ComboBox désignation récupère les données de la Feuille A.DV.
Dernier point de difficulté: le bouton Archiver Devis ne fonctionne pas. Il devrait normalement supprimer la ligne concernée et la remplacer par la modification.
Si vous avez un petit moment....
Merci d'avance.
Re
j'ai constaté pleins d'anomalies Lol
les Dates la feuille "A.LD" n'avait que des 2019 .
et dans la Feuille "A.DV" y'a plein de N° de devis non conforme
enfin j'ai modifié et mis a ma sauce Lol
jean marie
Ps :
j'ai , hier soir , Oublié de poster ce message resté en attente Lol
Re
j'ai constaté pleins d'anomalies Lol
les Dates la feuille "A.LD" n'avait que des 2019 .
et dans la Feuille "A.DV" y'a plein de N° de devis non conforme
enfin j'ai modifié et mis a ma sauce Lol
jean marie
Ps :
j'ai , hier soir , Oublié de poster ce message resté en attente Lol
ChTi160, Yeahou, Soan,
Bonsoir,
ChTi160, merci d'avoir balayé le fichier et d'avoir apporter les rectifications. Les éléments de la feuille A.DV et A.LD ont juste été copier afin de permettre de vérifier le bon fonctionnement des Filtres de l'USF Facture.
Dans le dossier ci-joint, j'ai remis de l'ordre dans ces feuilles.
Avez-vous eu le temps de regarder mon USF DevisModifié qui ne fonctionne pas correctement? (Voir Fichier joint).
Merci beaucoup de l'attention que vous portez à mon projet.
moi j'en suis encore au Userform Facture Lol
mais que dois tu pouvoir faire a partir de ce Userform ?
explications et démarche !
merci
Bonne fin de journée
jean marie
moi j'en suis encore au Userform Facture Lol
mais que dois tu pouvoir faire a partir de ce Userform ?
explications et démarche !
merci
Bonne fin de journée
jean marie
L'USF DevisModifié permet de modifier le contenu d'un devis éditer et transmis au client. En effet, le client à réception du devis peut demander à modifier certaines données: Prise en charge, trajet, Fin de course, Désignation. Ces données changent le coût de l'opération. Le Devis Modifié est archivé et prend la place des données déjà sur les Feuille A.DV et A.LD et prend donc la place du Devis Initial. Le devis modifié est alors archivé en format PDF. Le libellé de ce nouveau PDF comporte la mention Devis Modifié avec le N° du Devis et la Date de la Modification.
Dans la Feuille A.DV il y a une colonne pour recevoir la date de modification qui est en fait la date du jour.
Sur l'USF Devis Modifié, Lorsque l'on affiche un devis facturé, il faudrait que le N° de la Facture apparait dans la texteBox 1 (Facture). Ici, pour les Devis ayant fait l'objet d'une facture: aucune possibilité d'y apporter aucune modification au devis. Par contre s'il n'y a pas de facture: choix du Devis à modifier, apporter les modifications, Valider, Archiver, archiver PDF.
Si mes explications ne sont pas suffisamment claires, n'hésite pas à me demander des précisions.
J'ai réussi à récupérer certaines données, mais la ComBox Désignation ne récupère pas les bonnes données et l'archivage (A.DV et A.LD ) ne fonctionne pas également.
Merci à toi.
L'USF DevisModifié permet de modifier le contenu d'un devis éditer et transmis au client. En effet, le client à réception du devis peut demander à modifier certaines données: Prise en charge, trajet, Fin de course, Désignation. Ces données changent le coût de l'opération. Le Devis Modifié est archivé et prend la place des données déjà sur les Feuille A.DV et A.LD et prend donc la place du Devis Initial. Le devis modifié est alors archivé en format PDF. Le libellé de ce nouveau PDF comporte la mention Devis Modifié avec le N° du Devis et la Date de la Modification.
Dans la Feuille A.DV il y a une colonne pour recevoir la date de modification qui est en fait la date du jour.
Sur l'USF Devis Modifié, Lorsque l'on affiche un devis facturé, il faudrait que le N° de la Facture apparait dans la texteBox 1 (Facture). Ici, pour les Devis ayant fait l'objet d'une facture: aucune possibilité d'y apporter aucune modification au devis. Par contre s'il n'y a pas de facture: choix du Devis à modifier, apporter les modifications, Valider, Archiver, archiver PDF.
Si mes explications ne sont pas suffisamment claires, n'hésite pas à me demander des précisions.
J'ai réussi à récupérer certaines données, mais la ComBox Désignation ne récupère pas les bonnes données et l'archivage (A.DV et A.LD ) ne fonctionne pas également.
Merci à toi.
Soan, Yeahou, ChTi160
Je me permets de vous solliciter à nouveau puisque je n'ai pas réussi à résoudre mes deux problèmes de mon post 187. J'ai repris mon travail après deux mois d'arrêt et j'ai dû mettre de coté pendant quelques temps mon projet.
Je n'arrive pas à mettre en corrélation le Devis et la Facture dans mon USF "Modifier Devis". J'aurais aimé que si je sélectionne un devis qui a fait l'objet d'une facture que le N° de la Facture s'affiche dans la textBox 1 (Facture). J'ai également un problème de reclassement du devis modifié dans la feuille A.LD. Si je modifie un devis il l'ajoute sur une nouvelle ligne. Il faudrait qu'au moment de l'archivage, après les modifications le devis soit reclassé dans l'ordre des devis.
J'espère que vous trouverez un moment pour m'aider.
Merci à vous.
j'espère que tu as bien pu te reposer lors de tes 2 mois d'arrêt, et que maint'nant tu as bien récupéré.
tu as écrit : « Je n'arrive pas à mettre en corrélation le Devis et la Facture dans mon USF "Modifier Devis". J'aurais aimé que si je sélectionne un devis qui a fait l'objet d'une facture que le N° de la Facture s'affiche dans la textBox 1 (Facture). »
ton fichier en retour.
* dans le formulaire "Modifier Devis", choisis ⦿ Tous les devis
* sélectionne le 1er devis ➯ Facture : FACT2021-001
* note que ce champ est bien effacé lors de la sélection d'un autre devis,
car aucun autre devis n'a fait l'objet d'une facture.
* dans le formulaire "Facturation", fais les mêmes manips que ci-dessus,
tu pourras voir que ça fait la même chose.
dans le module "Modifier_Devis" :
VB:
Private Sub Rechercher_Change()
If Me.Rechercher.ListIndex = -1 Then Exit Sub
If Me.Rechercher.List(Me.Rechercher.ListIndex, 0) = "Aucune Facture" Then Exit Sub
Dim cel As Range, ref$, lig&
lig = Tab_Devis_Filtre_Final(Me.Rechercher.ListIndex + 1, 11)
With Worksheets("A.DV").Cells(lig, 1)
'on remplit les champs avec les cellules de la feuille "A.DV"
ref = .Value: NuméroDevis = ref: TextBox1 = ""
Set cel = Worksheets("A.Fact").Columns(1).Find(ref, , -4163, 1, 1)
If Not cel Is Nothing Then TextBox1 = cel.Offset(, 1)
DateDevisInitial = .Offset(, 1): DateModif = .Offset(, 2): NOM = .Offset(, 3)
ADRESSE = .Offset(, 4): Ville = .Offset(, 5): DateEvènement = .Offset(, 6)
PriseEnCharge = .Offset(, 7): Trajet = .Offset(, 8): FinCourse = .Offset(, 9)
End With
With Worksheets("A.LD")
Set cel = .Columns(1).Find(ref, , -4163, 1, 1)
If cel Is Nothing Then Exit Sub
Désignation.Height = Désignation.ListCount * Désignation.Font.Size * 1
Désignation = cel.Offset(n, 1) 'Désignation
Qté = cel.Offset(n, 2) 'Qté
lblPU = Format(cel.Offset(n, 3), "#,##0 €") 'lblPU
lblHT = Format(cel.Offset(n, 4), "#,##0 €") 'lblHT
End With
Me.Repaint
End Sub
dans le module "UF_Facture" :
VB:
Private Sub Rechercher_Click()
Dim DerLgn&, Lgn&, n&
If Me.Rechercher.ListIndex = -1 Then Exit Sub
If Me.Rechercher.List(Me.Rechercher.ListIndex, 0) = "Aucun devis" Then Exit Sub
Dim cel As Range, ref$, lig&
lig = Tab_Devis_Filtre_Final(Me.Rechercher.ListIndex + 1, 11)
With Worksheets("A.DV").Cells(lig, 1)
'on remplit les champs avec les cellules de la feuille "A.DV"
ref = .Value: NuméroDevis = ref: TextBox1 = ""
Set cel = Worksheets("A.Fact").Columns(1).Find(ref, , -4163, 1, 1)
If Not cel Is Nothing Then TextBox1 = cel.Offset(, 1)
DateDevisInitial = .Offset(, 1): DateModif = .Offset(, 2): NOM = .Offset(, 3)
ADRESSE = .Offset(, 4): Ville = .Offset(, 5): DateEvènement = .Offset(, 6)
PriseEnCharge = .Offset(, 7): Trajet = .Offset(, 8): FinCourse = .Offset(, 9)
End With
Me.LigsDétail.Clear
With Worksheets("A.LD")
DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
For Lgn = 2 To DerLgn
If Trim(.Cells(Lgn, 1)) Like NuméroDevis Then
LigsDétail.AddItem .Cells(Lgn, 2) 'Désignation
n = LigsDétail.ListCount - 1
LigsDétail.List(n, 1) = .Cells(Lgn, 3) 'Qté
LigsDétail.List(n, 2) = Format(.Cells(Lgn, 4), "#,##0 €") 'lblPU
LigsDétail.List(n, 3) = Format(.Cells(Lgn, 5), "#,##0 €") 'lblHT
LigsDétail.Height = LigsDétail.ListCount * LigsDétail.Font.Size * 2
End If
Next Lgn
End With
Me.Repaint
End Sub
pour ton problème de reclassement, je t'indique juste une piste : après avoir archivé le devis modifié, faire un tri des devis de la feuille "A.LD", selon la colonne A, ordre croissant ; ça pourra être dans ce style :
j'espère que tu as bien pu te reposer lors de tes 2 mois d'arrêt, et que maint'nant tu as bien récupéré.
tu as écrit : « Je n'arrive pas à mettre en corrélation le Devis et la Facture dans mon USF "Modifier Devis". J'aurais aimé que si je sélectionne un devis qui a fait l'objet d'une facture que le N° de la Facture s'affiche dans la textBox 1 (Facture). »
ton fichier en retour.
* dans le formulaire "Modifier Devis", choisis ⦿ Tous les devis
* sélectionne le 1er devis ➯ Facture : FACT2021-001
* note que ce champ est bien effacé lors de la sélection d'un autre devis,
car aucun autre devis n'a fait l'objet d'une facture.
* dans le formulaire "Facturation", fais les mêmes manips que ci-dessus,
tu pourras voir que ça fait la même chose.
dans le module "Modifier_Devis" :
VB:
Private Sub Rechercher_Change()
If Me.Rechercher.ListIndex = -1 Then Exit Sub
If Me.Rechercher.List(Me.Rechercher.ListIndex, 0) = "Aucune Facture" Then Exit Sub
Dim cel As Range, ref$, lig&
lig = Tab_Devis_Filtre_Final(Me.Rechercher.ListIndex + 1, 11)
With Worksheets("A.DV").Cells(lig, 1)
'on remplit les champs avec les cellules de la feuille "A.DV"
ref = .Value: NuméroDevis = ref: TextBox1 = ""
Set cel = Worksheets("A.Fact").Columns(1).Find(ref, , -4163, 1, 1)
If Not cel Is Nothing Then TextBox1 = cel.Offset(, 1)
DateDevisInitial = .Offset(, 1): DateModif = .Offset(, 2): NOM = .Offset(, 3)
ADRESSE = .Offset(, 4): Ville = .Offset(, 5): DateEvènement = .Offset(, 6)
PriseEnCharge = .Offset(, 7): Trajet = .Offset(, 8): FinCourse = .Offset(, 9)
End With
With Worksheets("A.LD")
Set cel = .Columns(1).Find(ref, , -4163, 1, 1)
If cel Is Nothing Then Exit Sub
Désignation.Height = Désignation.ListCount * Désignation.Font.Size * 1
Désignation = cel.Offset(n, 1) 'Désignation
Qté = cel.Offset(n, 2) 'Qté
lblPU = Format(cel.Offset(n, 3), "#,##0 €") 'lblPU
lblHT = Format(cel.Offset(n, 4), "#,##0 €") 'lblHT
End With
Me.Repaint
End Sub
dans le module "UF_Facture" :
VB:
Private Sub Rechercher_Click()
Dim DerLgn&, Lgn&, n&
If Me.Rechercher.ListIndex = -1 Then Exit Sub
If Me.Rechercher.List(Me.Rechercher.ListIndex, 0) = "Aucun devis" Then Exit Sub
Dim cel As Range, ref$, lig&
lig = Tab_Devis_Filtre_Final(Me.Rechercher.ListIndex + 1, 11)
With Worksheets("A.DV").Cells(lig, 1)
'on remplit les champs avec les cellules de la feuille "A.DV"
ref = .Value: NuméroDevis = ref: TextBox1 = ""
Set cel = Worksheets("A.Fact").Columns(1).Find(ref, , -4163, 1, 1)
If Not cel Is Nothing Then TextBox1 = cel.Offset(, 1)
DateDevisInitial = .Offset(, 1): DateModif = .Offset(, 2): NOM = .Offset(, 3)
ADRESSE = .Offset(, 4): Ville = .Offset(, 5): DateEvènement = .Offset(, 6)
PriseEnCharge = .Offset(, 7): Trajet = .Offset(, 8): FinCourse = .Offset(, 9)
End With
Me.LigsDétail.Clear
With Worksheets("A.LD")
DerLgn = .Cells(.Rows.Count, 1).End(xlUp).Row
For Lgn = 2 To DerLgn
If Trim(.Cells(Lgn, 1)) Like NuméroDevis Then
LigsDétail.AddItem .Cells(Lgn, 2) 'Désignation
n = LigsDétail.ListCount - 1
LigsDétail.List(n, 1) = .Cells(Lgn, 3) 'Qté
LigsDétail.List(n, 2) = Format(.Cells(Lgn, 4), "#,##0 €") 'lblPU
LigsDétail.List(n, 3) = Format(.Cells(Lgn, 5), "#,##0 €") 'lblHT
LigsDétail.Height = LigsDétail.ListCount * LigsDétail.Font.Size * 2
End If
Next Lgn
End With
Me.Repaint
End Sub
pour ton problème de reclassement, je t'indique juste une piste : après avoir archivé le devis modifié, faire un tri des devis de la feuille "A.LD", selon la colonne A, ordre croissant ; ça pourra être dans ce style :
Bonjour Soan,
Heureux de te lire de nouveau.
Nos échanges m'ont manqué.
Je vais mieux merci. La récupération a été un peu longue, mais apparemment c'était normale.
Je regarde tes codes et je reviens vers toi.
Merci de m'avoir une fois de plus accordé un peu de temps.
Bonjour Soan,
Heureux de te lire de nouveau.
Nos échanges m'ont manqué.
Je vais mieux merci. La récupération a été un peu longue, mais apparemment c'était normale.
Je regarde tes codes et je reviens vers toi.
Merci de m'avoir une fois de plus accordé un peu de temps.
Bonsoir Soan,
J'espère que tu vas bien.
Etant très débordé ces derniers temps, je n'ai pas eu un moment pour finaliser mon projet.
Je pense avoir réussi à résoudre mon problème de reclassement de mon tableau sur la feuille ALD.
Je te joins le fichier avec ses modifications (exemple: le bouton Fermer de l'USF Accueil). Si tu avais un petit moment pour vérifier ce que j'ai fait et valider, ce serait sympa.
Merci beaucoup Soan. Sans ton aide, je n'aurais pas réussi à en venir à bout. J'ai beaucoup appris grâce à ton aide, même si je sais que je n'ai pas encore la capacité de mener un autre projet de ce type tout seul.
Je t'en suis très reconnaissant.
A te lire, bonne soirée.
cette sub se déclenche quand on clique sur le formulaire ; mais elle ne fait aucune action, car elle ne contient aucune instruction VBA ; une sub vide ne sert à rien : elle est donc inutile, et tu peux la supprimer.
j'ai vu que si on clique sur le bouton "Fermer" du UserForm "Accueil", selon la valeur de la variable ok, ça ferme simplement le classeur ou ça quitte l'application Excel ; perso, j'trouve que dans les 2 cas, c'est un peu « brutal », et ça surprend ! en effet, on pense fermer seulement le formulaire "Accueil", et finalement, ça ferme le UserForm "Accueil" ET le classeur en cours, et même, si la variable ok est True, ça quitte Excel ! mais c'est ton choix, et si c'est ce que tu préfères, alors laisse comme c'est actuellement. d'un autre côté, même en laissant le même code VBA, note que c'est toujours possible de fermer le UserForm "Accueil" sans fermer le classeur et sans quitter Excel : au lieu de cliquer sur le bouton "Fermer", il suffit de cliquer sur la croix de fermeture du formulaire (située dans le coin supérieur droit) ; éventuellement, tu peux faire en sorte qu'un clic sur la croix de fermeture du UserForm ne fasse rien du tout ; l'utilisateur sera alors obligé de cliquer sur le bouton "Fermer" pour quitter le UserForm "Accueil" (et donc ça fera ce que tu auras choisi, selon la variable ok).
au départ, ta sub est ainsi :
VB:
Private Sub FERMER_Click()
Dim ok As Boolean
ok = True
If ThisWorkbook.Parent.Workbooks.Count > 1 Then ok = False
Application.DisplayAlerts = False
ThisWorkbook.Save
If ok = True Then Application.Quit Else ThisWorkbook.Close
End Sub
tu as mis cette instruction :
If ThisWorkbook.Parent.Workbooks.Count > 1 Then ok = False
le parent de ThisWorkbook est Application, donc ça revient à :
If Application.Workbooks.Count > 1 Then ok = False
comme Application est l'objet initial par défaut, tu peux mettre :
If Workbooks.Count > 1 Then ok = False
pour ceci :
VB:
ok = True
If Workbooks.Count > 1 Then ok = False
on peut l'abréger en :
VB:
ok = Workbooks.Count = 1
VBA évalue cette instruction comme si on avait écrit : ok = (Workbooks.Count = 1)
si y'a plus d'un classeur, Workbooks.Count est supérieur à 1 (car il vaut au moins 2), donc l'expression Workbooks.Count = 1 est fausse, donc la valeur de la variable ok est : FAUX.
si y'a un seul classeur, l'expression Workbooks.Count = 1 est vraie, donc la valeur de la variable ok est : VRAI.
avec d'autres petits changements, ta sub pourrait s'écrire en 3 lignes ainsi :
VB:
Private Sub FERMER_Click()
Dim ok As Boolean: ok = Workbooks.Count = 1
Application.DisplayAlerts = 0: ThisWorkbook.Save
If ok Then Application.Quit Else ThisWorkbook.Close
End Sub
note bien que If ok Then est la même chose que If ok = True Then
* si la valeur de la variable ok est True :
le test est VRAI ➯ ça exécute Application.Quit
* si la valeur de la variable ok est False :
le test est FAUX ➯ ça exécute ThisWorkbook.Close
comme tu sauvegardes le classeur avec ThisWorkbook.Save, alors même sansApplication.DisplayAlerts = 0, il n'y a plus d'alerte pour demander s'il faut sauvegarder les changements apportés puisque justement tu viens tout juste de les sauvegarder ; donc ton instruction Application.DisplayAlerts = 0 devient inutile ➯ ta sub peut s'écrire en 2 lignes :
VB:
Private Sub FERMER_Click()
Dim ok As Boolean: ok = Workbooks.Count = 1: ThisWorkbook.Save
If ok Then Application.Quit Else ThisWorkbook.Close
End Sub
et même, comme la variable ok est utilisée une seule fois, tu peux t'en passer :
VB:
Private Sub FERMER_Click()
ThisWorkbook.Save
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
cette sub se déclenche quand on clique sur le formulaire ; mais elle ne fait aucune action, car elle ne contient aucune instruction VBA ; une sub vide ne sert à rien : elle est donc inutile, et tu peux la supprimer.
j'ai vu que si on clique sur le bouton "Fermer" du UserForm "Accueil", selon la valeur de la variable ok, ça ferme simplement le classeur ou ça quitte l'application Excel ; perso, j'trouve que dans les 2 cas, c'est un peu « brutal », et ça surprend ! en effet, on pense fermer seulement le formulaire "Accueil", et finalement, ça ferme le UserForm "Accueil" ET le classeur en cours, et même, si la variable ok est True, ça quitte Excel ! mais c'est ton choix, et si c'est ce que tu préfères, alors laisse comme c'est actuellement. d'un autre côté, même en laissant le même code VBA, note que c'est toujours possible de fermer le UserForm "Accueil" sans fermer le classeur et sans quitter Excel : au lieu de cliquer sur le bouton "Fermer", il suffit de cliquer sur la croix de fermeture du formulaire (située dans le coin supérieur droit) ; éventuellement, tu peux faire en sorte qu'un clic sur la croix de fermeture du UserForm ne fasse rien du tout ; l'utilisateur sera alors obligé de cliquer sur le bouton "Fermer" pour quitter le UserForm "Accueil" (et donc ça fera ce que tu auras choisi, selon la variable ok).
au départ, ta sub est ainsi :
VB:
Private Sub FERMER_Click()
Dim ok As Boolean
ok = True
If ThisWorkbook.Parent.Workbooks.Count > 1 Then ok = False
Application.DisplayAlerts = False
ThisWorkbook.Save
If ok = True Then Application.Quit Else ThisWorkbook.Close
End Sub
tu as mis cette instruction :
If ThisWorkbook.Parent.Workbooks.Count > 1 Then ok = False
le parent de ThisWorkbook est Application, donc ça revient à :
If Application.Workbooks.Count > 1 Then ok = False
comme Application est l'objet initial par défaut, tu peux mettre :
If Workbooks.Count > 1 Then ok = False
pour ceci :
VB:
ok = True
If Workbooks.Count > 1 Then ok = False
on peut l'abréger en :
VB:
ok = Workbooks.Count = 1
VBA évalue cette instruction comme si on avait écrit : ok = (Workbooks.Count = 1)
si y'a plus d'un classeur, Workbooks.Count est supérieur à 1 (car il vaut au moins 2), donc l'expression Workbooks.Count = 1 est fausse, donc la valeur de la variable ok est : FAUX.
si y'a un seul classeur, l'expression Workbooks.Count = 1 est vraie, donc la valeur de la variable ok est : VRAI.
avec d'autres petits changements, ta sub pourrait s'écrire en 3 lignes ainsi :
VB:
Private Sub FERMER_Click()
Dim ok As Boolean: ok = Workbooks.Count = 1
Application.DisplayAlerts = 0: ThisWorkbook.Save
If ok Then Application.Quit Else ThisWorkbook.Close
End Sub
note bien que If ok Then est la même chose que If ok = True Then
* si la valeur de la variable ok est True :
le test est VRAI ➯ ça exécute Application.Quit
* si la valeur de la variable ok est False :
le test est FAUX ➯ ça exécute ThisWorkbook.Close
comme tu sauvegardes le classeur avec ThisWorkbook.Save, alors même sansApplication.DisplayAlerts = 0, il n'y a plus d'alerte pour demander s'il faut sauvegarder les changements apportés puisque justement tu viens tout juste de les sauvegarder ; donc ton instruction Application.DisplayAlerts = 0 devient inutile ➯ ta sub peut s'écrire en 2 lignes :
VB:
Private Sub FERMER_Click()
Dim ok As Boolean: ok = Workbooks.Count = 1: ThisWorkbook.Save
If ok Then Application.Quit Else ThisWorkbook.Close
End Sub
et même, comme la variable ok est utilisée une seule fois, tu peux t'en passer :
VB:
Private Sub FERMER_Click()
ThisWorkbook.Save
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
Bonjour Soan,
Superbe démonstration, j'en prends bonne note.
Tu a raison pour le bouton Fermer. Je vais le laisser comme avant: fermeture de l'Usf Accueil.
On peut effectivement avoir besoin de fermer l'Usf, mais pas le classeur.
Cela est d'autant plus vrai qu'à terme, j'envisage d'intégrer la gestion financière dans ce classeur (Plan de Trésorerie, Dépenses recettes....). L'Usf accueil qui reste ouvert limitera la visibilité de certains tableaux.
Soan, si je peux me permettre de te solliciter à nouveau, j'ai un soucis d'affichage de textbox sur un autre de mes fichiers, ainsi qu'un problème de beug si les cellules de mon tableau sont vides.
Si tu as un moment, sans vouloir abuser, tu pourrais y jeter un œil s'il te plaît?
Dans tous les cas je te remercie pour toute l'aide que tu m'as apporté dans ce projet.
Merci pour ta gentillesse et ta patience.
pour ta nouvelle demande, je veux bien t'aider ; mais pour ne pas tout mettre dans le même fil, tu devrais créer un nouveau sujet.
même si tu as une 1ère feuille "Présentation", ça a tout l'air d'être sur le tableau de la 2ème feuille "Controle" qu'il faut travailler ; tu as 3 UserForm, et ça a tout l'air d'être le UserForm "Modifier" sur lequel il faut vérifier les TextBox ; lesquelles ? celles des 12 mois ? si autres, lesquelles ? quelle est la procédure que tu suis ?
quel est au juste le problème d'affichage rencontré ? il manque des infos ? ou au contraire y'en a en trop ? ou y'a quelle donnée à la place de quelle autre ? l'écran clignote comme si c'était un sapin de Noël ? l'affichage devient flou ? ne t'inquiètes pas si t'as ce message, c'est normal : « Ce n'est pas une défaillance de votre moniteur. N'essayez donc pas de régler l'image. Nous maîtrisons à présent toutes les retransmissions. Nous contrôlons à présent les horizontales et les verticales. Nous pouvons vous noyer sous un millier de chaînes ou dilater une simple image jusqu'à lui donner la clarté du cristal, et même au-delà... Nous pouvons modeler votre vision et lui fournir tout ce que votre imagination peut concevoir. Pendant l'heure qui vient, nous contrôlerons tout ce que vous allez voir et entendre. Nous partagerons les angoisses et les mystères qui gisent dans les plus profonds abysses... au-delà du réel. » ; ça signifie juste qu'une des meilleures séries de science-fiction s'est invitée sur ton PC. (je te laisse deviner laquelle)
à quelle étape de ta procédure se produit ton problème d'affichage ? juste avant qu'une soucoupe volante t'a enlevé pour faire un voyage dans l'espace intergalactique de l'Univers ? c'est normal aussi : c'est comme dans le film "Rencontre du 3ème type".
même genre de description pour ton autre problème de bug en cas de cellules vides. (procédure suivie, et étape dans la procédure)
j'ai vu qu'il n'y a pas d'erreur de compilation (c'est bien, c'est toujours ça de gagné ! ) ; si y'a une erreur d'exécution, quel est le texte exact du message d'erreur ? quelle est la ligne du code VBA qui est sur fond jaune ?
pour ta nouvelle demande, je veux bien t'aider ; mais pour ne pas tout mettre dans le même fil, tu devrais créer un nouveau sujet.
même si tu as une 1ère feuille "Présentation", ça a tout l'air d'être sur le tableau de la 2ème feuille "Controle" qu'il faut travailler ; tu as 3 UserForm, et ça a tout l'air d'être le UserForm "Modifier" sur lequel il faut vérifier les TextBox ; lesquelles ? celles des 12 mois ? si autres, lesquelles ? quelle est la procédure que tu suis ?
quel est au juste le problème d'affichage rencontré ? il manque des infos ? ou au contraire y'en a en trop ? ou y'a quelle donnée à la place de quelle autre ? l'écran clignote comme si c'était un sapin de Noël ? l'affichage devient flou ? ne t'inquiètes pas si t'as ce message, c'est normal : « Ce n'est pas une défaillance de votre moniteur. N'essayez donc pas de régler l'image. Nous maîtrisons à présent toutes les retransmissions. Nous contrôlons à présent les horizontales et les verticales. Nous pouvons vous noyer sous un millier de chaînes ou dilater une simple image jusqu'à lui donner la clarté du cristal, et même au-delà... Nous pouvons modeler votre vision et lui fournir tout ce que votre imagination peut concevoir. Pendant l'heure qui vient, nous contrôlerons tout ce que vous allez voir et entendre. Nous partagerons les angoisses et les mystères qui gisent dans les plus profonds abysses... au-delà du réel. » ; ça signifie juste qu'une des meilleures séries de science-fiction s'est invitée sur ton PC. (je te laisse deviner laquelle)
à quelle étape de ta procédure se produit ton problème d'affichage ? juste avant qu'une soucoupe volante t'a enlevé pour faire un voyage dans l'espace intergalactique de l'Univers ? c'est normal aussi : c'est comme dans le film "Rencontre du 3ème type".
même genre de description pour ton autre problème de bug en cas de cellules vides. (procédure suivie, et étape dans la procédure)
j'ai vu qu'il n'y a pas d'erreur de compilation (c'est bien, c'est toujours ça de gagné ! ) ; si y'a une erreur d'exécution, quel est le texte exact du message d'erreur ? quelle est la ligne du code VBA qui est sur fond jaune ?
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.