Afficher 5 documents de feuilles différentes

Fermé
Math66 - 27 mai 2008 à 15:38
 Math66 - 4 juin 2008 à 08:21
Bonjour,
je suis actuellement en stage et je travaille sur un fichier Excel.

Dans ce classeur excel, il y environ une quinzaine de feuilles. Sur ces feuilles il y a des documents, procédure etc, avec leur date d'application, et le titre.

Je voulais mettre sur la feuille d'accueil, les 5 derniers documents "mis à jour".

Est-ce qu'il y aurait un moyen de faire cette liste et pour que cette liste soit actualiser à chaque ouverture du fichier?

Merci d'avance

Math66

11 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
28 mai 2008 à 09:11
Bonjour Math66,
ça doit être faisable.
Questions :
la date de mise à jour doit-elle (peut-elle) apparaître sur chaque feuille ?
la date de mise à jour est-elle saisie manuellement sur la feuille par le modificateur ?
ou bien faut-il générer la date de mise à jour automatiquement dès qu'une modification est apportée à cette feuille ?
A suivre...
0
Lorsque j'ajoute un document via un lien hypertexte, je met la date de première application dans la colonne d'à coté.
Donc en fait, il faudrait faire un balayage de toute mes feuilles et ensuite ne garder que les 5 dernières dates auxquelles il faudrait affecter le nom du fichier correspondant.

Merci de votre aide

Math66
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
28 mai 2008 à 15:18
Math,
Je n'ai pas exactement compris la disposition de ton fichier ; je te laisse donc t'inspirer de la procédure ci-dessous et y piocher ce que tu peux adapter à ton cas.
Remarque : je n'ai pas réussi à isoler les 5 dates les plus récentes autrement qu'en passant par une feuille intermédiaire (qui peut être masquée) dans laquelle on liste les feuilles et on les trie par date.
- "Parametre" est le nom de la feuille intermédiaire
- la date de mise à jour est récupérée dans la cellule A1 de chaque feuille
- "Accueil" est le nom de la feuille d'accueil, dans laquelle on écrit la liste du top 5.
- la procédure est à copier dans ThisWorkbook (elle se déclenche avant la fermeture du classeur)
A suivre...
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Feuille As Worksheet, i As Integer

With Sheets("Parametre")
    .cells.ClearContents
    For Each Feuille In Worksheets
        If Not Feuille.Name = "Parametre" And Not Feuille.Name = "Accueil" Then
            i = i + 1
            .cells(i, 1).Value = Feuille.Range("A1")
            .cells(i, 2).Value = Feuille.Name
        End If
    Next Feuille
    
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .Sort.SetRange Range("A1:B" & i)
    .Sort.Apply
    
    For i = 1 To 5
    Sheets("Accueil").Range("A1").Offset(i, 0).Value = _
      "Document " & .cells(i, 2).Text & " - mis à jour le " & .cells(i, 1)
    Next i
End With
End Sub
0
Merci, Ivan-hoe.
Je vais essayer ta procédure, je te tiens au courant.

Merci
0
Salut, voilà je me suis inspiré du code d'Ivan-hoe, et j'ai une erreur et je trouve pas la solution à l'aide !!!! :P

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Feuille As Worksheet, i As Integer, j As Integer

With Sheets("MAJ")
.Cells.ClearContents
For Each Feuille In Worksheets
If Not Feuille.Name = "MAJ" And Not Feuille.Name = "Doc Géné" And Not Feuille.Name = "Doc Appl" And Not Feuille.Name = "Doc Ext" And Not Feuille.Name = "Doc Perime" And Not Feuille.Name = "Q.indic" And Not Feuille.Name = "Indic GC" And Not Feuille.Name = "Indic ACH" And Not Feuille.Name = "Indic LOG" And Not Feuille.Name = "Indic CAB" And Not Feuille.Name = "Indic BE" And Not Feuille.Name = "Indic RH" And Not Feuille.Name = "Indic ADM" And Not Feuille.Name = "Indic Suivi" And Not Feuille.Name = "Indic Com" And Not Feuille.Name = "Indic Q" And Not Feuille.Name = "Feuil4" And Not Feuille.Name = "DP MAQ" And Not Feuille.Name = "DP PROC" And Not Feuille.Name = "DP INSTR" And Not Feuille.Name = "DP DOC" And Not Feuille.Name = "DA Mar ext" And Not Feuille.Name = "Doc ext FT" And Not Feuille.Name = "Guides Tech" And Not Feuille.Name = "Bibliothèque" Then
i = i + 1
For j = 6 To 250
.Cells(i + j - 6, 2).Value = Feuille.Range("E" & j)
.Cells(i + j - 6, 1).Value = Feuille.Range("D" & j)
Next j
End If
Next Feuille

.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SetRange Range("A1:B" & i)
.Sort.Apply

For i = 1 To 5
Sheets("Doc Géné").Range("H34").Offset(i, 0).Value = _
"Document " & .Cells(i, 2).Text & " - mis à jour le " & .Cells(i, 1)
Next i
End With
End Sub


Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Désolé j'ai oublié de dire ou MVB me situe l'erreur:
For j = 6 To 250
.Cells(i + j - 6, 2).Value = Feuille.Range("E" & j) c'est cette ligne
.Cells(i + j - 6, 1).Value = Feuille.Range("D" & j)
Next j
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
29 mai 2008 à 14:12
Math,
je ne sais pas pourquoi ça bloque à la ligne que tu indiques (chez moi, ça passe à ce niveau-là).

Ensuite, je ne comprends pas l'usage que tu fais de la boucle For j = 6 to 250, puisque, après, dans la feuille MAJ, tu écrases 244 des 245 valeurs que tu as tu écrites.

De plus, ça doit vachement ralentir ta macro.
Pense à ajouter au début : Application.ScreenUpDating = False
et à la fin : Application.ScreenUpDating = True

A suivre...
0
En fait, j'ai des dates de E6 à E100 et celà dans plusieurs feuilles. ( je l'avais mal expliqué) C'est pourquoi j'avais mis une boucle mais mal placée.

De plus, là ou ça bloquer j'ai mis Range("E1").Offset(j) et ça passe.

Per contre ça bloque à : .Sort.SortFields.Clear

Voilà et merci encore de ton aide!
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
29 mai 2008 à 17:48
Ah bon. Excuse-moi alors de me mêler de ce qui ne me regarde pas ;-)
Pour les instructions de tri, j'ai l'impression que la syntaxe change d'une version à l'autre, et que l'instruction suivante devrait suffire :
.Range("A:B").Sort Key1:=Range("A1"), Order1:=xlDescending

Si nécessaire, utilise l'enregistrement automatique de macros. Il s'agit juste de trier les dates par ordre décroissant.
I.
0
Déjà merci pour le code
Salut, voilà j'ai réussi à faire un code qui marche à peu près

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Feuille As Worksheet, i As Integer, j As Integer, k As Integer, l As Integer
Application.ScreenUpdating = False

With Sheets("MAJ")
.Cells.ClearContents
For Each Feuille In Worksheets
If Not Feuille.Name = "MAJ" And Not Feuille.Name = "Doc Géné" And Not Feuille.Name = "Doc Appl" And Not Feuille.Name = "Doc Ext" And Not Feuille.Name = "Doc Perime" And Not Feuille.Name = "Q.indic" And Not Feuille.Name = "Indic GC" And Not Feuille.Name = "Indic ACH" And Not Feuille.Name = "Indic LOG" And Not Feuille.Name = "Indic CAB" And Not Feuille.Name = "Indic BE" And Not Feuille.Name = "Indic RH" And Not Feuille.Name = "Indic ADM" And Not Feuille.Name = "Indic Suivi" And Not Feuille.Name = "Indic Com" And Not Feuille.Name = "Indic Q" And Not Feuille.Name = "Feuil4" And Not Feuille.Name = "DP MAQ" And Not Feuille.Name = "DP PROC" And Not Feuille.Name = "DP INSTR" And Not Feuille.Name = "DP DOC" And Not Feuille.Name = "DA Mar ext" And Not Feuille.Name = "Doc ext FT" And Not Feuille.Name = "Guides Tech" And Not Feuille.Name = "Bibliothèque" Then
i = i + 1
For j = 6 To 300
k = k + 1
.Cells(i + k, 2).Value = Feuille.Range("E1").Offset(j, 0)
.Cells(i + k, 1).Value = Feuille.Range("D1").Offset(j, 0)
Next j
End If
Next Feuille
'Efface les lignes ou la colonne A est vide

With Sheets("MAJ")
For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "" Then Rows(l).Delete
If Cells(l, 2).Value = "" Then Rows(l).Delete
If Cells(l, 1).Value = "Titre" Then Rows(l).Delete
If Cells(l, 2).Value = "A Acheter" Then Rows(l).Delete
Next l
End With

Range("B1").Select

With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A1:A600"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.SetRange Range("A1:A600")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
MsgBox "Sort complete.", vbInformation




For i = 1 To 5
Sheets("Doc Géné").Range("G34").Offset(i, 0).Value = _
"" & .Cells(i, 1).Text & " - applicable le " & .Cells(i, 2)
Next i
End With

Application.ScreenUpdating = True
End Sub

Voilà les problèmes qu'il me reste : -le tri des dates (situées dans la colonne B de la feuille MAJ) ne se classe pas bien. Pb de "mise en forme" des dates???

- lorsque les 5 dates sont afichées sur la feuille Doc Géné, ça me fait remonter tous mes élément comme des flash ou des zones de texte.

Voili voilou, En espérant que tu puisse m'aider, ;)

Math
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
3 juin 2008 à 13:58
Salut,
je ne peux guère t'aider sur ces deux points.
Pour le tri des dates, aide-toi de l'enregistrement automatique des macros : si tu arrives à faire ton tri manuellement, la transcription en VBA devrait être la bonne. C'est peut-être une histoire de format de cellules (format "date" mal défini) ?
A tout hasard, rajoute le .value dans le code suivant.
.Cells(i + k, 2).Value = Feuille.Range("E1").Offset(j, 0).value
.Cells(i + k, 1).Value = Feuille.Range("D1").Offset(j, 0).value


Pour les zones de texte qui remontent : as-tu coché "ne pas dimensionner ou déplacer avec les cellules" ? sinon, je ne vois pas ce qui cloche.
Désolé.
I.
0
Ok merci,
en fait ce que j'ai fait c'est que je lui ai fait décomposer les dates sur 3 colonnes et après j'ai pu utiliser facilement le tri.

Je te remercie de ton aide.
0