Probleme de dates dans Macro

  • Initiateur de la discussion Initiateur de la discussion guillaume.lorain@sfr.fr
  • 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 !

Re : Probleme de dates dans Macro

Bonsoir et bienvenue,
Si je comprends, les cellules contiennent des dates mais sont affichées au format mmm...
Code:
If Month(.Cells(Lig, Col)) = 1 Then 'pour janvier
En outre, je pense qu'il est possible d'utiliser le filtre élaboré, mais sans fichier...
A+
kjin
 
Re : Probleme de dates dans Macro

Bonjour Kjin , Guillaume,
A première vue , janvier devrait être une chaine ou string et donc il faut l'écrire "janvier" ou "Janvier" ,si j'ai mis le doigt dessus tant mieux , mais comme précisé dans la charte un ptit exemple de ton fichier, juste la colonne date avec une dizaine de lignes , nous permettrait de mieux appréhender le sujet, car les dates peuvent être stockées de multiples façons texte, date, numéro de série, peut varier également en fonction du formatage perso.
 
Re : Probleme de dates dans Macro

Bonjour,
Essaie comme ceci en adaptant le nb de colonnes pour le tableau T
Code:
Sub Macro1()
Dim dDate As Long, fDate As Long
With ActiveSheet
    For i = 1 To 12
        .AutoFilterMode = False
        dDate = CLng(DateSerial(2010, i, 1))
        fDate = CLng(DateSerial(2010, i + 1, 1))
        .Range("A5").AutoFilter Field:=4, Criteria1:=">=" & dDate, Operator:=xlAnd, Criteria2:="<" & fDate
        With .AutoFilter.Range
            On Error Resume Next
            Set rngFilter = .Offset(1, 0).Resize(.Rows.Count - 1, 5).SpecialCells(xlCellTypeVisible)
            If Err.Number = 0 Then
                T = rngFilter.Value
                Sheets.Add after:=Sheets(Sheets.Count)
                With ActiveSheet
                    .Name = Format(dDate, "mmmm")
                    .Range(.Cells(1, 1), .Cells(UBound(T, 1), UBound(T, 2))) = T
                End With
            End If
        End With
    Next
    .AutoFilterMode = False
End With

End Sub
A+
kjin
 
Re : Probleme de dates dans Macro

Bonjour,

Pour rester proche de ton idée originale :

Merci c'est parfait, je sais pas comment te remercier. 😉

Maintenant je me demande si il est possible d'ajouter automatiquement en bas de chaque feuille une ligne avec le total des ventes du mois.
Si vous arrivez à faire ca je ne vous embete plus c'est promis 😀
 
Re : Probleme de dates dans Macro

Re, bonjour camarchepas,
As tu mélangé les dates camarchepas ? L'une et l'autre des solutions implique un tri des dates au péalable
Avec les données triées sur 30000 lignes
- solution de camarchepas = 40s
- solution avec filtre = 1s
Pour s'affranchir du tri préalable avec le filtre (2s pour 30000 lignes)
Code:
Sub Macro2()
Dim dDate As Long, fDate As Long
Application.ScreenUpdating = False
With ActiveSheet
    For i = 1 To 12
        .AutoFilterMode = False
        dDate = CLng(DateSerial(2010, i, 1))
        fDate = CLng(DateSerial(2010, i + 1, 1))
        .Range("A5").AutoFilter Field:=4, Criteria1:=">=" & dDate, Operator:=xlAnd, Criteria2:="<" & fDate
        With .AutoFilter.Range
            On Error Resume Next
            Set rngfilter = .Offset(1, 0).Resize(.Rows.Count - 1, 5).SpecialCells(xlCellTypeVisible)
            If Err.Number = 0 Then
                T = rngfilter.Value
                Sheets.Add after:=Sheets(Sheets.Count)
                With ActiveSheet
                    .Name = Format(dDate, "mmmm")
                    rngfilter.Copy .Range("A1")
                End With
            End If
        End With
    Next
    .AutoFilterMode = False
End With
Application.ScreenUpdating = True
End Sub
On pourrait également utiliser le filtre élaboré de la même manière
A+
kjin
 
Re : Probleme de dates dans Macro

Re,
Le filtre et la somme
Code:
Sub Macro2()
Dim dDate As Long, fDate As Long
Dim T As Variant, rngfilter As Range
Dim nbC As Integer, nbL As Integer
Application.ScreenUpdating = False
With ActiveSheet
    nbC = .UsedRange.Columns.Count
    T = .Range(.Cells(5, 1), .Cells(5, nbC)).Value
    For i = 1 To 12
        .AutoFilterMode = False
        dDate = CLng(DateSerial(2010, i, 1))
        fDate = CLng(DateSerial(2010, i + 1, 1))
        .Range("A5").AutoFilter Field:=4, Criteria1:=">=" & dDate, Operator:=xlAnd, Criteria2:="<" & fDate
        With .AutoFilter.Range
            On Error Resume Next
            Set rngfilter = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
            If Err.Number = 0 Then
                nbL = rngfilter.Rows.Count + 1
                Sheets.Add after:=Sheets(Sheets.Count)
                With ActiveSheet
                    .Name = Format(dDate, "mmmm")
                    .Range(.Cells(1, 1), .Cells(1, nbC)) = T
                    rngfilter.Copy .Range("A2")
                    .Cells(nbL + 1, 4) = "Total"
                    .Cells(nbL + 1, 5) = CCur(Application.Sum(.Range("E2:E" & nbL)))
                    .Columns.AutoFit
                End With
            End If
            [COLOR="Blue"]On Error GoTo 0[/COLOR]
        End With
    Next
    .AutoFilterMode = False
End With
Application.ScreenUpdating = True

End Sub
A+
kjin
 
Dernière édition:
Re : Probleme de dates dans Macro

Super maintenant,

Cela ouvre mes œillères, mais dans 6 mois , il faut revoir le code, et oui , j'étudie ton code, alors forcément le 2010 va pas changer tout seul , mais par ailleurs , il faut bien ce garder un peu de maintenance .....

Bonne fin de week end et merci pour ce bout de code
 
Re : Nouveau probleme !!!

Bonjour,

Lequel des codes as tu adapté , et surtout il faudrait que tu puisses nous donner la date de la ligne 317 telle quelle est dans le fichier Excel, peut être un problème de format.
Et oui 317, mais je là vois pas d'ici moi , Lol
 
Re : Probleme de dates dans Macro

Bonsoir,

Comme l'avait suggéré Kjin 🙂, ton fichier avec un filtre élaboré..

PS, ne t'étonne pas si tu ne trouves pas Mr Bret, de la ligne 79, car sa réservation en date du 31/13/2009, ben il va avoir du mal..... (c'est bien de centrer dans les colonnes, mais un rapide contrôle, en enlevant tout alignement, te permet de vérifier s'il s'agit bien d'une date)
S'il s'agit d'une date, ou d'un chiffre, alignement à droite, sinon, à gauche...

Comme je ne savais pas trop quels totaux tu voulais, je t'en ai fait plusieurs..

Bonne soirée
 

Pièces jointes

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Autres Vba
Réponses
4
Affichages
223
Réponses
16
Affichages
579
Réponses
4
Affichages
561
Réponses
3
Affichages
130
Réponses
2
Affichages
234
Réponses
7
Affichages
282
Réponses
18
Affichages
599
Retour