Boucle FOR avec IF et comparaison de dates

Bonjour,

Plutôt débutant en Excel VBA, j'arrive habituellement à bidouiller des trucs qui fonctionnent. Là, je sèche complétement sur un problème apparemment simple.

J'ai un fichier dans lequel je souhaite exploiter les données des quatre premières colonnes. Comme je ne peux pas vous le transmettre pour le moment (je viens juste de m'inscrire), je vous le décris....

Colonne A : Date de début

Colonne B : Date de fin

Colonne C : Nombre (systématiquement 1, mais que je dois multiplier par 1 dans une autre colonne, car valeur non numérique)

Colonne D : Code correspondant à un type de trajet (c'est pour mon boulot, en rapport avec le transport de voyageurs...)

Je voudrais simplement additionner (total colonne C) les trajets par type (Colonne D) sur une période donnée, en l’occurrence les trajets "actifs" entre le 01/01/23 et le 31/07/23 inclus.

Ma macro (ci-dessous) ne me renvoie par d'erreur mais me donne comme résultat "0" alors que mon fichier comporte bien des lignes répondant aux critères ci-dessus.

J'ai compris qu'il y avait un souci avec les dates qui n'ont pas l'air d'être prise en compte comme telles (le 06/03/2023 n'a pas l'air d'être situé entre le 01/01/2023 et le 01/08/2023 ???), mais je ne comprend pas pourquoi ?

Voici ma macro :

Sub Macro_Test_V3()

    Dim DerLigne As Long

    DerLigne = Range("A1048576").End(xlUp).Row

    Columns("C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C1") = "Période 2 - 22/23"

    Range("C2").Select

    For cpt = 2 To DerLigne
    If (ActiveCell.Offset(0, -2) > #1/1/2023# And ActiveCell.Offset(0, -2) < #1/8/2023#) Or (ActiveCell.Offset(0, -1) > #1/1/2023# And ActiveCell.Offset(0, -1) < #1/8/2023#) Then
    ActiveCell = 1
    Else
    ActiveCell = 0
    End If
    ActiveCell.Offset(1, 0).Select
    Next

    ActiveCell = Application.WorksheetFunction.SumIf(Range("E2:E" & DerLigne), "CD77_T1V9", Range("C2:C" & DerLigne))

End Sub

Merci d'avance pour votre aide !

Bonjour

A priori cela est faisable par un simple TCD

Par ailleurs on travaille depuis 20 ans avec des tableaux structurés plutôt que des plages et avec PowerQuery plutôt que VBA dans nombre de cas...

Sur 2013 PowerQuery est en add on (intégré à partir de 2016)

A défaut de fichier joins au moins une copie d'écran où on vois les lettres de colonnes et les numéro des lignes

Bonjour,

Mon tableau ressemble à ça ....

capture d ecran 2023 08 04 170553

RE

Tes dates ne seraient pas aussi des textes ?

Je précise qu'il s'agit d'une extraction de données d'un logiciel. C'est sans doute la raison pour laquelle certaines cellules réagissent de manière inattendue....

Je veux bien me lancer dans une solution de type tableau croisé dynamique, mais même avec des formules appliquées directement dans la feuille, le résultat ne semble pas cohérent.

Le format initial des dates est "Standard". Je les ai mises au format "Date", mais le résultat est le même.

RE

Le format, Excel s'en moque c'est le type qui compte car l'habit ne fait pas le moine

Si cela s'aligne à gauche en standard c'est du texte...

En VB utilise plutôt DateSerial(2023, 1, 1) que #1/1/2023# car ta formulation prend le 8/01 et non le 1/8

Si c'est du texte il faut convertir

CDate(ActiveCell.Offset(0, -2)) > DateSerial(2023, 1, 1) 

Bonjour Chris,

J'ai essayé ta correction, ça fonctionne parfaitement ! Merci !

Il me manquait juste la correspondance entre les dates dans le code et celles du tableau. Maintenant j'ai compris. Super !

Encore merci

Rechercher des sujets similaires à "boucle comparaison dates"