VBA: sélection d"onglets datés selon champ de date

Fermé
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022 - 14 sept. 2022 à 07:57
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 28 nov. 2022 à 14:36

Bonjour,

Je possède un fichier ou un onglet est généré sur demande avec comme nom d'onglet, la date de sa création au format JJ-MM-AA.

je souhaite pouvoir sélectionner des onglets précis en ouvrant une boite de dialogue me demandant un champ de 2 dates afin de sélectionner les onglets compris entre ces dates.

ensuite, je souhaite faire un reporting des données de ces onglets.

Pour cela, je pensais faire un copier/coller des données des onglets dans un nouveau fichier, je traiterais ensuite des données.

Je dois être autonome sur la partie traitement des données.

Je bloque cependant pour sélectionner les onglets via ces champs de dates et pour copier et coller les données de plusieurs onglets a la suite dans un nouveau fichier.

sauriez-vous m'aider?

voici un fichier de base test https://www.cjoint.com/c/LIof5kZNdon

Merci
Windows / Chrome 105.0.0.0

3 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
14 sept. 2022 à 09:48

voici un exemple de code:

Option Explicit

Private Sub selo()
Dim ddeb As String, dfin As String, sh As Worksheet, wdest As Worksheet, rdest As Range, lcur As Long


Dim ldeb As Long, lfin As Long
ddeb = "10-06-22"
dfin = "05-07-22"
ldeb = stl(ddeb)
lfin = stl(dfin)
Set wdest = ThisWorkbook.Worksheets.Add
wdest.Name = "desty1"
Set rdest = wdest.[a1]
For Each sh In ThisWorkbook.Worksheets
    lcur = stl(sh.Name)
    If lcur >= ldeb And lcur <= lfin Then
        rdest = "'" + sh.Name
        rdest.Offset(, 1) = sh.[e5]
        Set rdest = rdest.Offset(1)
    End If
Next sh
End Sub

Private Function stl(s As String) As Long
stl = 0
On Error Resume Next
stl = CLng(Left(s, 2)) + 100 * CLng(Mid(s, 4, 2)) + 10000 * CLng(Right(s, 2))
End Function
0
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
11 oct. 2022 à 16:12

Bonjour,

ça fonctionne pour copier la première cellule de donnée. j'arrive à ajouter d'autres colonnes souhaitées sur la même donnée.

je n'arrive cependant pas à rajouter d'autres lignes de données. 

Comment procéder?

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
11 oct. 2022 à 17:25

Par exemple, après la ligne 20, ajouter

        rdest = "'" + sh.Name
        rdest.Offset(, 1) = sh.[e6]
        Set rdest = rdest.Offset(1)
0
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
18 oct. 2022 à 16:48

Bonjour,

il faut rajouter cela pour chaque nouvelle cellule voulue c'est bien ça? en changeant la valeur [e6] ?

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 oct. 2022 à 19:22

Pas du tout.

0
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
28 nov. 2022 à 14:27

Ma plage de sélection de données allant de E5 à I76.

Comment prendre l'ensemble de cette sélection selon ce schéma?

Idéalement, si la cellule E d'une ligne est vide, il serait bien de ne pas copier la ligne complète.

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
28 nov. 2022 à 14:36

C'est la même plage dans tous les onglets?

Il serait utile que tu partages le code adapté.

0