XL 2021 Récupération n° du mois depuis liste déroulante texte pour macro

Nicolas JACQUIN

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,
Je cherche à récupérer le numéro du mois saisie dans une liste déroulante (format texte), pour intégrer ce numéro dans une macro, pour le moment j'ai une incompatibilité de type.
Merci à tous.
Nicolas

Capture d’écran 2024-06-01 080023.jpg


VB:
Sub Creation()
    Dim WsP As Worksheet
    Set WsP = ThisWorkbook.Worksheets("Paramètre")
    année = WsP.Range("B3").Value: mois = WsP.Range("C3").Value
    Agenda année, mois
    Set WsP = Nothing
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Bonjour,
A tester, si erreur dans les accents faut rectifier ou procéder avec un Array
Bruno
VB:
Sub Creation()
    Dim WsP As Worksheet
    Dim k%
    Set WsP = ThisWorkbook.Worksheets("Paramètre")
For k = 1 To 12
If LCase(WsP.[C3]) = Format(CDate("15/" & k & "/2000"), "mmmm") Then
année = WsP.Range("B3").Value:mois = k
Next
    Agenda année, mois
    Set WsP = Nothing
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Nicolas JACQUIN :), @Dranreb ;), @youky(BJ) ;),

Via une fonction personnalisée plus générique avec pour paramètre xrg cette cellule :
Function IDX (xrg As Range) As Long

Cette fonction est utilisable sur une feuille de calcul ou en VBA.
  • IDX renvoie l'index de la valeur de la cellule xrg au sein de la liste de validation de la cellule xrg
  • si la cellule est vide alors IDX renvoie 0
  • si la cellule ne contient pas de liste de validation alors IDX renvoie -1
  • xrg contient plus d'une cellule alors IDX renvoie -1
Le code de la fonction est dans Module1. Voir dans le classeur joint quelques exemples d'utilisation pour différents cas. Dans votre cas, on écrira : mois = IDX(WsP.Range("C3"))

Le code de la fonction est dans Module1 :
VB:
Function IDX(xrg As Range) As Long
Dim xtype, rng As Range, liste
   If xrg.Count > 1 Then IDX = -1: Exit Function
   On Error Resume Next: xtype = xrg.Validation.Type
   If xtype <> xlValidateList Then IDX = -1: Exit Function
   Set rng = Range(xrg.Validation.Formula1)
   If Not rng Is Nothing Then
      IDX = Application.Match(xrg.Value, rng, 0)
   Else
      liste = Split(xrg.Validation.Formula1, Application.International(xlListSeparator))
      IDX = Application.Match(xrg.Value, liste, 0)
   End If
End Function
 

Pièces jointes

  • Nicolas JACQUIN- index Liste validation- v1.xlsm
    22.6 KB · Affichages: 4
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 896
Messages
2 093 387
Membres
105 716
dernier inscrit
jrmdprt