Question code VBA

Voici le fichier mis à jour avec un tableau d'enregistrement pour le userform fournisseur. Les 0,-1,... des cdt de livraison sont maintenant devenus des lundi, mardi, .... Est-ce bon pour vous?

Ce qui m'étonne dans le code de l'userform_bon_commande, c'est que j'ai fait les modifs, le double clic fonctionne maintenant pour choisir une référence, mais par contre, le reste des formules for each.... next for que j'ai mis en utilisant les classes, ça ne fonctionne pas. Je ne comprends pas à nouveau où j'ai mal fait. En relisant le userform_recette, je suis exactement la même démarche.

Voici le fichier mis à jour avec un tableau d'enregistrement pour le userform fournisseur. Les 0,-1,... des cdt de livraison sont maintenant devenus des lundi, mardi, .... Est-ce bon pour vous?

manque le fichier ??

Bizarre, il ne s'est pas mis. Le voici

Bonjour,

ci-jointe nouvelle version avec tous les événements fonctionnant.

Je regarde plus tard la date de livraison fournisseur

Ok top, merci pour la date de livraison

Merci pour le fichier. Ca bloque sur deux trois points ;

Le seul "For Each"..."Next for" qui fonctionne pour le module de classe est celui pour le label + et -. Mais les événements suivants ne fonctionnent pas.

                If ctrl.ControlTipText = code_fournisseur Then ctrl = sh_prod.Cells(ligne_référence, 4).Value
                If ctrl.ControlTipText = code_fournisseur Then ctrl = sh_prod.Cells(ligne_référence, 4).Value
                If ctrl = "" Then ctrl = "Inconnue"
    For Each ctrl In Me.Controls
        If ctrl.Tag = Textbox_quantité.Tag Then
            If TypeOf ctrl Is MSForms.TextBox Then
                If ctrl.ControlTipText = prix_total Then Set Txt_prix_total = ctrl
                If ctrl.ControlTipText = prix_unitaire Then Set txt_prix_unitaire = ctrl
                If ctrl.ControlTipText = quantité Then Set Txt_quantité = ctrl
            End If
        End If
    Next ctrl

    If Txt_quantité <> 0 Then Txt_prix_total.Value = CDec(txt_prix_unitaire) * CDbl(Txt_quantité)

J'ai changé la BD_PROD en tableau, idem pour l'enregistrement. Ca peut donc apporter certaines modifs.

Du coup, quand on a un tableau, et un code tel que sh_prod.Cells(ligne_référence, 4).Value, puis je indiquer la colonne par sh_prod.Cells(ligne_référence, "NomDeLaColonne").Value ?

Voici un nouveau fichier mis à jour avec la bd_prod en tableau.

Grand merci

Le seul "For Each"..."Next for" qui fonctionne pour le module de classe est celui pour le label + et -. Mais les événements suivants ne fonctionnent pas.

Normal, vous n'êtes pas reparti du fichier que je vous ai transmis car j'ai opéré des changements dans les modules ...

Bonjour,

ci-joint votre dernier fichier avec uniquement la mise à jour des modules.

merci de repartir de ce fichier

Ok, top, merci Je check

Oups, oublié de mettre les modules à jour (avez-vous une astuce pour voir les changement de code d'un fichier à l'autre? Car quand je continue à travailler je mets parfois mon fichier à jour avec vos infos si j'ai fort avancé entre temps - du coup pour le moment la solution est de comparer feuille de code par feuille de code , mais pas le plus pratique)

Par rapport à ce point, vous avez un conseil? :

Du coup, quand on a un tableau, et un code tel que sh_prod.Cells(ligne_référence, 4).Value, puis je indiquer la colonne par sh_prod.Cells(ligne_référence, "NomDeLaColonne").Value ?

Grand merci

[quote=Quentinvdb post_id=856488 time=1586365414 user_id=64416]

Du coup, quand on a un tableau, et un code tel que sh_prod.Cells(ligne_référence, 4).Value, puis je indiquer la colonne par sh_prod.Cells(ligne_référence, "NomDeLaColonne").Value ?

Pas avec le code standard mais avec celui lié à un tableau structuré. Exemple de code :

Dim tb_structuré as ListObject
Dim i as Integer

set tb_structuré = Range(nom_tableau_structuré).ListObject
With tb_structuré
        i =  ligne_référence - .HeaderRowRange.row
        x = .ListColumns("NomDeLaColonne").DataBodyRange.Rows(i).Value
End With

Oups, oublié de mettre les modules à jour (avez-vous une astuce pour voir les changement de code d'un fichier à l'autre? Car quand je continue à travailler je mets parfois mon fichier à jour avec vos infos si j'ai fort avancé entre temps - du coup pour le moment la solution est de comparer feuille de code par feuille de code , mais pas le plus pratique)

Vous savez où vous avez apporté vos modifs depuis le dernier fichier que vous m'avez communiqué. Le fichier que je vous retransmets n'est vieux que de quelques heures. Le plus simple me parait être de repartir du fichier que je vous ai retransmis.

Merci pour la réponse à l'autre question.

Je repartirai du fichier que vous m'avez donné (v6.1) pour continuer mon travail

Grand merci

Bonjour,

ci-jointe nouvelle version avec gestion date de commande et tableaux structurés.

NB : modif UserForm Bon de commande et noms tableaux structurés

Merci beaucoup Thev

C'est top, ça se rapproche, il y a encore un élément qui n'est pas encore bon dans le résultat final ;

  • Chose importante : on ne peut pas se faire livrer jour_j. Donc si je suis jeudi, je ne peux pas me faire livrer. Si je suis jeudi, le système regarde le premier jour de livraison (donc col_jour = true) à partir de jour_j+1.
  • Message actuel pour restofrais = je passe commande le jeudi 9/04 pour être livré le jeudi 9/04 ==> AURAIT DU ÊTRE : Je passe commande le jeudi 9/04, pour une livraison le vendredi 10/04

Pour le reste des message, j'ai vérifié, ça parait très bien, grand merci, quel casse tête !!

J'ai rajouté une info sur l'heure dans la BD_FOUR dans la version 6.3 du fichier ci joint. Heure en format 00:00. Est-ce possible d'ajouter la condition. Donc si je suis le jour J et que je peux normalement commander, c'est seulement si je suis avant l'heure indiquée dans la BD. Donc s'il est mis 15H, et qu'il est 16H, jour_j sera considéré comme demain je présume?

Grand merci d'avance

(au passage petit soucis dans le userform produit à partir de la v6.2 - le formulaire ne s'ouvre plus )

Sub charger_userform_produit()
    UserForm_produit.Show
End Sub

au passage petit soucis dans le userform produit à partir de la v6.2 - le formulaire ne s'ouvre plus

C'est corrigé. C'est quand j'ai renommé les tableaux structurés.

ci-jointe nouvelle version en tenant compte de l'heure pour Restofrais

Merci Thev,

Par contre la condition heure ne fonctionne pas encore j'ai l'impression.

Pour restofrais, l'heure est fixée à 15:00.

Vu qu'on est 15h30, cela signifie que avant 15 h le message aurait été le suivant : je commande le jeudi pour livraison le vendredi.

Après 15h par contre (donc maintenant) : il devrait comprendre qu'il est trop tard pour se faire livrer demain. Le message devrait être : je commande jeudi (mnt) MAIS pour livraison le lundi (vu que plus possible le vendredi et pas de livraison le we).

Grand merci d'avance

Vu qu'on est 15h30, cela signifie que avant 15 h le message aurait été le suivant : je commande le jeudi pour livraison le vendredi.

Ce n'est pas ce que comprends au niveau du paramétrage dans votre tableau Fournisseurs.

Dans votre tableau pour Restofrais, il est dit que si l'on veut être livré Jeudi alors il faut commander le Jeudi avant 15h. Si ce n'est pas le cas, alors mettez Vendredi à la place de Jeudi et tout fonctionnera.

Bonjour Thev

En effet, les jours n'étaient pas les bon. Pour Restofrais, on devrait avoir :

  • lundi =vrai /// Cdtion livraison = dimanche ==> Cela signifie que je commande au + tard le dimanche pour recevoir le lundi
  • Mardi=vrai /// Cdtion livraison = lundi==> Cela signifie que je commande au + tard le lundi pour recevoir le Mardi
  • mercredi=vrai /// Cdtion livraison = Mardi==> Cela signifie que je commande au + tard le Mardi pour recevoir le mercredi
  • jeudi=vrai /// Cdtion livraison = mercredi==> Cela signifie que je commande au + tard le mercredi pour recevoir le jeudi
  • vendredi=vrai /// Cdtion livraison = jeudi==> Cela signifie que je commande au + tard le jeudi pour recevoir le vendredi

Si pour voir si l'heure fonctionne je fais un test et je mets :

  • lundi =vrai /// Cdtion livraison = vendredi ==> Cela signifie que je commande au + tard le vendredi pour recevoir le lundi
  • Je change l'heure et je mets 9:00 pour faire mon test. Cela signifie que théoriquement, il devrait me dire que vendredi n'est plus possible car j'ai dépassé 9h (possible de mettre un message au bon endroit du code?), et donc passer au prochain jour possible de livraison qui sera mardi = vrai. Et pourtant, il continue à me dire que je peux me faire livrer lundi en commandant vendredi

Merci d'avance

Bonjour,

ci-jointe nouvelle version

Merci Thev,

Encore 2-3 éléments qui ne marchent pas selon le tableau :

  • Restofrais : si je sélectionne, il me met cmd dimanche pour livraison mardi. Donc la condition d'heure a bien fonctionné (si je mets l'heure + tard, il me propose bien cmd aujourd'hui pour livraison lundi), mais il aurait dû normalement me mettre cmd lundi pour mardi (car la cdtion du mardi = le lundi). Cela vient du fait je pense, que quand une condition est dépassée (ex: 9h), il prend la condition du jour de livraison (ici cdt cmd le lundi pour le mardi) -1 (et mets donc dimanche). Car ça fait pareil avec le Fournisseur 2 qui aurait dû me dire commande le mercredi 15/04 pour livraison lundi 20/04, et il a mis cmd mard 14/04 pour livraison lundi 20/04.
  • Terroirist : pas d'heure de réglée. Premier jour de livraison possible = lundi. Condition du lundi = commande le vendredi. Il aurait donc du me dire commande le vendredi pour livraison le lundi. Je vois que SI par contre j'indique une heure (ex : 15h), il fonctionne correctement. Cela vient donc de la condition d'heure, et je présume du fait qu'elle ne soit pas indiqué. Si pas indiqué, peut être considéré heure max = on a toute la journée jusque minuit pour commander.
  • Four. X : si j'essaie, il me met "jour de livraison non reconnu dimanche". La bonne démarche aurait été : jour livraison dimanche possible mais conditon pas respectée car commande le mercredi et on est vendredi, donc passage au jour suivant. Jour suivant possible = le lundi avec la condition du dimanche. La c'est ok, donc il aurait dû mettre "je commande lundi pour livraison dimanche". Idem Fournisseur 1. Je pense qu'il y a un soucis avec le dimanche.

Désolé, un peu casse-tête tout ça

Grand merci

Rechercher des sujets similaires à "question code vba"