Microsoft 365 vba format date et N° automatique

974RE

XLDnaute Occasionnel
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!
 

Pièces jointes

  • Essai CL1 Copie.xlsm
    182.4 KB · Affichages: 182
Solution
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...​

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour 974RE
Par contre je n'ai pas compris les problèmes liés aux rows.count????
quand tu écris cela:
VB:
  With Worksheets("A.DV")
    n = .Cells(Rows.Count, 1).End(3).Row + 1
le fait qu'il n'y ait pas de point devant Rows.Count ne le rattache pas à Worksheet("A.DV") mais à la feuille active et te retourne le nombre de lignes utilisées de la feuille active (feuille devis dans l'exemple) et non le nombre de lignes utilisées de ta Worksheet("A.DV")
cela peut poser problème en attaquant des fichiers dans des classeurs différents en xls

Bien cordialement
 
Dernière édition:

974RE

XLDnaute Occasionnel
Bonjour 974RE

quand tu écris cela:
VB:
  With Worksheets("A.DV")
    n = .Cells(Rows.Count, 1).End(3).Row + 1
le fait qu'il n'y ait pas de point devant Rows.Count ne le rattache pas à Worksheet("A.DV") mais à la feuille active et te retourne le nombre de lignes utilisées de la feuille active (feuille devis dans l'exemple) et non le nombre de lignes utilisées de ta Worksheet("A.DV")
le code veut en fait dire va à la dernière ligne utilisée et remonte pour trouver la dernière cellule non vide de la colonne A, ceci pour éviter, en partant du début de la feuille, de bloquer sur une cellule vide en colonne A en cours de recherche dans le tableau (on aurait pas besoin de cette recherche avec un tableau structuré car on lui ajouterait simplement une ligne).
Ce bug ne pose pas de problème tant que le nombre de lignes utilisées de la feuille Worksheet("A.DV") ne dépasse pas celui de la feuille active (ligne 26 en colonne A de la feuille devis dans l'exemple), quand le cas se produira à partir du 27e devis (27 devis plus la ligne de titre=28), cela te renverra une écriture à faire en ligne 27 (ligne de dernière cellule utilisée en A1:A26 +1=27) et tu commenceras à écraser des données existantes en archivant, la recherche t'ayant renvoyé un résultat de dernière cellule non vide en colonne A basé sur un nombre de lignes inférieur au nombre de lignes réellement utilisé dans Worksheet("A.DV").
C'est le même problème sur tous tes autres codes d'archivage.
Voili, j'espère avoir été plus clair !

Bien cordialement
Bonjour Yeahou,
Je pense avoir compris: un simple point peut entrainer à terme un beug.
Merci pour tes explications.
Cordialement.
 

974RE

XLDnaute Occasionnel
Yeahou, je suis toujours en galère avec mon USF Modifier Devis. Je me suis rendu compte que le bouton rechercher de cet USF m'affiche bien les données du tableau A.DV, mais par contre il ne m'affiche que la 1ère ligne correspondante du tableau A.LD dans le cas où j'ai 2 véhicules réservés, il devrait m'afficher dans désignation de l'USF les deux lignes.
De plus, comment supprimer via l'USF, l'une des 2 lignes si la demande de modification par le client est tout compte fait de réserver un seul des véhicules?
Je pense que c'est le seul problème qui me reste à résoudre et là je l'avoue je sèche grave!!!!
Résoudre ce problème est important puisque la facture récupère les données de la Feuille A.DV et A.LD
 

Pièces jointes

  • Essai CL6.xlsm
    326 KB · Affichages: 3

974RE

XLDnaute Occasionnel
Yeahou, je suis toujours en galère avec mon USF Modifier Devis. Je me suis rendu compte que le bouton rechercher de cet USF m'affiche bien les données du tableau A.DV, mais par contre il ne m'affiche que la 1ère ligne correspondante du tableau A.LD dans le cas où j'ai 2 véhicules réservés, il devrait m'afficher dans désignation de l'USF les deux lignes.
De plus, comment supprimer via l'USF, l'une des 2 lignes si la demande de modification par le client est tout compte fait de réserver un seul des véhicules?
Je pense que c'est le seul problème qui me reste à résoudre et là je l'avoue je sèche grave!!!!
Résoudre ce problème est important puisque la facture récupère les données de la Feuille A.DV et A.LD
Merci de m'aider à résoudre ce problème.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour 974RE, Yeahou,

:oops: :oops: :oops: j'suis vraiment désolé pour l'énorme retard, et pour t'avoir délaissé un aussi long moment ! plusieurs fois, j'ai voulu retravailler sur ton dossier, et à chaque fois, un empêchement est malheureusement survenu : j'ai eu quelque chose de plus urgent à faire. 😭 mais me voici de nouveau pour la suite ! :)



ouvre le fichier joint, et ferme le Menu ; tu peux voir que la feuille "A.LD" est inchangée ; note bien que pour "DEV2021-003", il y a 2 lignes de détail, en lignes 4 et 5 ; comme le devis modifié peut contenir un nombre de lignes différent de celui du devis initial, le plus simple sera de d'abord supprimer ces 2 lignes déjà existantes, pour ensuite écrire les nouvelles lignes de détail du devis modifié ; bien sûr, s'il y avait d'autres lignes de détail en dessous (d'autres devis), elles vont remonter au moment de la suppression, puis au moment de l'écriture, les nouvelles lignes de détail seront écrites en dernier, après les autres ➯ ça ne sera pas dans l'ordre des numéros de devis, mais dans l'ordre chronologique des opérations de création ou modif des devis.

remarque : ce que j'ai écrit à propos de la suppression répond à cette question de ton post #109 : « comment supprimer via l'USF, l'une des 2 lignes si la demande de modification par le client est tout compte fait de réserver un seul des véhicules ? » ; bien sûr, le plus simple aurait été d'interdire au client de changer d'avis, mébon, comme on vit dans un monde imparfait, t'es bien obligé de t'y faire...


va sur la feuille "A.DV" ; là aussi, tu peux voir que la feuille est inchangée ; toujours pour "DEV2021-003" note que C4 est vide ; le texte de H4 contient 15H00 ; en i4 et J4, le texte contient "Cap Marine 2".


va sur la feuille "DevisModifié" ; attention : dans ton post #109, tu as écrit : « Je me suis rendu compte que le bouton rechercher de l'USF Modifier_Devis m'affiche bien les données du tableau A.DV, mais par contre il ne m'affiche que la 1ère ligne correspondante du tableau A.LD dans le cas où j'ai 2 véhicules réservés, il devrait m'afficher dans désignation de l'USF les deux lignes. » ; tu aurais raison d'employer cette méthode si au moment de créer le devis initial tu avais saisi plusieurs lignes dans ton USF Devis ; mais ce n'était pas le cas : tu as créé ton devis initial du USF sur la feuille de calcul ligne après ligne au fur et à mesure ; donc pour garder la même logique de saisie opératoire, tu vas faire pareil pour créer le devis modifié, donc ligne après ligne aussi, au fur et à mesure ; et c'est ce que j'ai déjà fait pour créer le devis modifié "DEV2021-003", que tu vois actuellement sur la feuille de calcul ; en C4, le n° devis est "DEV2021-003" ; en C2, la date est 23/03/2021 (car je l'ai créé hier) ; en A14, le texte contient 16H00 au lieu de 15H00 ; en A16 et A18, le texte contient "Cap Marine 3" au lieu de "Cap Marine 2" ; il y a une seule ligne détail, car ton client a préféré renoncer à tes goûts de luxe pour s'offrir la voiture la moins chère ; bon, ne râle pas et estime-toi heureux, hein ? car si ton client avait été "Petit Scarabée", lui se déplace très facilement à pied, même quand il faut traverser un désert pendant des heures sous le soleil brûlant ! alors il aurait renoncé aux 2 voitures !

tu t'souviens d'Ctrl d ? ça affiche le formulaire devis, hein ? et pour le formulaire devis modifié, Ctrl m ? ça s'rait bien pratique, hein ? manque de pot, Ctrl m est déjà pris pour afficher l'formulaire "Menu" ! 😭 alors à la place, j'ai choisi Ctrl r ; r pour client retors ; nan, j'plaisante ; c'est r pour devis rectifié, ou rectification du devis (au choix) ; donc fais Ctrl r ➯ affichage du formulaire "Modification Devis" (sans devoir afficher le formulaire "Menu") ; comme je m'en suis déjà servi pour créer le devis modifié qui est déjà sur la feuille de calcul, tu as une seule chose à faire, mais très compliquée, qui va te demander un effort énorme : clique sur le bouton "Archiver Devis" ➯ message : « Le devis modifié DEV2021-003 a été archivé. » ; clique sur le bouton OK ; ferme le formulaire en cliquant sur la croix du coin haut droit ; puis va sur la feuille "A.DV" ; en C4, il y a bien la date du devis modifié : 23/03/2021 ; en H4:J4, il y a bien les changements : 16H00 au lieu de 15H00, et "Cap Marine 3" au lieu de "Cap Marine 2" ; va sur la feuille "A.LD" ; les 2 anciennes lignes de détail du devis initial ont été supprimées ; la nouvelle ligne de détail du nouveau devis modifié a été ajoutée ; il te reste plus qu'à faire d'autres tests avec d'autres données, et avec d'autres clients récalcitrants et lunatiques. 😜



côté VBA, voici la sub concernée :

VB:
Private Sub ArchiverDevisModifié_Click()
  If ActiveSheet.Name <> "DevisModifié" Then Exit Sub
  Dim cel As Range, ref$: ref = [C4]
  If ref = "" Then Exit Sub 'sortie si y'a pas de N° Devis modifié
 
  'en feuille "A.DV", on cherche le devis initial, selon n° devis.
  Set cel = Worksheets("A.DV").Columns(1).Find(ref, , -4163, 1, 1)
  If cel Is Nothing Then Exit Sub 'devis à modifier non trouvé !
 
  Application.ScreenUpdating = 0 'il y a 4 Modifs en feuille "A.DV"
  cel.Offset(, 2) = [C2]   'Date Modif
  cel.Offset(, 7) = [A14]  'Prise en Charge
  cel.Offset(, 8) = [A16]  'Trajet
  cel.Offset(, 9) = [A18]  'Fin de Course
 
  'ATTENTION : il faut d'abord SUPPRIMER TOUTES les lignes détail du devis
  'à modifier : c'est le plus simple si le nouveau devis modifié comporte
  'moins de lignes ou plus de lignes que le devis initial.
 
  'en feuille "A.LD", on cherche la 1ère ligne de détail du devis initial.
  Set cel = Worksheets("A.LD").Columns(1).Find(ref, , -4163, 1, 1)
 
  If cel Is Nothing Then Exit Sub 'SÉCURITÉ si y'a AUCUNE ligne de détail,
  'mais normalement, cette situation ne devrait PAS exister ! car pour un
  'devis précédent, devrait forcément y'avoir AU MOINS UNE ligne détail !
 
  'on compte les lignes de détail du devis initial, puis on les supprime.
  Dim n&, k As Byte: Do While cel.Offset(n) = ref: n = n + 1: Loop
  cel.EntireRow.Resize(n).Delete
 
  'la suite est pour archiver le nouveau devis modifié.
  k = ActiveSheet.ListObjects("ListDevis6").ListRows.Count
  If k = 0 Then Exit Sub 'aucune ligne détail => sortie
  With Worksheets("A.LD")
    n = .Cells(.Rows.Count, 1).End(3).Row + 1
    [A21].Resize(k, 4).Copy: .Cells(n, 2).PasteSpecial -4163
    With .Cells(n, 1).Resize(k)
      .Value = ref: .Resize(, 5).Borders.LineStyle = 1
    End With
    .Select: [A1].Select: Worksheets("DevisModifié").Select
  End With
  MsgBox "Le devis modifié " & ref & " a été archivé."
End Sub



j'espère que tu pourras faire toi-même l'étape suivante de la facture ! 😁 quand j'pense que le titre du sujet est seulement : « vba format date et N° automatique » ! alors quand j'ai commencé à répondre sur ce sujet, j'ai cru qu'ça allait être juste un p'tit format de date à mettre + mettre en place un N° auto ! et voilà qu'tu m'as embarqué dans un formulaire Devis + formulaire Estimatif associé, puis maintenant dans ce formulaire de Modif Devis ! ça aurait été plus sincère de ta part de noter dans le titre qu'il allait falloir travailler sur la quasi totalité d'ton projet ! :rolleyes: (c'est qu'ça en fait, des choses !)

comme j'vais devoir avancer d'autres exos qu'le tien, j'vais d'nouveau être indisponible pour très, très, très longtemps ! j'espère que tu sauras t'passer d'moi pendant c'temps-là ! 😁🤣 si t'as besoin d'aide pour la facture, j'espère que Yeahou pourra t'aider ... s'il est disponible ! ben dis-donc, ça chôme pas, à La Réunion, hein ? t'es bien sûr que tu préfères pas aller faire trempette dans l'eau ? t'as la chance d'être à deux pas d'la mer et tu préfères travailler sur Excel plutôt qu'aller t'baigner ? 🤪 😄 😛

soan
 

Pièces jointes

  • Essai CL6.xlsm
    381.7 KB · Affichages: 7

974RE

XLDnaute Occasionnel
Bonjour Soan,
Je suis heureux de te lire de nouveau. Doublement heureux parce que, une fois de plus c'est toi qui m'apporte de l'aide. Merci milles fois. Je te suis d'autant plus reconnaissant que je vois qu'il est 2 heures du Mat chez toi. Se donner autant de mal pour quelqu'un que l'on ne connaissait pas il y a encore quelques jours, je dis: respect, chapeau bas Monseigneur!
Tu ne me croira pas, mais je pensais à toi au moment où mon téléphone m'a signaler la réception d'un mail.
Comme il fait chaud, je dormais avec la fenêtre ouverte et j'ai été réveillé par les éboueurs devant chez-moi.
Je pensais à mon problème de vba et je me disais: j'ai envoyé un post sur le forum et personne ne m'a répondu. Je me disais seul Soan peut me sortir de l'impasse, et je reçois au même moment ton post!!!!!!!
Surprenant non. Dans la vie il se passe parfois des choses bizarres non? Cela me laisse interrogateur!
Pour revenir à mon problème, j'ai tenu le même raisonnement que toi: en premier lieu supprimer les lignes existantes puis rentrer les nouvelles données et archiver. Ce que je n'arrivais à faire était dans un premier temps de lui faire chercher et trouver le devis concerné. J'étais bloqué! J'ai écumé les forums pour trouver comment faire, sans succès. Ce truc commençais à tourner à l'obsession. Tu n'imagine pas tout ce que j'ai essayé! Quand je lis tes codes, je n'aurais pas réussi tout seul. C'est clair.
Pour la facture, elle est déjà en place, et je rencontre le même problème d'extraction des données de la feuille A.LD. Dans l'absolu, si j'arrive à comprendre tes codes je devrais pouvoir y arriver. En tous cas je l'espère. Sinon je reviendrais vers toi pour un coup de main si tu trouve le temps.
Effectivement au départ c'était bien pour un format Date, et le n° automatique et au fur et à mesure mon projet a évolué. Je ne me doutais pas qu'à l'arrivé se serait bien plus complexe.
J'ai mis le doigt dans un truc qui m'a happé, et comme j'aime comprendre, j'y suis allé!
C'est fascinant: tu écris des codes, et la machine fait ce que tu lui demande, et cela te facilite la vie!
Pour info, je n'ai jamais eu de cours en informatique. Un jour de l'année 1990, on est venu poser une machine sur mon bureau et on m'a dit : " Voyez ce que vous pouvez en faire, débrouillez-vous!". J'ai branché l'appareil (Il y avait un câble que j'ai supposé venir sur la prise électrique) et j'ai cherché comme le mettre en marche, et j'ai trouvé un bouton sur lequel j'ai appuyé et ça s'est mis en marche! J'avais 30 ans!
Depuis je me débrouille tout seul. Heureusement aujourd'hui il y a Internet et ses forums et toi!
Merci beaucoup Soan.
Je vais de ce pas décortiquer tes codes. Belle journée en perspective!
Je te souhaite également un bien belle journée.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
à moins que @soan ne le fasse plus tôt quoi qu'il ait dit, il est trop gentil pour laisser quelqu'un dans l'embaras.
Bonjour @974RE, le forum
quand quelqu'un a fait un gros travail récemment sur un fichier, on le laisse finir et on ne reprend derrière que si blocage ou abandon, je savais que soan ne t'abandonnerait pas, tout comme je sais qu'il reviendra t'aider, il est comme ça ! et comme la plupart des bénévoles du forum car cela reste du bénévolat et tous ont d'autres occupations, centres d'intérêt : trois jours sans réponse n'est pas un délai anormal, à la rigueur, tu relances gentiment au bout de quelques jours !
Bonne journée au soleil de la réunion, belle journée ici aussi en perspective.
Cordialement, @+
 
Dernière édition:

974RE

XLDnaute Occasionnel
Bonjour Yeahou,
Comme tu le sais, je suis nouveau sur les forums. Je n'ai pas encore tous les codes de fonctionnement d'un Forum.
Je découvre au fur et à mesure les us et coutumes qui prévalent sur les Forums, comme je découvre VBA.
Aussi, pardon si j'ai fait un impair.
Je comprends bien que les uns et les autres vous ayez d'autres préoccupations au quotidien.
Sincèrement je vous admire pour ce que vous faîtes sur ce forum. Il faut avoir une sacré dose d'empathie pour être présent et apporter votre aide comme vous le faîtes.
Pour avoir été sur d'autres Forum, celui-ci est particulièrement actif et sympathique, d'ailleurs je ne suis que sur ce forum maintenant.
Pardon pour mon impatience, mais ce truc (VBA) est passionnant, c'est comme une drogue pour moi.
De plus comme je suis en arrêt maladie suite à mon opération, je suis dedans à fond. Quand on est face à un problème, que des gens venus d'ailleurs se penche dessus et apportent la solution avec gentillesse, qu'on appuie sur un bouton et que sa marche, le moment est euphorique: on en veut encore! Désolé les gars: aussi qu'elle idée saugrenue que de vouloir donner du bonheur à de parfaits inconnus à 11 000 km de chez-vous?
M'enfin!!!!
Je crois que Soan à raison, aujourd'hui je coupe: plage, déjeuner les pieds dans l'eau, sieste et......je reprends!
Très belle journée à toi. A bientôt.
 

974RE

XLDnaute Occasionnel
Soan, Yeahou bonjour,
J'espère que vous allez bien.
J'ai repris mon projet, et j'ai quelque peu avancé. Je bute de nouveau sur la récupération des données de la feuille A.LD pour l'USF Facture. J'ai pas mal cherché et tenté beaucoup de chose, mais je me dois de me rendre à l'évidence tout seul je n'y arriverai pas. J'ai récupéré les données de la Feuille A.D, dans l'USF Facture, mais la deuxième partie de la facture: Désignation ect... je n'y arrive pas.
Aussi, si vous avez un moment!
Merci beaucoup et bon weekend à vous.
 

soan

XLDnaute Barbatruc
Inactif
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 :

Image.jpg



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 rapide de les manger que de les faire ! 😜 tiens, j'entends l'garçon d'la plage qui dit : « chouchous, glaces, popcorn, cacahuètes, barbapapas » ; t'as pas un p'tit creux ? bon, allez, j'te laisse essayer le fichier joint. 🙂

ouvre le fichier, ferme le menu, fais Ctrl f ; dans la liste "Rechercher", choisis le 3ème item ➯ en bas, tu peux voir qu'il y a 2 lignes de détail ; clique sur le bouton "Valider" ; clique sur la croix en haut à droite pour fermer le formulaire ; vérifie tout sur la feuille "Facture" ; y'a juste un léger bug que j'ai pas réussi à résoudre : j'sais pas pourquoi, Excel refuse obstinément de signer la facture à la place du client ! 😭 (il doit être à sec comme moi, le pauvre ! j'ai même pas d'quoi offrir un verre à Laure Manaudou ! 😢)

VB:
Private Sub Valider_Click() 'bouton Valider
  If ActiveSheet.Name <> "Facture" Then Exit Sub
  Application.ScreenUpdating = 0
 
  With [C2]
    'on sort de la sub s'il manque une de ces 7 infos : N° Fre ; Date Fre ;
    'N° Devis ; Nom ; Adresse ; Code postal/Ville ; Date Évènement ; remarque :
    'la date est mise automatiquement, mais ça veut pas dire qu'il y en aura
    'forcément une : l'utilisateur peut très bien la supprimer, sans mettre
    'une autre date à la place !  :(
    If TextBox1 = "" Or Jour = "" Or NuméroDevis = "" Or NOM = "" _
      Or ADRESSE = "" Or Ville = "" Or DateEvènement = "" Then Exit Sub
    
    'à partir d'ici, il y a forcément les 7 infos mentionnées ci-dessus, MAIS :
    'il MANQUE un test pour VÉRIFIER si la date est bien une date VALIDE !!!
    'à toi de l'ajouter ici.  ;)
    
    'on écrit les 7 premières infos sur la feuille de calcul "Facture"
    .Value = Jour: .Offset(2) = TextBox1: .Offset(3) = NuméroDevis
    .Offset(5) = NOM: .Offset(6) = ADRESSE: .Offset(7) = Ville
    .Offset(10) = DateEvènement
  End With
 
  With [A15]
    If PriseEnCharge <> "" Then .Value = PriseEnCharge  'Prise en Charge
    If Trajet <> "" Then .Offset(2) = Trajet            'Trajet
    If FinCourse <> "" Then .Offset(4) = FinCourse      'Fin de Course
  End With
 
  Dim n&, i&: n = LigsDétail.ListCount
  With ActiveSheet.ListObjects("ListFact")
    If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
    For i = 0 To n - 1
      With .ListRows.Add()
        .Range(1) = LigsDétail.List(i, 0)
        .Range(2) = LigsDétail.List(i, 1)
        .Range(3) = LigsDétail.List(i, 2)
        .Range(4) = LigsDétail.List(i, 3)
      End With
    Next i
  End With
  Application.ScreenUpdating = -1
End Sub

soan
 

Pièces jointes

  • Essai CL7.xlsm
    388.3 KB · Affichages: 6

974RE

XLDnaute Occasionnel
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 rapide de les manger que de les faire ! 😜 tiens, j'entends l'garçon d'la plage qui dit : « chouchous, glaces, popcorn, cacahuètes, barbapapas » ; t'as pas un p'tit creux ? bon, allez, j'te laisse essayer le fichier joint. 🙂

ouvre le fichier, ferme le menu, fais Ctrl f ; dans la liste "Rechercher", choisis le 3ème item ➯ en bas, tu peux voir qu'il y a 2 lignes de détail ; clique sur le bouton "Valider" ; clique sur la croix en haut à droite pour fermer le formulaire ; vérifie tout sur la feuille "Facture" ; y'a juste un léger bug que j'ai pas réussi à résoudre : j'sais pas pourquoi, Excel refuse obstinément de signer la facture à la place du client ! 😭 (il doit être à sec comme moi, le pauvre ! j'ai même pas d'quoi offrir un verre à Laure Manaudou ! 😢)

VB:
Private Sub Valider_Click() 'bouton Valider
  If ActiveSheet.Name <> "Facture" Then Exit Sub
  Application.ScreenUpdating = 0

  With [C2]
    'on sort de la sub s'il manque une de ces 7 infos : N° Fre ; Date Fre ;
    'N° Devis ; Nom ; Adresse ; Code postal/Ville ; Date Évènement ; remarque :
    'la date est mise automatiquement, mais ça veut pas dire qu'il y en aura
    'forcément une : l'utilisateur peut très bien la supprimer, sans mettre
    'une autre date à la place !  :(
    If TextBox1 = "" Or Jour = "" Or NuméroDevis = "" Or NOM = "" _
      Or ADRESSE = "" Or Ville = "" Or DateEvènement = "" Then Exit Sub
   
    'à partir d'ici, il y a forcément les 7 infos mentionnées ci-dessus, MAIS :
    'il MANQUE un test pour VÉRIFIER si la date est bien une date VALIDE !!!
    'à toi de l'ajouter ici.  ;)
   
    'on écrit les 7 premières infos sur la feuille de calcul "Facture"
    .Value = Jour: .Offset(2) = TextBox1: .Offset(3) = NuméroDevis
    .Offset(5) = NOM: .Offset(6) = ADRESSE: .Offset(7) = Ville
    .Offset(10) = DateEvènement
  End With

  With [A15]
    If PriseEnCharge <> "" Then .Value = PriseEnCharge  'Prise en Charge
    If Trajet <> "" Then .Offset(2) = Trajet            'Trajet
    If FinCourse <> "" Then .Offset(4) = FinCourse      'Fin de Course
  End With

  Dim n&, i&: n = LigsDétail.ListCount
  With ActiveSheet.ListObjects("ListFact")
    If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
    For i = 0 To n - 1
      With .ListRows.Add()
        .Range(1) = LigsDétail.List(i, 0)
        .Range(2) = LigsDétail.List(i, 1)
        .Range(3) = LigsDétail.List(i, 2)
        .Range(4) = LigsDétail.List(i, 3)
      End With
    Next i
  End With
  Application.ScreenUpdating = -1
End Sub

soan
Bonjour Soan,
Avant tout: Mille MERCIS!!!!!!!
La langue Française est bien pauvre quand il s'agit de remercier.
Mon projet arrive à terme. Sans ton aide (sans oublier Yeahou et PatickToulon), je n'y serais jamais arrivé.
Au départ je voulais créer une boite de dialogue afin de saisir rapidement des données, et à l'arrivée, je me retrouve avec un programme qui me permet d'avoir un outil efficace et performant.
De plus, je pense qu'il sera probablement utile à d'autres puisqu'on pourra suivre étapes par étapes la progression de l'encodage avec les explications qui vont avec.
Grâce à ton aide, j'ai beaucoup appris, même si je suis loin d'avoir tout compris.
Cette affaire m'a aussi permis de faire de très belle rencontre.
Si d'aventure tu avais la possibilité de venir à la réunion, tu y seras comme chez toi!
Pour revenir au projet, je ne pense pas, de mon point de vue, qu'il faille écrire un test pour la date. Son format est déjà définie, et il n'y a aucune saisie par l'utilisateur. La date de la facture est la date du jour où elle est établie, je pense qu'il ne peut en être autrement. Si mon raisonnement n'est pas bon n'hésite pas à me le faire savoir.
La pratique me dira si je dois modifier quelque chose. A ce jour, grâce à toi, tout me semble bon.
Il me reste a fignoler certaines choses (par exemple définir automatiquement les hauteurs des lignes Prise en charge, Trajet....).
Au fait, j'avais compris qu'il me fallait utiliser une ListBox pour la zone désignation de la facture. Je m'y était attelé, mais au regard de tes codes, je n'y serais pas arrivé tout seul!
J'oubliais: malheureusement je crains fort que Laure ne doive m'attendre encore longtemps. la pauvre! Je ne suis pas prêt de la rejoindre: elle va trop vite pour moi, et les apéros, passés et à venir, ne vont pas arranger les choses! A une époque je dis pas (J'ai été marié avec une Maître Nageur championne de la Réunion). C'était une autre époque. Elle aussi elle a finie par me distancer!
Je te souhaite une très bonne journée et te dis à bientôt.
 

soan

XLDnaute Barbatruc
Inactif
@974RE

à propos de ce que tu as écrit pour la date, tu as raison : pas besoin de faire un test vu qu'elle est mise automatiquement ; mais j'avais pensé que tu aurais peut-être voulu la changer, au cas où par exemple tu aurais voulu antidater ou postdater une facture par rapport à la date du jour (c'est à dire mettre une date antérieure ou ultérieure) ; avec ton fichier actuel, fais ce test : Ctrl f ➯ ouverture du formulaire ; dans la liste "Rechercher", choisis le 3ème item ➯ ça montre toutes les infos ; appuie sur la touche TAB (Tabulation) ➯ ça va sur la date pour que tu puisses la changer éventuellement ; appuie de nouveau sur TAB ➯ ça va direct sur le bouton Valider, sans s'arrêter sur les infos en dessous (qu'en principe tu n'es pas censé changer puisque c'est une simple reprise des infos du devis) ; rappel : avec Maj TAB, tu peux retourner au champ précédent (Maj est la touche qui s'appelait Shift au début ; elle est juste au-dessus de la touche Ctrl).

fais le même test avec le nouveau fichier joint ci-dessous ; tu pourras voir que cette fois, ça ne s'arrête pas sur la date : quand tu es sur la zone "Rechercher", fais TAB et ça va direct sur le bouton Valider ; fais Maj TAB et ça retourne sur la zone "Rechercher" ; éventuel bonus : peut-être sais-tu déjà que Alt déroule la liste ? tu peux aussi utiliser Alt si tu veux dérouler la liste et qu'en même temps tu as l'intention de choisir un item situé plus au-dessus du dernier item que tu avais choisi.

sur ce nouveau fichier, la différence est que le champ date n'est plus une zone de texte mais un label ; et si t'as pas l'intention de changer les 7 champs en dessous (NOM à FinCourse), normalement, tu aurais dû mettre des labels et pas des zones de texte. ;) (mais ne change pas la ListBox LigsDétails ! à propos, c'est bien que tu aies compris que c'était mieux avec une ListBox ! 👍 :))



pour la hauteur automatique des 3 lignes n° 15 / 17 / 19 = Prise en Charge / Trajet / Fin de Course : j'ai essayé de le faire en utilisant (par exemple pour la ligne 17) : Rows(17).AutoFit ; ça n'a pas marché, et je crois que c'est à cause de la fusion de cellules A17: D17 : il me semble bien qu'AutoFit ne marche pas sur des cellules fusionnées ; voici une piste : si tu dis par exemple qu'une ligne de texte de A17: D17 fait 150 caractères, alors nombre de lignes de la fusion de cellules = nombre total de caractères / 150 ; mais d'un autre côté, même si tu ajustes correctement mon 150 (nombre moyen au hasard), c'est trop empirique à cause de la police de caractères utilisée : c'est une police proportionnelle, donc la largeur d'un caractère est variable : « w » est plus large que « i » ; il faudrait alors utiliser une police de taille fixe, mais même ainsi, c'est pas évident ; je ne suis pas sûr que le jeu en vaut la chandelle, de chercher une solution pour ça, mais si tu trouves une solution qui n'est pas trop complexe, je suis preneur ! 😉



merci pour ton invitation à La Réunion, mais même si Laure est chez toi, c'est quand même bien trop loin d'chez moi ! 😄 et même si j'sais nager, j'pourrai pas non plus rattraper Laure Manaudou : elle va bien trop vite pour moi aussi ! 😜 🤣 elle restera une chimère jolie sirène injoignable ! 😭

🧜‍♀️

soan
 

Pièces jointes

  • Essai CL8.xlsm
    389.3 KB · Affichages: 5

974RE

XLDnaute Occasionnel
@974RE

à propos de ce que tu as écrit pour la date, tu as raison : pas besoin de faire un test vu qu'elle est mise automatiquement ; mais j'avais pensé que tu aurais peut-être voulu la changer, au cas où par exemple tu aurais voulu antidater ou postdater une facture par rapport à la date du jour (c'est à dire mettre une date antérieure ou ultérieure) ; avec ton fichier actuel, fais ce test : Ctrl f ➯ ouverture du formulaire ; dans la liste "Rechercher", choisis le 3ème item ➯ ça montre toutes les infos ; appuie sur la touche TAB (Tabulation) ➯ ça va sur la date pour que tu puisses la changer éventuellement ; appuie de nouveau sur TAB ➯ ça va direct sur le bouton Valider, sans s'arrêter sur les infos en dessous (qu'en principe tu n'es pas censé changer puisque c'est une simple reprise des infos du devis) ; rappel : avec Maj TAB, tu peux retourner au champ précédent (Maj est la touche qui s'appelait Shift au début ; elle est juste au-dessus de la touche Ctrl).

fais le même test avec le nouveau fichier joint ci-dessous ; tu pourras voir que cette fois, ça ne s'arrête pas sur la date : quand tu es sur la zone "Rechercher", fais TAB et ça va direct sur le bouton Valider ; fais Maj TAB et ça retourne sur la zone "Rechercher" ; éventuel bonus : peut-être sais-tu déjà que Alt déroule la liste ? tu peux aussi utiliser Alt si tu veux dérouler la liste et qu'en même temps tu as l'intention de choisir un item situé plus au-dessus du dernier item que tu avais choisi.

sur ce nouveau fichier, la différence est que le champ date n'est plus une zone de texte mais un label ; et si t'as pas l'intention de changer les 7 champs en dessous (NOM à FinCourse), normalement, tu aurais dû mettre des labels et pas des zones de texte. ;) (mais ne change pas la ListBox LigsDétails ! à propos, c'est bien que tu aies compris que c'était mieux avec une ListBox ! 👍:))



pour la hauteur automatique des 3 lignes n° 15 / 17 / 19 = Prise en Charge / Trajet / Fin de Course : j'ai essayé de le faire en utilisant (par exemple pour la ligne 17) : Rows(17).AutoFit ; ça n'a pas marché, et je crois que c'est à cause de la fusion de cellules A17: D17 : il me semble bien qu'AutoFit ne marche pas sur des cellules fusionnées ; voici une piste : si tu dis par exemple qu'une ligne de texte de A17: D17 fait 150 caractères, alors nombre de lignes de la fusion de cellules = nombre total de caractères / 150 ; mais d'un autre côté, même si tu ajustes correctement mon 150 (nombre moyen au hasard), c'est trop empirique à cause de la police de caractères utilisée : c'est une police proportionnelle, donc la largeur d'un caractère est variable : « w » est plus large que « i » ; il faudrait alors utiliser une police de taille fixe, mais même ainsi, c'est pas évident ; je ne suis pas sûr que le jeu en vaut la chandelle, de chercher une solution pour ça, mais si tu trouves une solution qui n'est pas trop complexe, je suis preneur ! 😉



merci pour ton invitation à La Réunion, mais même si Laure est chez toi, c'est quand même bien trop loin d'chez moi ! 😄 et même si j'sais nager, j'pourrai pas non plus rattraper Laure Manaudou : elle va bien trop vite pour moi aussi ! 😜 🤣 elle restera une chimère jolie sirène injoignable ! 😭

🧜‍♀️

soan
Bonsoir Soan,
Je regarde ton fichier de près demain. Ce soir trop fatigué!
Concernant la problématique d'ajustement de la hauteur des cellules, effectivement il semblerait que cela ne soit pas possible sur des cellules fusionnées.
Malgré tout, je suis parti sur deux pistes:
1) ce sont les cellules qui sont fusionnées, pas la ligne: peut-être qu'on peut "jouer" là dessus?
2) Si on part: que les cellules ne sont pas fusionnées au départ, on valide les informations et on code pour les fusionner à la sortie: c'est possible? cela donnerait quelque chose comme: si cellule vide: Hauteur Ligne 15, si cellule contient des données: ajuster Ligne et fusionner A14:D14 (Merge correspond bien à "Fusionner" dans Excel?). Ensuite lorsque l'on quitte l'USF, on le vide et on "défusionne " la ligne pour que lorsque l'on ouvre de nouveau l'USF, la Ligne est déjà défusionnée. Tu en pense quoi?
De fusionner ces cellules permettrait de gagner en espace pour que le Devis ou la Facture ne déborde pas sur 2 pages pour l'impression. Cela permettrait également une meilleure harmonisation de l'espace sur une feuille au moment de l'impression.
Tu découvres là l'un de mes traits de caractère: toujours chercher le plus, toujours rechercher à être au plus près de la perfection. Je sais, on me le dit souvent : c'est pénible. Mais c'est comme ça que j'ai avancé, progressé. Mon projet je l'aurais abandonné depuis longtemps si je n'avais pas ce trait de caractère. C'est ainsi que je t'ai rencontré! Je sais très bien que la perfection je ne l'aurais jamais: il manquera toujours 10cts pour faire 1€.
Pour l'instant j'ai réussi à ajuster les lignes en question à l'aide d'AutoFit dans une sub sur l'onglet Feuille11(Facture):
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Target.Rows.AutoFit
    If Target.RowHeight < 15 Then Target.RowHeight = 15

End Sub
La sub fonctionne sur la ligne mais sur une colonne. Le bouton Quitter m'efface bien les données et la Hauteur des lignes A15/A17/A19 revient à 15.
J'ai deux ou trois petites choses à affiner encore.
Soan merci encore et bonne soirée à toi.
 

Discussions similaires

Réponses
12
Affichages
297

Statistiques des forums

Discussions
312 156
Messages
2 085 815
Membres
102 991
dernier inscrit
remyexcel