Generation de commandes VBA

Bonjour à tous,

je viens solliciter votre aide pour un code VBA que j'essaie de faire tourner.

J'ai une feuille Menus, et une feuille Commandes.

Ce que j'aimerais,c'est qu'avec le userform que j'ai créé, j'arrive à générer de nouvelles lignes en fonction de ces critères dans la feuille Commandes:

Liste clients : je choisis le client pour lequel je souhaite ajouter des commandes

Jour : nombre de jours de commande à créer

Date : à partir de laquelle commencer à copier

Ainsi,si dans ma feuille menus, qui se décompose :

IdDateEntréePlatLégumesFéculentFromage LaitageDessert

je souhaite prendre tous les plats par exemple du 01/04/2023 au 30/04/2023 (si j'ai indiqué 30 jours dans ma textbox "Jour" 30), et les insérer dans l'onglet Commandes, avec le nom du client qui va bien, et que chaque ligne corresponde à un jour du menu avec si possible l'entrée de reportée, le plat, légumes, féculent, fromage/laitage,dessert.

L'onglet Commandes lui, se décompose ainsi:

Id clientClientDateNbEntréePlatLégumesFéculentFromage LaitageDessert

La colonne Nb est le nombre de personnes, ce n'est pas important en soi je peux corriger manuellement c'est rapide. Par défaut cela peut être sur 1 sinon.

Voici le code en question :

Private Sub BOUTONAnnuler_Click()

End Sub

Private Sub BoutonVALIDER_Click()

    ' Récupérer les informations de la feuille de calcul
    Dim dateDebut As Date
    dateDebut = CDate(BOXDate.Value)

    Dim nbJours As Integer
    nbJours = CInt(BOXNbJours.Value)

    Dim clientChoisi As String
    clientChoisi = Liste_Clients.Value

    ' Itérer sur chaque jour du mois et créer une nouvelle commande
    Dim i As Integer
For i = 0 To nbJours - 1

        ' Calculer la date du jour à créer
        Dim dateCommande As Date
        dateCommande = DateAdd("d", i, dateDebut)

        ' Formater la date pour éviter les erreurs de format de date
Dim dateCommandeFormatted As String
dateCommandeFormatted = Format(dateCommande, "jj/mm/aaaa")

        ' Rechercher la ligne correspondant à la date dans la colonne B de l'onglet Menus
        Dim ligneMenu As Variant
        ligneMenu = Application.Match(Format(dateDebut, "jj/mm/aaaa"), Worksheets("Menus").Range("B3:B800"), 0)

        ' Vérifier si une correspondance a été trouvée
        If Not IsError(ligneMenu) Then
            ' Récupérer le plat proposé pour cette date
            Dim platPropose As Variant
            platPropose = Worksheets("Menus").Cells(ligneMenu, 4).Value

            ' Créer une nouvelle ligne de commande pour ce jour
            Dim numLigne As Integer
            ' Vous devrez remplacer "Commandes" par le nom de votre feuille de calcul correspondante
            numLigne = Worksheets("Commandes").Range("A" & Rows.Count).End(xlUp).Row + 1

            Worksheets("Commandes").Range("B" & numLigne).Value = clientChoisi
            Worksheets("Commandes").Range("C" & numLigne).Value = dateCommande
            Worksheets("Commandes").Range("F" & numLigne).Value = platPropose
        Else
            ' Afficher un message d'erreur si la date n'a pas été trouvée
            MsgBox "La date " & dateCommande & " n'a pas été trouvée dans l'onglet Menus."
        End If
    Next i

    ' Afficher un message de confirmation
    MsgBox "Les commandes ont été créées avec succès !"
End Sub

Private Sub UserForm_Click()

End Sub

J'avais une variable ColonneMenu qui était censée faire l'EQUIV ou rechercheV, je n'ai pas réussi à le faire fonctionner donc j'ai voulu l'enlever et adapter, je dois louper quelque chose. Fichier exemple en PJ
Merci à tous pour votre aide !

Bonjour,

Voir fichier ci-joint. Pour pouvoir tester, j'ai créé sur la feuil1un tableau nommé "t_Clients" avec 2 colonnes "ID" et "Client". Il faudra retoucher le code pour prendre en compte votre onglet / tableau contenant les clients et la mise à jour de la liste_clients.

Pour faire la recherche d'une date avec RECHERCHEx, EQUIV, il faut transformer la date en entier long (ou numérique double si on recherche avec l'heure) car les dates sont numériques (30/3/2023 = 45015).

Dites moi si cela vous convient et si vous avez besoin d'infos complémentaires pour l'adapter à votre fichier réel.

Hello,

C'est dommage d'avoir inséré Client & nb au milieu des colonnes à récupérer dans la table menus.

Si les colonnes de la table Menu étaient contigües dans la table commande, il aurait suffit de faire un filtre chronologique sur la colonne date, copier les cellules visible et coller le résultat ... 3 - 4 lignes c'est fait.

Bonjour,

Tout d'abord avec des tableaux structurés, il est bien plus simple et plus parlant d'utiliser le code qui y est associé (classe ListObject). Voir mon tuto à cet égard

https://forum.excel-pratique.com/astuces/tableau-structure-instructions-vba-specifiques-a-cet-objet-...

ci-joint votre classeur avec le code revu et corrigé

71-commandes.xlsm (65.05 Ko)

@cylfo en effet j'ai cru comprendre que le formattage des dates était parfois compliqué quand on a pas l'habitude, j'ai essayé différentes manières sans trouver la bonne solution. Dans le fichier le code fonctionne mais en effet la colonne Nb prend les entrées de l'onglet menu, il manque un décalage d'une cellule. Simplement parce que d'un client à l'autre, ils ne sont pas toujours seuls, parfois en couple, et dans le cas des entreprises il y a un nombre récurrents d'employés qui déjeunent sur place qu'il faut comptabiliser. Avant je créai autant de lignes qu'il y avait de personnes pour qui cuisiner, mais je me retrouvais avec des tableaux imbuvables :D

@rag l'ami picard :) oui c'est vrai je pourrais par exemple déclarer la colonne du nombre de clients en toute première position, rien n'est figé.C'est sur que tout est toujours sujet à évolution avec les contraintes imprévues qui se créent.

@Thev merci aussi pour ce fichier qui en effet fonctionne également en copiant les cellules, mais c'est le même plat qui est repris pour tous les jours créés, or il aurait été appréciable que le plat du 2è jour corresponde au plat du 2è jour créé. Possible d'y inclure par hasard entrées laitages et dessert par hasard?

Bonsoir,

J'ai corrigé et j'ai également repris les conseils de @Thev pour l'accès aux colonnes.

Bonsoir,

ci-jointe nouvelle version

32-commandes.xlsm (67.33 Ko)

Hello,

Merci pour ces fichiers, je passe en résolu et suivrai avec beaucoup d'attention les prochains codes vba postés ainsi que le tuto de Thev, merci du lien !

Au plaisir !

Rechercher des sujets similaires à "generation commandes vba"