Tri des onglets par Date dans cellule
Résolu
1Globule
Messages postés
62
Date d'inscription
Statut
Membre
Dernière intervention
-
1Globule Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
1Globule Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Tri des onglets par Date dans cellule
- Excel trier par ordre croissant chiffre - Guide
- Logiciel tri photo - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Proteger cellule excel - Guide
3 réponses
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
--
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
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...
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
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.