Question code VBA

: il ne prend pas en compte les décimales.

Vous n'utilisez pas la bonne fonction de conversion numérique. "Val" convertit toujours en entier. Pour une conversion avec des décimales, il faut utiliser "CDec" .

Par ailleurs, il est inutile d'utiliser le nom des TextBox pour vos boucles. Mieux vaut utiliser la propriété ControlTipText que vous avez remplie.

ci-jointe nouvelle version

Merci beaucoup Thev

Maintenant, pour procéder à l'enregistrement de la classe dans la recette, comment procéder?

J'ai tenté avec ce bout de code pour les textbox, mais il n'y a pas d'effet (fichier en pce jointe).

Et autre chose : on indique le numéro de la colonne à utiliser pour injecter les donner. Est-ce mieux d'utiliser une formule type "dernière ligne" en version colonne, ou est-ce trop risqué (risque d'écrasement des anciennes données en cas de rajout d'une nouvelle variable dans le futur)

    '+++++++++CLASSE RECETTE TEXBOX

    colonne_textbox_recette = 48
    For Each ctrl In Me.Controls
            If TypeOf ctrl Is MSForms.TextBox Then
                If ctrl.ControlTipText = qté_en_poids Then sh_recette.Cells(ligne_insertion, colonne_textbox_recette) = ctrl.Value
                If ctrl.ControlTipText = ingrédient Then sh_recette.Cells(ligne_insertion, colonne_textbox_recette) = ctrl.Value
                If ctrl.ControlTipText = qté_en_pourcent Then sh_recette.Cells(ligne_insertion, colonne_textbox_recette) = ctrl.Value
                If ctrl.ControlTipText = euro Then sh_recette.Cells(ligne_insertion, colonne_textbox_recette) = ctrl.Value
                If ctrl.ControlTipText = poids Then sh_recette.Cells(ligne_insertion, colonne_textbox_recette) = ctrl.Value
                If ctrl.ControlTipText = perte Then sh_recette.Cells(ligne_insertion, colonne_textbox_recette) = ctrl.Value
                colonne_reutilisation = colonne_reutilisation + 1
            End If
    Next ctrl

    Unload Me

End Sub

Merci d'avance

Maintenant, pour procéder à l'enregistrement de la classe dans la recette, comment procéder?

J'ai tenté avec ce bout de code pour les textbox, mais il n'y a pas d'effet (fichier en pce jointe).

Comme ceci;

        '+++++++++CLASSE RECETTE TEXBOX
    With sh_recette        
        colonne_textbox_recette = .Columns("AV").Column
        For Each ctrl_ingrédient In Me.Controls
            If TypeOf ctrl_ingrédient Is MSForms.TextBox And ctrl_ingrédient.ControlTipText = ingrédient Then
                If ctrl_ingrédient.Value <> Empty Then
                    .Cells(ligne_insertion, colonne_textbox_recette) = ctrl_ingrédient.Value
                    For Each ctrl In Me.Controls
                        If ctrl.Tag = ctrl_ingrédient.Tag And ctrl.ControlTipText = qté_en_poids Then .Cells(ligne_insertion, colonne_textbox_recette + 1) = ctrl.Value
                        If ctrl.Tag = ctrl_ingrédient.Tag And ctrl.ControlTipText = qté_en_pourcent Then .Cells(ligne_insertion, colonne_textbox_recette + 2) = ctrl.Value
                        If ctrl.Tag = ctrl_ingrédient.Tag And ctrl.ControlTipText = euro Then .Cells(ligne_insertion, colonne_textbox_recette + 3) = ctrl.Value
                        If ctrl.Tag = ctrl_ingrédient.Tag And ctrl.ControlTipText = poids Then .Cells(ligne_insertion, colonne_textbox_recette + 4) = ctrl.Value
                        If ctrl.Tag = ctrl_ingrédient.Tag And ctrl.ControlTipText = perte Then .Cells(ligne_insertion, colonne_textbox_recette + 5) = ctrl.Value
                    Next ctrl
                    colonne_textbox_recette = colonne_textbox_recette + 6
                End If
            End If
        Next ctrl_ingrédient

    End With

ci-jointe nouvelle version

Et autre chose : on indique le numéro de la colonne à utiliser pour injecter les donner. Est-ce mieux d'utiliser une formule type "dernière ligne" en version colonne, ou est-ce trop risqué (risque d'écrasement des anciennes données en cas de rajout d'une nouvelle variable dans le futur)

Effectivement, indiquer un numéro de colonne complique les modifications futures. Une première solution serait d'affecter une référence de nom à vos colonnes d'insertion : menu Formules --> Gestionnaire de noms. Le numéro de colonne associé à cette référence de nom sera actualisé automatiquement si une colonne est insérée ou supprimée.

L'instruction sera alors :

numéro_colonne = Range("nom_colonne").Column

Hello Thev

Merci beaucoup de votre retour !

Concernant la possibilité de nommer une colonne, si je comprends bien, si je nome la colonne X:X en "colonne x", cela représentara donc l'élément "colonne_textbox_recette + 1" (à la place, je devrai mettre "colonne x")? Mais ça veut dire aussi que je dois nommer autant de colonnes que de variables.

Si vous deviez faire un fichier comme le mien, vous choisisseriez quoi comme solution?

Autre chose : actuellement cela fait 6 variables par ligne ingrédient. Sachant que j'ai pas encore mis une série de choses (checkbox, label, ...), cela fera au moins 8 à 10 variables par ligne ingrédient x 12 = dans les + de 100 colonnes.

Est-ce une chose normale dans ce type de situation ou généralement voyez vous les choses différemment?

Pensez-vous que les infos automatisées (type label écrit de telle manière avec des conditons if, calcul dans les cases, etc. ) doivent être repris dans les variables enregistrées dans la DBB ou aucune utilité selon vous? Se recalculeront elles bien automatiquement une fois que le nom de la recette aura été reconnu et les quelques champs sauvegardés ?

Grand merci

Bav

Quentin

Concernant la possibilité de nommer une colonne, si je comprends bien, si je nome la colonne X:X en "colonne x", cela représentara donc l'élément "colonne_textbox_recette + 1" (à la place, je devrai mettre "colonne x")? Mais ça veut dire aussi que je dois nommer autant de colonnes que de variables.

vous deviez faire un fichier comme le mien, vous choisisseriez quoi comme solution?

Travailler avec un tableau structuré (Menu Insertion --> Tableau). Les entêtes de ligne sont automatiquement reconnues dans le code comme des noms de colonne et son nombre de lignes est fixé. L'écriture du code est simplifiée en utilisant propriétés et méthodes de la classe LIstObject.

Autre chose : actuellement cela fait 6 variables par ligne ingrédient. Sachant que j'ai pas encore mis une série de choses (checkbox, label, ...), cela fera au moins 8 à 10 variables par ligne ingrédient x 12 = dans les + de 100 colonnes.

Est-ce une chose normale dans ce type de situation ou généralement voyez vous les choses différemment?

A mon avis, il vous faut une BDD spécifique avec une ligne par ingrédient avec en colonne 1, le nom de la recette pour faire le lien avec cette dernière.

Pensez-vous que les infos automatisées (type label écrit de telle manière avec des conditons if, calcul dans les cases, etc. ) doivent être repris dans les variables enregistrées dans la DBB ou aucune utilité selon vous? Se recalculeront elles bien automatiquement une fois que le nom de la recette aura été reconnu et les quelques champs sauvegardés ?

A mon avis, Catégorie de Plat, Mode de conservation, Durée de conservation, Difficulté, …. devraient être vos entêtes de colonne avec le résultat du choix (qui apparemment est exclusif) dans la ligne de la BDD.

Bonjour Thev

Merci pour votre retour.

Je m'attarde un peu sur cette fonction listobject.

J'ai été dans excel, sélectionné la feuille BD recette et j'ai fait insertion - tableau. Du coup, si j'ai bien compris, TOUS les intitulés de mes commandes sont maintenant officiellement considéré comme nom de colonne? Un peu comme si j'avais été dans gestionnaire de nom pour chacune des colonnes?

J'ai par exemple fait un test avec ce bout de code, sur une des lignes, mais ca ne fonctionne pas, comment faut il tourner l'écriture?

'+++++++++++++++++++ENREGISTREMENT BDD +++++++++++++++++++++

        .Cells(ligne_insertion, 1) = TextBox_recette.Value
        .Cells(ligne_insertion, 2) = ComboBox_recette_base.ListIndex
        .Cells(ligne_insertion, 3) = ComboBox_saison.ListIndex
        .Cells(ligne_insertion, 4) = ComboBox_recette_reutilisation
        .Cells(ligne_insertion, 5) = CheckBox_base.Value
        .Cells(ligne_insertion, 6) = CheckBox_sous_vide.Value
        .Cells(ligne_insertion, Column.ListObjects(colonne_test)) = CheckBox_frigo.Value
        .Cells(ligne_insertion, 8) = CheckBox_congelateur.Value
        .Cells(ligne_insertion, 9) = TextBox_duree_sous_vide.Value
        .Cells(ligne_insertion, 10) = TextBox_duree_frigo.Value
        .Cells(ligne_insertion, 11) = TextBox_duree_congel.Value
        .Cells(ligne_insertion, 12) = OptionButton_facile.Value
        .Cells(ligne_insertion, 13) = OptionButton_modere.Value
        .Cells(ligne_insertion, 14) = OptionButton_difficile.Value
        .Cells(ligne_insertion, 15) = OptionButton_aucune.Value
        .Cells(ligne_insertion, "AU") = CheckBox_reutilisation.Value

Autre question : je présume que cela est utile quand on fonctionne ligne par ligne comme ici, mais dans le cadre d'une boucle comme ci dessous (ou pour tout "for each" / " next" ), cela ne sera plus possible/pas pratique je présume? Cela reviendrait à alourdir le code d'utiliser la méthode sur les nom de colonnes, non? Car je présume que je vais alors me retrouver que un nombre de ligne égal au nombre de variable (vu que pour chaque variable, il faut citer le titre de la colonne) ?

        colonne_categorie_plat = .Columns.listob("Y").Column
        For Each ctrl_categorie_plat In Me.Frame_categorie.Controls
            If TypeName(ctrl_categorie_plat) = "CheckBox" Then
                .Cells(ligne_insertion, colonne_categorie_plat) = ctrl_categorie_plat.Value
                colonne_categorie_plat = colonne_categorie_plat + 1
            End If
        Next ctrl_categorie_plat

Je vois également que vous avez une préférence pour citer le numéro de colonne par les lettres de la colonne que par un numéro. Est-ce une préférence, ou cela a-t-il un sens caché?

Merci d'avance

Bonjour,

Communiquez-moi votre dernière version.

Voici ma dernière version

Autre chose dans le fichier : après avoir sauvegardé en BDD, il faut pouvoir charger le contenu en cas de de recette existante. Je suis reparti sur les même base que pour le userform produit (si on tape nom recette ==> Si existe ==> ouvre userform listbox recette ==> Si existant = ca recharge tous les champs existants).

Mais malgré avoir bien changé tous les paramètres, ça bloque à la partir "call rech_recette" (qui a été construit selon les même base que pour la rech_produit). Pouvez-vous vérifier au passage ce qui bloque? Et vérifier que mon code pour recharger les infos est correct ?

Grand merci d'avance

Bonsoir,

PointA: Votre tableau structuré:

1- Votre tableau structuré doit se limiter aux lignes et au colonnes utilisées (et non pas être dimensionné à la feuille : environ 1 millions de lignes et 20.000 colonnes)

2- Vous devez nommer votre tableau en cliquant sur Outils de tableau en haut de la fenêtre. Je lui donné le nom : Recettes

3- vous devez définir tous les noms de colonne ; ce que j'ai corrigé

PointB: Simplification du code:

Votre code peut être énormément simplifié en créant un lien entre les noms de colonne du tableau structuré et vos contrôles de formulaire via la propriété : ControlTipText.

Vous avez déjà fait la page Ingrédients qui est donc complète. Les 2 autres pages que j'ai entamées sont à compléter.

ci-dessous le code nécessaire et suffisant pour l'enregistrement dans votre tableau de recettes

             
        '+++++++++++++++++++ENREGISTREMENT BDD +++++++++++++++++++++
        For Each ctrl In Me.Controls
            If Not TypeOf ctrl Is MSForms.Label And Not TypeOf ctrl Is MSForms.CommandButton Then
                If ctrl.ControlTipText <> Empty Then
                    nom_colonne = ctrl.ControlTipText
                    If ctrl.Tag <> Empty Then nom_colonne = nom_colonne & ctrl.Tag
                    On Error Resume Next
                    .ListColumns(nom_colonne).DataBodyRange.Rows(ligne_insertion) = ctrl.Value
                    If Err <> 0 Then If MsgBox("erreur colonne " & nom_colonne, vbOKCancel) = vbCancel Then Exit Sub
                End If
            End If
        Next ctrl

Hello Thev

Un grand merci

En effet, ça simplifie grandement la lecture et le code de sauvegarde / réinitialisation.

Qques questions sur le sujet du coup :

  • Il n'y a pas eu d'autre code que dans le code du userform_recette? Pour le tableau, il suffit juste de le nommer dans la sheet, et dans le code par tb_NOM et c'est suffisant?
  • Si à un moment donné j'ai un doublon dans les controltiptext, l'info ne se sauvegardera pas. Comment voir facilement si on a un doublon. La première idée qui me viendrai : mise en forme conditionnelle sur la ligne des titres avec changement de couleurs si intitulé identique?
  • si je comprends pas, ce type de méthode ne nécessite pas spécialement d'avoir des classes comme nous avons fait dans la page ingrédient. Ca fonctionne avec tout userform tant qu'on a un tableau nommé derrière.
  • On est bien ok qu'avec cette méthode: plus aucun soucis si mes colonnes de BDD sont décalées? Si j'en supprime une ou si j'en insère une car elles sont uniquement reconnues grâce aux noms?
  • est-ce que le sheet "feuil1" a une utilité?

Soucis lié au fichier :

  • Lors de l'enregistrement de la recette, il y a un soucis avec la colonne en pourcent. Elle s'enregistre en pourcent, et c'est le pourcent qui est considéré lors de l'injection (si j'ai 200%, seul 2% sera injecté lors du rechargement)

Revoici le fichier mis à jour avec mes ctrltiptext.

Merci beaucoup

  • Pour le tableau, il suffit juste de le nommer dans la sheet, et dans le code par tb_NOM et c'est suffisant?

Le nom du tableau structuré est : Recettes.

Pour l'assigner dans le code :

1- vous définissez une variable objet de classe ListObject, comme ceci

Dim variable_objet as ListObject

2- vous assignez ensuite votre tableau, comme ceci

Set variable_objet = Range("Recettes").ListObject

(L'instruction Set est toujours utilisée pour assigner une variable objet)

ou en plus abrégé

Set variable_objet = [Recettes].ListObject

Pour la clarté du code, j'ai choisi tb_recettes comme nom de la variable objet

  • Si à un moment donné j'ai un doublon dans les controltiptext, l'info ne se sauvegardera pas. Comment voir facilement si on a un doublon. La première idée qui me viendrai : mise en forme conditionnelle sur la ligne des titres avec changement de couleurs si intitulé identique

Dans un tableau structuré, vous ne pouvez pas avoir de doublon sur un titre. Si vous nommez une colonne avec un titre déjà existant, Excel y ajoutera automatiquement un suffixe d'indice pour éviter le doublon.

  • si je comprends pas, ce type de méthode ne nécessite pas spécialement d'avoir des classes comme nous avons fait dans la page ingrédient. Ca fonctionne avec tout userform tant qu'on a un tableau nommé derrière.

Non. Les classes ont été utiles dans votre cas pour ne gérer dans votre UserForm qu'un seul événement au lieu de 12 pour vos 7 contrôles de formulaires. Sans elles, vous auriez donc dû gérer 98 événements et là vous n'en gérez que 7.

  • On est bien ok qu'avec cette méthode: plus aucun soucis si mes colonnes de BDD sont décalées? Si j'en supprime une ou si j'en insère une car elles sont uniquement reconnues grâce aux noms?

Oui. Car comme tout fonctionne avec les noms de colonnes, vous pouvez les changer de place, en insérer et en supprimer comme ça vous chante. En cas de suppression d'une colonne, il faudra également supprimer sa référence dans la propriété ControlTipText de vos contrôles de formulaire.

  • est-ce que le sheet "feuil1" a une utilité?

Aucune. Je m'en suis servi pour la mise à jour de vos contrôles de formulaire et de votre BDD et ai oublié de la supprimer.

Hello Thev

Génial, merci pour ces explications

Avez-vous pu voir d'où venait le soucis du %?

Merci bcp

Avez-vous pu voir d'où venait le soucis du %?

Je regarde.

Bonjour,

ci-jointe nouvelle version avec addition de messages à l'enregistrement

Génial, un grand merci Thev !!

Alorsss, j'avance un peu dans la création de mes formulaires, et j'ai quels questions qui s'ajoutent à ma liste :

  • J'ai ajouté un userform_bon_commande. Dans cet userform, j'ai essayé de répliquer la technique des modules de classe, comme ils ont été créé pour le userform recette. Mais j'ai quelque chose qui bloque, j'ai l'impression d'avoir tout bien fait. D'ailleurs, j'ai testé si tout était bien reconnu en complétant toutes les textbox par "TEST" au clic sur la label 9, et ça fonctionne. Quand je rajoute l'élément suivant, c'est cela qui bloque le code :
Private Sub UserForm_Activate()   
    'Création des instance de chaque classe de contrôle
    Call création_instances_classe_BC(Me)  
End Sub
  • Au double clic dans la case référence, s'ouvre le userform_recherche_prod. Mais j'aimerai que la liste des références disponible qui apparaitra dépende du choix du fournisseur du bon de commande. Donc : je sélectionne le fournisseur dans le userform_bon_commande, je double clic dans une case produit pour ajouter une référence à ma liste de commande, du coup la listbox de l'userform_recherche_prod saura qu'il doit uniquement afficher les produits de ce fournisseur. Il faut évidemment que ça ne pose pas de pb avec l'utilisation de ce même userform _recherche_prod qui est aussi utilisé dans le cas de l'userform_recette (peut-être que le dupliquer est mieux? ), et de préférence que la case de recherche au dessus de la listbox dans l'userform_bon_commande ne se fasse pas par défaut sur le département, mais plutôt sur la référence produit (peut-on d'ailleurs supprimer les filtres dans "choix colonne recherche" de cet userform_recherche_prod en fonction de ce qui est affiché dans la listbox?)

Dans cet userform, j'essaie aussi de générer une date automatique dans le userform bon de commande que j'essaie de réaliser. Je tourne en rond, j'arrive pas à trouver la bonne formule

En bref, ;

  • On a un userform fournisseur dans lequel on règle le nom du fournisseur
  • Dans ce même userform, on règle les jours sur lesquels le fournisseur livre (checkbox lundi à vendredi)
  • pour chaque jour de livraison coché, on règle le jour durant lequel la commande doit être passée pour recevoir la commande le jour coché
  • exemple : le fournisseur RESTOF a le jour de livraison du lundi de coché avec commande le vendredi. Cela signifie que pour recevoir ma commande lundi, je dois commander vendredi.

Pour le moment j'arrive plus ou moins à générer ces infos avec le code présent dans le userform_bon_commande, mais il y a qques soucis qui résident ;

  • Exemple : le fournisseur restofrais : ca donne à chaque fois le bon jour.
  • Pour le fournisseur terroirist, par contre, il livre le lundi (avec commande le jeudi) et le jeudi (avec commande le lundi). Si je fais un test sur le lundi, ça fonctionne bien, il dit commande le lundi pour livraison le jeudi. Par contre, si je prend le mardi, il me propose commande le lundi pour livraison le jeudi. Alors que je suis trop tard et qu'il aurait du me proposer la commande le jeudi pour livraison au plus tot le lundi. Je ne comprends pas trop, ça fait un moment que je cherche.

Le but de tout ça où je bloque aussi (la message box n'est pas le but, c'est juste pour m'aider à travailler)

  • Que le Label_date_livraison dans le userform_bon_commande me dise, dès sélection d'un fournisseur, la première date de livraison possible selon la date du jour de commande et selon les conditions citées ci dessus. Il faut donc réussir à générer ce fameux label
  • que le Label_prochain_creneau de livraison contienne le prochain créneau de livraison possible si je bouge la date à un autre jour (donc ex : je suis mardi aujourd'hui, je sélectionne une date qui est demain, après demain, ... et à chaque fois que je change cette date, le jour de livraison apparait)
  • Rajouter si possible une condition horaire "commande avant X heure" que je rajouterai par la suite dans le userform fournisseur. Si par exemple la limite est 14h, cela signifie que si je passe commande à 15h et qu'on est lundi, le formulaire considérera qu'on passe au conditions de commande comme si on était le lendemain.

Un TOUT grand merci

J'ai ajouté un userform_bon_commande. Dans cet userform, j'ai essayé de répliquer la technique des modules de classe, comme ils ont été créé pour le userform recette. Mais j'ai quelque chose qui bloque, j'ai l'impression d'avoir tout bien fait. D'ailleurs, j'ai testé si tout était bien reconnu en complétant toutes les textbox par "TEST" au clic sur la label 9, et ça fonctionne. Quand je rajoute l'élément suivant, c'est cela qui bloque le code :

Private Sub UserForm_Activate()   
    'Création des instance de chaque classe de contrôle
    Call création_instances_classe_BC(Me)  
End Sub

Il manquait dans votre userform_bon_commande la variable publique "séquence_instance" employée dans les modules de classe pour ne pas utiliser les événements d'anciennes instances dont les liens n'ont pas été libérés de la mémoire.

Par ailleurs, il est plus clair d'avoir 2 modules distincts pour la création des instances de classe relatives à chaque UserForm

Au double clic dans la case référence, s'ouvre le userform_recherche_prod. Mais j'aimerai que la liste des références disponible qui apparaitra dépende du choix du fournisseur du bon de commande. Donc : je sélectionne le fournisseur dans le userform_bon_commande, je double clic dans une case produit pour ajouter une référence à ma liste de commande, du coup la listbox de l'userform_recherche_prod saura qu'il doit uniquement afficher les produits de ce fournisseur. Il faut évidemment que ça ne pose pas de pb avec l'utilisation de ce même userform _recherche_prod qui est aussi utilisé dans le cas de l'userform_recette (peut-être que le dupliquer est mieux? ), et de préférence que la case de recherche au dessus de la listbox dans l'userform_bon_commande ne se fasse pas par défaut sur le département, mais plutôt sur la référence produit (peut-on d'ailleurs supprimer les filtres dans "choix colonne recherche" de cet userform_recherche_prod en fonction de ce qui est affiché dans la listbox?)

ci- jointe nouvelle version avec simplification du code de la procédure événementielle

Dans cet userform, j'essaie aussi de générer une date automatique dans le userform bon de commande que j'essaie de réaliser. Je tourne en rond, j'arrive pas à trouver la bonne formule

Je regarde car cela demande plus de réflexion.

A quoi correspondent ces colonnes : Cdt liv Lundi, ....

Grand merci Thev,

Je regarde votre fichier

Concernant votre question, si vous ouvrez l'userform fournisseur, et que vous choisissez un fournisseur, cela illustrera plus facilement l'idée.

Concrètement, voici une série d'exemples :

  • En bdd : Lundi, mardi, mercredi , ... = condition pour dire si un fournisseur peut ou non livrer ce jour de la semaine
  • Colonne cdti livraison = si j'ai coché le lundi dans les jours de livraison, la colonne "cdt livraison lundi" me dira quel jour je dois commander pour recevoir ma commande le lundi. Donc par exemple :
    Si je suis le lundi, que la colonne mardi est true, cela signifie que je peux me faire livrer le lendemain SI et seulement SI la colonne cdt mardi indique le lundi en "Cdt livraison mardi". Si cette colonne "Cdt livraison mardi" indiquait dimanche, alors je suis trop tard, ce n'est pas possible de commander, et le userform recherche le prochain jour de livraison ou la "cdt livraison mardi" sera accessible (c-a-d lundi).
  • Si je suis mardi, et que le premier jour coché est le vendredi, et que la "cdtion livraison vendredi" est mercredi, je peux commander mardi pour vendredi
  • Si je suis mardi, et qu'il ya deux jours de livraison coché qui sont lundi et vendredi, et que la "cdtion livraison vendredi" est lundi, je ne peux pas commander mardi pour vendredi car lundi est passé. La date de livraison sera donc le lundi si la cdt de livraison est < au mardi.
  • J'ai un fournisseur dont les jours sont coché du lundi au vendredi. Cela signifie qu'il livre du lundi au vendredi. Pour chacun de ces jours, la cdtion de livraison est à chaque fois la veille (donc je dois commander au plus tard le jour J pour recevoir le lendemain). Si je suis lundi, alors je peux commander vendredi, samedi ou dimanche pour le lundi.
  • ATTENTION : l'ajout d'une condition commande avant X heure (info que je dois rajouter dans l'userform_fournisseur) fait un peu varier la condition. Exemple : si on est lundi, que le premier jour de livraison est mardi et que la "cdti livraison mardi" est le lundi, si on a pas d'heure, ou si on a minuit, alors on pourra commander lundi pour mardi. Par contre, si mon heure réglée est 15H, et qu'on est 16H, cela veut dire qu'on ne peut plus commander lundi pour mardi et qu'il cherche la prochaine condition vraie.

N'hésitez pas à me dire si ce n'est pas clair

Grand merci

N'hésitez pas à me dire si ce n'est pas clair

Pour être clair, que signifie les valeurs portées dans vos colonnes : Cdt liv Lundi,Cdt liv Mardi, Cdt liv Mercredi, Cdt liv Jeudi, Cdt liv Vendredi , Cdt liv Samedi, Cdt liv Dimanche ?

est-ce un numéro de jour avec 1 = Lundi, …. 6=Samedi ??

Si oui, dans ce cas que viennent faire les valeurs - 1 ??

Les valeurs :

0 = lundi

1 = mardi

2 = mercredi

Et -1 = vide

Ces valeurs viennent des combobox de l'userform fournisseur. Auriez-vous procédé à un enregistrement différemment?

Mais ne correspondant pas au vba ou le lundi = 2, etc. D'où le fait qu'à la fin de mes calculs, je faisais premier_jour_commande = premier_jour_commande + 2 pour le "traduire" en VBA

Ces valeurs viennent des combobox de l'userform fournisseur. Auriez-vous procédé à un enregistrement différemment?

Oui. Une table de données doit toujours avoir des données indépendantes du code. Je vous recommande donc :

1- de revenir aux valeurs classique : 1,2, … 7 , rien quand c'est vide et d'adapter votre code en conséquence

2- de passer à un tableau structuré pour simplifier le code au niveau de la manipulation des données de cette table.

Rechercher des sujets similaires à "question code vba"