Bonjour 974RE, Yeahou, le fil,
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 :
Regarde la pièce jointe 1100325
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, ChTi160Bonsoir 974RE, soan, chti160, le forum
974RE, voila le fichier modifié, les listes des combobox se mettent à jour en fonction des filtres déja entrés.
Bonne soirée
tu veux dire :la ComboBox désignation récupère les données de la Feuille A.DV.
la Feuille A.LD
Bonsoir Jean-Marie,Bonsoir 974RE
Bonsoir le Fil ,le Forum
tu dis :
tu veux dire :
Bonne soirée
jean marie
Bonsoir 974RE
Bonsoir le Fil ,le Forum
tu dis :
tu veux dire :
Bonne soirée
jean marie
ChTi160, Yeahou, Soan,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
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.Bonjour 974RE
Bonjour le Fil ,le Forum
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
Soan, Yeahou, ChTi160L'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.
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
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
Worksheets("A.LD").Range("A2:A" & dlg).Sort [A2], 1
Bonjour Soan,Bonjour 974RE, le fil,
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 :
Worksheets("A.LD").Range("A2:A" & dlg).Sort [A2], 1
dlg étant le n° de la dernière ligne utilisée.
soan
Bonsoir Soan,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.
Private Sub UserForm_Click()
End Sub
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
If ThisWorkbook.Parent.Workbooks.Count > 1 Then ok = False
If Application.Workbooks.Count > 1 Then ok = False
If Workbooks.Count > 1 Then ok = False
ok = True
If Workbooks.Count > 1 Then ok = False
ok = Workbooks.Count = 1
ok = (Workbooks.Count = 1)
Workbooks.Count = 1
est fausse, donc la valeur de la variable ok est : FAUX.Workbooks.Count = 1
est vraie, donc la valeur de la variable ok est : VRAI.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
If ok Then
est la même chose que If ok = True Then
ThisWorkbook.Save
, alors même sans Application.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 :Private Sub FERMER_Click()
Dim ok As Boolean: ok = Workbooks.Count = 1: ThisWorkbook.Save
If ok Then Application.Quit Else ThisWorkbook.Close
End Sub
Private Sub FERMER_Click()
ThisWorkbook.Save
If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close
End Sub
Bonjour Soan,Bonjour 974RE, le fil,
tout ce post #192 est pour le UserForm "Accueil".
pourquoi as-tu laissé :
VB:Private Sub UserForm_Click() 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'expressionWorkbooks.Count = 1
est fausse, donc la valeur de la variable ok est : FAUX.
si y'a un seul classeur, l'expressionWorkbooks.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 queIf ok Then
est la même chose queIf 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 avecThisWorkbook.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 instructionApplication.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
ça allège, hein ?
soan
Merci Soan,Bonjour 974RE,
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 ?
ça en fait des questions, hein ?
soan