Parcourir un tableau afin d'extraire des dates comprise dans un intervalle

Bonjour à vous,

Je vous écris car j'essaie depuis quelques jours d'effectuer la chose suivante avec VBA :

  • L'utilisateur saisit dans un tableau les critères suivants : nom de la réunion, le type de réunion, l'étape (liste déroulante) et la date dans la colonne approprié (allant de Janvier à Décembre).
  • Ensuite si l'utilisateur souhaite extraire les réunions dans un intervalle qu'il aura saisi il devra se rendre dans la feuille "Extraction" et faire : cocher l'étape qui l'intéresse (1, 2 ou les 3 choix possibles) + saisir une date de début + saisir une date de fin + appuyer sur valider
  • Et c'est là que ça coince, j'ai le message d'erreur suivant : "Erreur de compilation ; référence de variable de contrôle incorrecte dans Next"
  • Ce que je souhaite que la macro réalise est qu'il position dans une nouvelle feuille la liste des réunions selon chaque étape sous la forme suivante :
    • Etape Test1
      • 21/02 : NomRéunion1
      • 22/02 : NomRéunion2 + NomRéunion3
    • Etape Test 2
      • 18/02 : NomRéunion4

Vous pouvez retrouver avec ce message un fichier Excel avec le code VBA et l'erreur en question.

Je vous remercie par avance,

Cordialement

Le fichier :

Bonjour

Un tableau structuré ne doit pas contenir de ligne vide

Si tu veux extraire des dates il faut que le tableau contiennent des dates : ce qui n'est pas le cas dans toutes les cellules ou on a aussi des plages inexploitables sans truc tordu

La mise en page de la restitution est plus du type traitement de texte qu'Excel

Le fichier joint est un xlsx donc sans code VBA

Bonjour,

Merci pour votre retour. Je vous remets le bon fichier (j'édite le fichier initial).

Concernant mon erreur, je l'ai résolu (faut d'orthographe). J'ai également modifié le type des variables "colonneJanvier"... à Range au lieu de String. Je continue de creuser et je reviens vers vous en cas de non résolution d'un souci. Mille merci à vous.

RE

Comme déjà dit avec des contenus qui ne sont pas des dates, cela ne peut fonctionner en l'état

Tu évoques NomRéunion mais on ne sait à quelle colonne cela correspond

Tu travailles avec un tableau structuré donc il faut raisonner en tableau (sans ligne vide)

En corrigeant tes dates ceci récupère 2 dates correspondant à la plage de dates et aux étapes choises

Sub TestMacro()

    Dim ws As Worksheet
    Set ws = Sheets("Extraction")
    Dim test1IsChecked As Boolean
    Dim test2IsChecked As Boolean
    Dim test3IsChecked As Boolean
    Dim dateDebut As Date
    Dim dateFin As Date

    dateDebut = ws.Range("D9").Value
    dateFin = ws.Range("D12").Value

    ' Les 3 If servent à vérifier si les checkbox sont cochées
    If ws.CheckBoxes("checkboxTest1") = 1 Then test1IsChecked = True
    If ws.CheckBoxes("checkboxTest2") = 1 Then test2IsChecked = True
    If ws.CheckBoxes("checkboxTest3") = 1 Then test3IsChecked = True

    ' On appelle la Procédure qui va permettre d'aller chercher les informations dans l'onglet Liste
    Call chercherReunion(dateDebut, dateFin, test1IsChecked, test2IsChecked, test3IsChecked)

End Sub

Sub chercherReunion(dateDebut As Date, dateFin As Date, test1IsChecked As Boolean, test2IsChecked As Boolean, test3IsChecked As Boolean)

Dim cellule As Range
Dim reunion As String
Dim tabResultat()
Dim colonneMois As ListColumn
Dim x As Long

    x = 0
    With Range("Tableau1").ListObject
    For I = Month(dateDebut) + 3 To Month(dateFin) + 3
        For Each cellule In .ListColumns(I).DataBodyRange.Cells
        If cellule.Value >= dateDebut And cellule.Value <= dateFin Then
            Debug.Print cellule
            With .ListColumns("Etape").DataBodyRange.Cells(cellule.Row - .Range.Row, 1)
                If .Value = "Test1" And test1IsChecked Then
                    x = x + 1
                    ReDim Preserve tabResultat(x)
                    tabResultat(x) = cellule.Value
                End If
                If .Value = "Test2" And test2IsChecked Then
                    x = x + 1
                    ReDim Preserve tabResultat(x)
                    tabResultat(x) = cellule
                End If
                If .Value = "Test3" And test3IsChecked Then
                    x = x + 1
                    ReDim Preserve tabResultat(x)
                    tabResultat(x) = cellule
                End If
            End With
        End If
        Next cellule
    Next I
    End With
End Sub

Bonjour,

Merci beaucoup pour votre réponse. J'étais justement sur le fichier également et j'allais poster une mise à jour de mon fichier. J'ai effectué une remise en forme et voilà ce que j'ai à ce stade (je suis arrivé au même point que vous).

Voici le fichier avec le code que j'ai. J'essaie désormais d'effectuer 2 choses :

  • Une cellule peut comporter plusieurs dates selon ces 2 possibilités : "xx/xx, xx/xx" ou bien "xx/xx et xx/xx". Du coup récupérer les 2 dates présents dans la cellule (à l'heure actuelle rien n'est affiché).
  • Une fois cela de fait, vouloir afficher le résultat sous cette forme :
      • Etape Test1
        • 21/02 : NomRéunion1
        • 22/02 : NomRéunion2 + NomRéunion3
      • Etape Test 2
        • 18/02 : NomRéunion4

J'essaie d'avancer mais c'est compliqué...

Cordialement

RE

Je me répète "xx/xx, xx/xx" ou bien "xx/xx et xx/xx" ne sont pas des dates mais du texte pour Excel et en plus il n'y a même pas d'année, et on ne sait si c'est une plage de date ou des dates disjointes...

On embarque donc pour l'usine à gaz.

Cela nécessite de découper la contenu des cellules, de tester si on peut transformer les morceaux en dates et le cas échéant, comparer avec la période choisie.

Ce type d'affichage pas très Excellien nécessite un tableau multidimensionnel pour stocker Etape, Test et le truc toujours inconnu NomRéunion...

Mon code n'exploite que les colonnes utiles en fonction de la période choisie pas 12 mois...

Normaliser les tableaux a des avantages : c'est facile à lire, simple à exploiter par tout plein de possibilités sans coder...

En plus tu as 2021 donc une solution simple par PowerQuery pour réaliser l'extraction : ne restera plus que la mise en forme

Merci pour votre réponse.

NomRéunion correspond à la colonne B de la feuille Liste.

Je suis ouvert à toutes choses qui peut améliorer mon tableau si besoin (une meilleure façon de normaliser le tableau par exemple).

Je n'ai jamais utilisé PowerQuery, je vais essayer de me renseigner.. merci beaucoup !

Rechercher des sujets similaires à "parcourir tableau afin extraire dates comprise intervalle"