Tri des onglets par Date dans cellule
Résolu/Fermé
1Globule
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
-
1 déc. 2016 à 09:31
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 - 1 déc. 2016 à 16:12
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 - 1 déc. 2016 à 16:12
A voir également:
- Tri des onglets par Date dans cellule
- Aller à la ligne dans une cellule excel - Guide
- Trier par date excel - Guide
- Restaurer onglets chrome - Guide
- Excel cellule couleur si condition texte - Guide
- Verrouiller cellule excel - Guide
3 réponses
mrjenkins
Messages postés
580
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2018
102
1 déc. 2016 à 10:02
1 déc. 2016 à 10:02
Bonjour,
copie-colle ceci dans Thisworkbook (VBA) :
--
copie-colle ceci dans Thisworkbook (VBA) :
Private Sub Workbook_Open()
nbSheets = ThisWorkbook.Sheets.Count
ReDim dates(nbSheets - 2, 1) As Variant
sh = 0
For Each ws In Worksheets
If ws.Name <> "Menu" Then
dates(sh, 0) = ws.Range("C2").Value
dates(sh, 1) = ws.Name
sh = sh + 1
End If
Next ws
nb = UBound(dates)
tab_temp = dates
Erase dates
ReDim dates(nbSheets, 1) As Variant
For i = 0 To nb
pos = 0
For l = 0 To nb
If tab_temp(i, 0) > tab_temp(l, 0) And i <> l Then
pos = pos + 1
End If
Next
For ii = 1 To 1
If dates(pos, 0) = "" Then
dates(pos, 0) = tab_temp(i, 0)
dates(pos, 1) = tab_temp(i, 1)
Else
pos = pos + 1
ii = ii - 1
End If
Next
Next
For i = 1 To 15
ThisWorkbook.Sheets("Menu").Cells(i+3, "Q").Value = dates(i - 1, 1)
ThisWorkbook.Sheets("Menu").Cells(i+3, "P").Value = dates(i - 1, 0)
Next
End Sub
--
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 712
1 déc. 2016 à 10:32
1 déc. 2016 à 10:32
Bonjour,
Je suppose que tu pensais bien le faire en macro :
Je suppose que tu pensais bien le faire en macro :
Private Sub Workbook_Open() ' affiche les noms des 15 onglets les plus anciens Dim feu As Worksheet, idd As Long, dat As Variant, nom As Variant, mdn As Variant ReDim tbd(1 To 15), tbn(1 To 15) For Each feu In ThisWorkbook.Sheets If feu.Name <> "Menu" Then dat = feu.[C2].Value: nom = feu.Name For idd = 1 To 15 If tbd(idd) = "" Then tbd(idd) = dat: tbn(idd) = nom: Exit For ElseIf dat < tbd(idd) Then mdn = tbd(idd): tbd(idd) = dat: dat = mdn mdn = tbn(idd): tbn(idd) = nom: nom = mdn End If Next idd End If Next feu Sheets("Menu").[Q4:Q18].Value = Application.Transpose(tbn) End Sub
1Globule
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
2
Modifié par 1Globule le 1/12/2016 à 12:48
Modifié par 1Globule le 1/12/2016 à 12:48
Merci à tous les deux, c'est vraiment gentil.
Je pensais pouvoir adapter vos réponses mais je n'ai pas le niveau, visiblement...
Du coup voici le besoin en totalité :
En plus de la feuille "Menu", il y a une feuille "Temp" à ignorer (je le dis pour le Nb_Sheets).
Sinon, le tri par date est parfait, j'ai juste besoin de récupérer plus d'info sur chaque onglet.
En colonne S doit apparaitre le nom de chaque onglet (pas en Q finalement)
En colonne T doit apparaitre la cellule J2 de chaque onglet
En colonne U doit apparaitre la cellule C6 de chaque onglet
En colonne V doit apparaitre la cellule C2 de chaque onglet
Et en colonne W doit apparaitre le sigle "<", en gras et en centré...
Donc la plage utilisée sera S4:W18 (s'il y a 15 onglets, sinon moins).
Ce n'est pas si difficile je suppose, il suffit de récupérer un peu plus d'infos, mais...
Je pensais pouvoir adapter vos réponses mais je n'ai pas le niveau, visiblement...
Du coup voici le besoin en totalité :
En plus de la feuille "Menu", il y a une feuille "Temp" à ignorer (je le dis pour le Nb_Sheets).
Sinon, le tri par date est parfait, j'ai juste besoin de récupérer plus d'info sur chaque onglet.
En colonne S doit apparaitre le nom de chaque onglet (pas en Q finalement)
En colonne T doit apparaitre la cellule J2 de chaque onglet
En colonne U doit apparaitre la cellule C6 de chaque onglet
En colonne V doit apparaitre la cellule C2 de chaque onglet
Et en colonne W doit apparaitre le sigle "<", en gras et en centré...
Donc la plage utilisée sera S4:W18 (s'il y a 15 onglets, sinon moins).
Ce n'est pas si difficile je suppose, il suffit de récupérer un peu plus d'infos, mais...
mrjenkins
Messages postés
580
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2018
102
1 déc. 2016 à 14:18
1 déc. 2016 à 14:18
Dans ce cas, il suffit d'ajouter un
dans les if.
Pour ajouter les données, il suffit d'augmenter la taille du tableau (pour ma solution) :
avec X le nombre de données à récupérer - 1
Dans ton cas : 4 -1 : 3
Et d'ajouter à la suite de
les lignes qui vont récupérer tes infos :
Puis de recopier ces valeurs dans le for de fin :
And ws.Name <> "Temp"
dans les if.
Pour ajouter les données, il suffit d'augmenter la taille du tableau (pour ma solution) :
ReDim dates(nbSheets - 2, X) As Variant
avec X le nombre de données à récupérer - 1
Dans ton cas : 4 -1 : 3
Et d'ajouter à la suite de
dates(sh, 1) = ws.Name
les lignes qui vont récupérer tes infos :
dates(sh, 2) = ws.Range("J2").Value dates(sh, 3) = ws.Range("C6").Value
Puis de recopier ces valeurs dans le for de fin :
For i = 1 To 15 ThisWorkbook.Sheets("Menu").Cells(i+3, "S").Value = dates(i - 1, 1) 'le nom ThisWorkbook.Sheets("Menu").Cells(i+3, "T").Value = dates(i - 1, 2)'J2 ThisWorkbook.Sheets("Menu").Cells(i+3, "U").Value = dates(i - 1, 3)'C6 ThisWorkbook.Sheets("Menu").Cells(i+3, "V").Value = dates(i - 1, 0)'C2 ThisWorkbook.Sheets("Menu").Cells(i+3, "W").Value = "<" Next
1Globule
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
2
>
mrjenkins
Messages postés
580
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2018
1 déc. 2016 à 15:03
1 déc. 2016 à 15:03
Merci, mais j'ai un bug au moment de la recopie des valeurs.
En regardant en pas à pas, je me rends compte que, si je place le curseur sur ces lignes :
dates(sh, 2) = ws.Range("J2").Value
dates(sh, 3) = ws.Range("C6").Value
J'obiens un : dates(sh, 2) = <L'indice n'appartient pas à la sélection.>
Je précise que pour J2 et C6 les données sont de type string.
En regardant en pas à pas, je me rends compte que, si je place le curseur sur ces lignes :
dates(sh, 2) = ws.Range("J2").Value
dates(sh, 3) = ws.Range("C6").Value
J'obiens un : dates(sh, 2) = <L'indice n'appartient pas à la sélection.>
Je précise que pour J2 et C6 les données sont de type string.
mrjenkins
Messages postés
580
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2018
102
1 déc. 2016 à 15:07
1 déc. 2016 à 15:07
Il faut aussi modifier cette ligne :
Par
Erase dates ReDim dates(nbSheets, 1) As Variant
Par
Erase dates ReDim dates(nbSheets, 3) As Variant
1Globule
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
2
>
mrjenkins
Messages postés
580
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2018
1 déc. 2016 à 15:09
1 déc. 2016 à 15:09
Hum,
Encore un bug. En pas à pas sur ces lignes, les "dates" sont vides.
dates(sh, 2) = ws.Range("J2").Value
dates(sh, 3) = ws.Range("C6").Value
Encore un bug. En pas à pas sur ces lignes, les "dates" sont vides.
dates(sh, 2) = ws.Range("J2").Value
dates(sh, 3) = ws.Range("C6").Value
mrjenkins
Messages postés
580
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2018
102
Modifié par mrjenkins le 1/12/2016 à 15:13
Modifié par mrjenkins le 1/12/2016 à 15:13
Tu peux m'envoyer tout le code que je regarde (entre <code basic et </code>)