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
- Etape Test1
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 SubBonjour,
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
- Etape Test1
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 !