Autres Petits challenges VBA

  • Initiateur de la discussion Initiateur de la discussion Cousinhub
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Cousinhub

XLDnaute Barbatruc
Bonsoir,
Un petit challenge, pour les VBAïstes endurcis
Sans boucle, remplir de A1 à A12, les mois de l'année
PS, si vous avez la solution, ne pas la mettre de suite, mais juste signaler (et me l'envoyer en MP)
Bonne soirée
Edit : Solution applicable toutes versions 🙂
 
Dernière édition:
Re @Cousinhub,

Ok, donc le résultat est la liste des intitulés des mois d'une année ? Quelque soit l'année ?

Le format des cellules doit-il être "standard" (et dans ce cas le résultat est en "texte") ou bien en format du genre "mmmm" (et dans ce cas le résultat est en date soit des entiers) ?
Oui, les mois de l'année, quoi!!! 😀
Et dans mon code, c'est bien au format "texte" (les mois sont directement écrits ainsi, de A1 à A12)
 
Bonjour à tous,

J'arrive à 32 caractères avec une seule ligne de code mais avec le format "mmmm" sur A1:A12.

A+
Hello Job,
Effectivement, peu de caractères (à voir si j'ai bien exprimé les contraintes, parce que, dans ma tête, c'est clair, mais du bout de mes doigts, pas sûr de la bonne transcription...
Pour les plus impatients, je mets la solution que j'ai, au format json (à déchiffrer avec Power Query -> je sais, pas accessible à toutes les versions, mais... 🙁

PowerQuery:
let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WinY0tHI0NIpVsFVwLCjIyUxOLMnMz9MLKUrMKy7IL07VQBZ1Ty1xLi0uyc/1ySwucc7PK0nNKynWMNHUVIqNBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [code = _t])
in
    Source
Bonne journée
PS, ce challenge m'est venu lorsque j'ai vu une demande sur un autre forum (ccm, pour ne pas le citer), demandant une série auto des mois...
Si ça vous donne des idées, pour d'autres challenges
 
Si on peut utiliser les formules en VBA, voila ce quoi que j'avais fait dans mon VBE.
[A1:A12] = [Text(Row(1:12)*30,"[$-40C]MMMM")]
Je ferais plutôt* :
VB:
[A1:A12] = [TEXT(ROW(1:12)*29,"[$-40C]mmmm")]
qui utilise 45 caractères.

*Edit : autrement avec 30 et le calendrier 1904 février n'est pas renvoyé.
 

Pièces jointes

Dernière édition:
Bonjour,
Voici donc les différentes propositions, par ordre de réception :

@mromain
VB:
Feuil1.Range("A1:A12").Formula = "=PROPER(TEXT(DATE(2000,ROW(),1),""mmmm""))"

@cathodique
VB:
Sub LesMois()
    Dim mois As Variant
    mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", _
                 "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
    
    Range("A1:A12").Value = Application.Transpose(mois)
End Sub

@Hecatonchire
VB:
Range("A1:A3") = Application.WorksheetFunction.Transpose(Array("Janvier", "Février", "Mars"))

@dysorthographie
VB:
Sub test()
[A1].Resize(12).Value = Application.Transpose([transpose(text(date(YEAR(NOW()),row(1:12),1),"[$-40C]mmmm yyyy"))])
End Sub

@Phil69970 (plusieurs propositions)
VB:
Sub TestCousinhub()
Range("A1") = "Janvier"
Range("A1").AutoFill Destination:=Range("A1:A12")
End Sub
VB:
Sub TestCousinhub_V2()
Range("A1") = Format(Month(Date), "mmmm")
Range("A1").AutoFill Destination:=Range("A1:A12")
End Sub
VB:
Sub TestCousinhub_V3() 'En plus court
[A1] = Format(Month(Date), "mmmm")
[A1].AutoFill Destination:=[A1:A12]
End Sub

@Bernard_XLD (plusieurs propositions)
VB:
[A1] = "janvier": [A1].AutoFill [A1:A12], xlFillMonths

[A1] = MonthName(1): [A1].AutoFill [A1:A12], xlFillMonths

[A1] = "janv": [A1].AutoFill [A1:A12], xlFillMonths

@mapomme (plusieurs propositions)
VB:
Sub Mois69car()

   [a1:a12] = Application.Transpose(Split("1 2 3 4 5 6 7 8 9 10 11 12"))   '<<<<<<<<<<< 69 car.
  
   MsgBox Len("[a1:a12] = Application.Transpose(Split(""1 2 3 4 5 6 7 8 9 10 11 12""))")
  
End Sub

Sub Mois39car()

    [b1] = 1: [b2] = 2: [b1:b12].DataSeries  '<<<<<<<<<<< 39 car.
    
    MsgBox Len("[b1] = 1: [b2] = 2: [b1:b12].DataSeries")
    
End Sub

[a1] = "janvier": [a1].AutoFill [a1:a12]

@Staple1600 (qui, en plus de donner la même solution que moi, a proposé également)
VB:
[A1:A12] = [Text(Row(1:12)*30,"[$-40C]MMMM")]

@patricktoulon (plusieurs solutions)
VB:
Sub test1()
    '56 caractere  pour la formule formater par (TEXTE)mois année
    Range("a1:a12").FormulaArray = _
           "=TEXT(DATE(YEAR(TODAY()),ROW(R:R[11]),1),""mmmm aaaa"")"
End Sub

Sub test2()
    '35 caracteres  pour la formule sans formatage sortie jj/mm/aaaa
    Range("a1:a12").FormulaArray = _
           "=DATE(YEAR(TODAY()),ROW(R:R[11]),1)"
End Sub

Sub test3()
 '51 caractere  pour la formule formatée par (TEXTE)mois année
 Range("a1:a12").FormulaArray = _
           "=TEXT(DATE(2024,1,1)+30*ROW(R:R[11]),""mmmm aaaa"")"
End Sub

Et les solutions de @job75 (visibles dans le fil)
VB:
Sub Macro()
[A1:A12] = [DATE(1,ROW(1:12),1)]
End Sub

[A1:A12] = [TEXT(ROW(1:12)*29,"[$-40C]mmmm")]

compatible calendrier 1904
[A1:A12] = [DATE(5,ROW(1:12),1)]

Merci à tous pour vos participations.
Ma solution, partagée avec Staple1600:

VB:
Sub remplit_mois()
[A1:A12] = Application.Transpose(Application.GetCustomListContents(4))
End Sub

Bonne journée à toutes et à tous
 
juste une petite remarque concernant la solution de Job75 (et ma solution préférée)
[A1:A12] = [TEXT(ROW(1:12)*29,"[$-40C]mmmm")]
[A1:A12] = [TEXT(ROW(1:12)*29,"[$-Fr-fr]mmmm")]
Il faut remplacer ce string pour la language par [$-XX-xx] et on ne doit plus savoir ce code "40C"
"FR-fr" = français, "ES-es" = espagnol, "EN-en" = anglais, "NL-nl" est néerlandais, "DE-de" = alemand, "IT-it" = italien, ...
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
2 K
Réponses
12
Affichages
1 K
Retour