A voir également:
- Afficher 5 documents de feuilles différentes
- Afficher mot de passe wifi android - Guide
- Fusionner feuilles excel - Guide
- Honor magic 5 pro vs s23 ultra - Guide
- Resultat loto 5/90 ✓ - Forum Excel
- Sirène pompiers 5 fois signification ✓ - Forum Loisirs / Divertissements
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
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...
ç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...
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
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...
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
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
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
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
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
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
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...
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...
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!
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!
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
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 :
Si nécessaire, utilise l'enregistrement automatique de macros. Il s'agit juste de trier les dates par ordre décroissant.
I.
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.
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
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
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
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.
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.
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.
28 mai 2008 à 09:57
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