Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Macro pour remplir automatiquement une sélection avec une date

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 !

dysorthographie

XLDnaute Barbatruc
Bonjour,

J’ai écrit une macro pour remplir toutes les cellules d’une sélection avec une date calculée automatiquement :
VB:
Sub CalculDate()
    Dim c As Range
    Dim y As Long, m As Long, d As Long
   
    For Each c In Selection
        y = Year(Date)
       
        m = ((c.Row * 3 + c.Column * 5) Mod 12) + 1
        d = ((c.Row * 7 + c.Column * 11) Mod 31) + 1
       
        m = m - ((m - 4) Mod 12)
        d = d - ((d - 1) Mod 31)
       
        c.Value = Format(DateSerial(y, m, d), "d  mmmm yyyy")
    Next c
End Sub
Le but est de générer automatiquement une date basée sur la position des cellules dans la sélection.

Problème rencontré :
  • La macro fonctionne sur toutes les cellules, mais je ne suis pas sûr que le calcul pour m et d soit correct ou optimisé.
  • Je voudrais que la macro soit robuste et fonctionne pour toutes les cellules, même si elles contiennent du texte ou sont vides.
Question :
Comment améliorer cette macro pour qu’elle soit plus claire et fiable, tout en conservant l’idée de calcul basé sur la position des cellules ?

Merci d’avance pour vos conseils.
 
Solution
Bonjour,
VB:
Sub CalculDate()
    Dim c As Range
    Dim y As Long, m As Long, d As Long
 
    For Each c In Selection
        y = Year(Date)
 
        m = ((c.Row * 3 + c.Column * 5) Mod 12) + 1
        d = ((c.Row * 7 + c.Column * 11) Mod 31) + 1
 
        m = m - ((m - 4) Mod 12)
        d = d - ((d - 1) Mod 31)
 
        c.Value = Format(DateSerial(y, m, d), "d  mmmm yyyy")
    Next c
End Sub
je ne comprends pas bien le but et si je lance cette macro, c'est douteux ...
...




🤣😂
je ne comprends pas bien le but et si je lance cette macro, c'est douteux ...
une proposition
VB:
Sub Calculdate2()
     Dim cl, N, i, aSeq
     With Selection
          N = .Cells.Count                   'nombre de cellules
          aSeq = Evaluate(Replace("row(offset(a1,today()-#/2,,#))", "#", N))     'toutes vos dates
          'aSeq = WorksheetFunction.Sequence(N, , Int(Date - (N / 2)))     'oubien à partir d'excel 2019
          For Each cl In .Cells
               i = i + 1
               cl.Value2 = aSeq(i, 1)
          Next
          .Numberformat="d  mmmm yyyy"   'oubien "j mmmm aaaa"  en france ???
     End With
End Sub
 
Bonjour,
VB:
Sub CalculDate()
    Dim c As Range
    Dim y As Long, m As Long, d As Long
 
    For Each c In Selection
        y = Year(Date)
 
        m = ((c.Row * 3 + c.Column * 5) Mod 12) + 1
        d = ((c.Row * 7 + c.Column * 11) Mod 31) + 1
 
        m = m - ((m - 4) Mod 12)
        d = d - ((d - 1) Mod 31)
 
        c.Value = Format(DateSerial(y, m, d), "d  mmmm yyyy")
    Next c
End Sub
je ne comprends pas bien le but et si je lance cette macro, c'est douteux ...
...




🤣😂
 
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
9
Affichages
876
  • Question Question
Microsoft 365 Macro de recherche
Réponses
20
Affichages
2 K
Réponses
2
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…