Microsoft 365 Chargement Combobox

eric72

XLDnaute Occasionnel
Bonsoir à tous,
Je rencontre un petit souci pour alimenter une combobox, je vais tenter d'être clair
Dans le userform qui s'ouvre quand j'active le "planning de commande", je sélectionne un "mois", j'aimerais que la combobox "cbsem" soit alimentée par les cellules bh1, bq1, bw1, as1, ad1 et o1, (qui correspond au numéro de semaines du mois sélectionné
d'autre part si je choisis le mois de JANVIER, et la semaine 1, j'aimerais que la cellule b4 Soit sélectionnée (qui correspond au lundi de la semaine 1 du mois de Janvier)
J'espère avoir été assez clair dans mes explications.
Quoi qu'il arrive je vous remercie 1000 fois pour votre implication
Cordialement.
Eric
 

Pièces jointes

  • test Planning Commande.xlsm
    581.2 KB · Affichages: 6
Solution
Merciiiiiiii c'est quasiment ce que je voulais, je n'y serais pas arrivé sans votre aide.
Le seul petit hic est que lorsqu'on veut changer de mois sans sortir du userform, il faut supprimer le mois puis en taper un nouveau, si on change de mois avec la liste déroulante il ne va pas sur l'onglet choisi.
j'ai donc ajouter un "unload me" après la sélection de la semaine.

Vous êtes génial (même si je n'ai pas tout compris à votre solution), quelle efficacité!!!
Bonne soirée et merci beaucoup.
Eric

Hasco

XLDnaute Barbatruc
Bonjour,

Je sais que je ne réponds pas à votre question, mais, il me semble que vous prenez les choses à l'envers.

C'est à dire que vous partez de données éparpillées dans différentes feuilles (comme vous voulez les voir sur papier) au lieu de faire une base de données en tableau structuré avec 'Date', 'Dpt',' Box', 'Rolls' , 'Semaine' en noms de colonnes.

Vous pourriez rassembler vos données sur plusieurs années en un seul tableau.

Ce serait beaucoup plus facile à gérer, plus souple à manipuler, à présenter.
Vous pourriez n'avoir qu'une feuille de présentation mensuelle (avec choix du mois) et/ou hebdomadaire avec choix de la semaine à afficher.

De plus cela vous permettrait de faire facilement des statistiques, Graphiques et autres tableaux croisés dynamiques ou (puisque vous avez 365) des requêtes powerquery plus efficaces.

L'éventuel archivage serait plus simple également

Cordialement
 
Dernière édition:

eric72

XLDnaute Occasionnel
Bonjour,
Je comprends bien votre raisonnement mais dans le cas présent j'ai besoin de cette méthode, si au moins vous pouviez me dire comment afficher les numeros de semaine dans "CbSem" en fonction du mois choisi sans "CbMois".
Merci beaucoup
Cordialement.
Eric
 

Hasco

XLDnaute Barbatruc
Re,

Dans la macro suivante, je prends l'année du jour en compte car votre classeur ne contient pas de cellule pour l'année en cours. Sur les feuilles l'année peut être différente d'une feuille à l'autre. Le nom An est un nom localisé à la feuille. Au quotidien vous courrez au devant d'erreurs d'attention. Bref, la macro suivante fait ce que vous demandez pour les mois de l'année en cours.

VB:
Private Sub CbMois_Change()
    Dim semDep As Integer, semFin As Integer, i As Integer
    If CbMois.ListIndex = -1 Then Exit Sub
    'Numéro de semaine iso du premier du mois
    semDep = Application.IsoWeekNum(DateSerial(Year(Date), CbMois.ListIndex + 1, 1))
    'Numérode de semaine iso du dernier jour du mois (= jour 0 du mois suivant)
    semFin = Application.IsoWeekNum(DateSerial(Year(Date), CbMois.ListIndex + 2, 0))
    If semDep = 53 Then semDep = 1
    CbSem.Clear
    For i = semDep To semFin: CbSem.AddItem i: Next
End Sub

Cordialement
 

Pièces jointes

  • test Planning Commande.xlsm
    580.8 KB · Affichages: 2
Dernière édition:

eric72

XLDnaute Occasionnel
Bonjour,
Merci beaucoup mais je constate par exemple pour janvier qu'il y a une 5ème semaine qui n'apparait pas dans cbSem et d'autre part est il possible d'après la semaine choisie de se rendre directement a la 1ère cellule de saisie par exemple pour Janvier 2022, en B4.
J'en demande peut-être beaucoup!!!

"Dans la macro suivante, je prends l'année du jour en compte car votre classeur ne contient pas de cellule pour l'année en cours."
La cellule avec l'année en cours est en H1 dans l'onglet Janvier..

Merci beaucoup pour votre aide si précieuse.
Eric
 

Hasco

XLDnaute Barbatruc
Re,

Modifier le test.
VB:
If semDep > 51 Then semDep = 1

Pour votre deuxième question, qu'est-ce que vous avez tenté pour résoudre par vous même ?
Je ne vais pas faire à votre place, petit à petit. Je veux bien répondre si vous avez des difficultés dans ce que vous faites mais si vous ne faites rien vous même, je ne ferai pas non plus.

Cordialement
 

eric72

XLDnaute Occasionnel
J'ai essayé cela
"Private Sub CbSem_Change()
If CbSem.Value = Sheets(CbMois.Value).Range(o1) Then
Sheets(CbMois.Value).Range("b4").Select
End If
End Sub

que j'ai analysé comme ça: si la valeur (semaine) de ma combobox est égale
à la cellule o1 de la feuille "cbmois.value" (par exemple JANVIER), alors sélectionner la cellule B4
J'ai une erreur ici : If CbSem.Value = Sheets(CbMois.Value).Range(o1) Then

Merci encore, en général quand je demande une solution c'est que j'y ai déjà passé quelques heures à rechercher.
Eric
 

Hasco

XLDnaute Barbatruc
Re,

Merci encore, en général quand je demande une solution c'est que j'y ai déjà passé quelques heures à rechercher.
C'est mieux de voir ce que vous faites car ainsi je peux adapter ce que je vous donne à ce que vous savez déjà et pouvez acquérir.

Quelque changements :
Dans les feuilles Janvier à Mars j'ai figer les 3 première lignes afin que vos entêtes ne disparaissent pas de l'écran lors du déplacement vers le lundi trouvé. voir Sub CbSem_Change()
Dans le module :
La variable 'An' est déclarée en tête de module et valorisée sur évènement initialize du userform.

Si vous utiliser les noms des mois pour vos feuilles et en VBA faites attention à ce que le nom renvoyé par vba soit le même (accent, pas accent etc....)

Par exemple : Ucase(Format(DateSerial(2021,8,1),"MMMM")) '
donnera AOÛT avec un accent. Alors si vos feuilles n'ont pas l'accent -> erreur


VB:
Dim An As Integer

Private Sub CbMois_Change()
    Dim semDep As Integer, semFin As Integer, i As Integer
    If CbMois.ListIndex = -1 Then Exit Sub
    '
    ' Numéro iso des première et dernière semaines du mois
    semDep = Application.IsoWeekNum(DateSerial(An, CbMois.ListIndex + 1, 1))
    semFin = Application.IsoWeekNum(DateSerial(An, CbMois.ListIndex + 2, 0))
    '
    ' si le 1 janvier est en semaine 52 ou semaine 53 de l'année précédente alors semDep = 1
    If semDep > 51 Then semDep = 1
    '
    ' Nettoyage et garniture de la combobox
    CbSem.Clear
    '
    For i = semDep To semFin: CbSem.AddItem i: Next
    
End Sub

Private Sub CbSem_Change()
    Dim idx As Variant
    Dim Lundi As Date
    '
    ' Si aucun choix -> sortir
    If CbSem.ListIndex = -1 Or CbMois.ListIndex = -1 Then Exit Sub
    '
    ' Calcul du lundi correspondant au numéro de semaine
    Lundi = 7 * Val(CbSem) + DateSerial(An, 1, 3) - Weekday(DateSerial(An, 1, 3)) - 5
    '
    '
    With ThisWorkbook.Sheets(UCase(CbMois.Value)).Range("B3:BX3")
        '
        ' Récupérer l'index de cellule de la date dans la plage
        idx = Application.Match(CLng(Lundi), .Cells, 0)
        '
        ' si trouvé alors y aller
        If Not IsError(idx) Then Application.Goto .Cells(1, idx), True
    End With


End Sub

Private Sub UserForm_Initialize()
    '
    ' Récupération de l'année en cours
    An = ThisWorkbook.Sheets("JANVIER").Range("H1").Value
End Sub

Cordialement
 

Pièces jointes

  • test Planning Commande.xlsm
    575.2 KB · Affichages: 1

eric72

XLDnaute Occasionnel
Merciiiiiiii c'est quasiment ce que je voulais, je n'y serais pas arrivé sans votre aide.
Le seul petit hic est que lorsqu'on veut changer de mois sans sortir du userform, il faut supprimer le mois puis en taper un nouveau, si on change de mois avec la liste déroulante il ne va pas sur l'onglet choisi.
j'ai donc ajouter un "unload me" après la sélection de la semaine.

Vous êtes génial (même si je n'ai pas tout compris à votre solution), quelle efficacité!!!
Bonne soirée et merci beaucoup.
Eric
 
Haut Bas