Ouvrir plusieurs onglets Excel
bonjour à tous,
est il possible en via de:
-ouvrir plusieurs onglets d'un même fichier excel les uns dernier les autres:
feuille "janvier"
feuille " février"
jusqu'à "décembre"
puis feuille "personnelle"
le but est de réactualiser le trie de chaque onglets le code vba dépend d'une macro:
Application.Calculation = xlCalculationManual
Range("A10:CA10").Select
Selection.AutoFilter
ActiveWindow.SmallScroll ToRight:=-7
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Clear
'trie section
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range( _
"A11:A205"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"SK,S1,S2,SCAOS,S4,SF", DataOption:=xlSortNormal
'trie grade
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range( _
"B11:B205"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"CNE,LTN,ADC,ADJ,SCH,SGT,CC1,CCH,CPL,1CL,SDT", DataOption:=xlSortNormal
'trie nom alphabetique
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range( _
"C11:C205"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.ActiveSheet.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
merci d'avance pour tout
respectueusement
jérôme
Bonjour
Il serait plus facile de se faire une idée si tu joignais ton fichier....
Bye !
re,
je voudrais bien mais le fichier est trop gros,
je vais essayer de supprimer des données pour le transférer,
néanmoins si quelqu'un a eu idée je suis preneur
merci d'avance
jerome
Essaie en passant par http://www.cjoint.com
Bye !
j'ai réussi merci
j'espere que tu pourras trouver une solution,
je suis vraiment un débutante en via donc je pense qu'il y des codes qui peuvent être simplifié
merci d'avance
jérome
La macro ‘’TrieCie’’ se déclenche dès que tu actives l’une des feuille de mois, de ‘’Janvier’’ à ‘’Décembre’’
Donc, en ouvrant successivement ces 12 feuilles, les mises à jour de trie vont se faire, comme tu le souhaites.
Reste à savoir comment tu veux déclencher cette opération : à l’ouverture du fichier ? en cliquant sur un bouton ? Si ce bouton existe quelque part, où est-il ? S’il faut le créer, où le veux-tu ?
Et quand tu auras cette fonction, veux-tu conserver le déclenchement du tri lors de l’activation d’une feuille de mois ?
Une remarque : le langage macro est le ‘’VBA’’ et non pas ‘’via’’
Pour finir, une curiosité de ton fichier : j’ai trouvé parmi les modules un ‘’Module1’’ qui contient une macro ‘’ Private Sub Worksheet_SelectionChange(ByVal Target As Range)’’
Il s’agit d’une macro attachée à une feuille. Elle n’a, à mon avis, rien à faire là mais doit être rattachée à la feuille à laquelle elle s’applique.
A te relire.
Bye !
re,
voici les réponses a tes différentes questions :
- en effet le module1 peut être supprimer
- la correction automatique a transformer VBA en VIA (désolé
) - je souhaiterai que la macro s'active lorsqu'on appui sur les boutons " valider données" ou" modifier données" dans le formulaire "mise à jour personnel" dans l'onglet " personnel". Ce formulaire s'ouvre lorsque appui sur "MAJ PERSONNEL".
j'espere que j'ai répondu a tes questions
un grand merci d'avance
cordialement
jérôme
jeromeB a écrit :j'espere que j'ai répondu a tes questions
Non, pas à toutes :
gmb a écrit :veux-tu conserver le déclenchement du tri lors de l’activation d’une feuille de mois ?
Sans réponse, je n’y ai pas touché.
C’est peut-être dommage car le tri d’une feuille n’est pas instantané et la navigation entre les onglets y perd en fluidité.
Pour ce qui est de la modification apportée, le temps du tri de toutes les feuilles est 12 fois plus long.
Pour faire patienter l’opérateur, la macro indique en bas et à gauche de la feuille, sur fond vert, le nom du mois qu’elle est en train de trier…
Cela te convient-il ?
Bye !
bonjour,
je n'arrive pas à récupérer le fichier
merci d'avance
jérôme
Bonjour
C’est curieux… Je viens de télécharger le fichier que je t’ai transmis et tout se passe bien. C’est peut-être un peu long à venir car ton document est effectivement gros, mais ça vient !
Si vraiment ça ne marche pas, reprend le document initial que tu as joint avec cjoint.com et essaie de remplacer toutes les macros de ta feuille userform ‘’MajPers’’ par celles-ci :
Private Sub MAJ_Click()
' recuperation d'un nom de personnel
Modifier.Visible = True
Modifier.Enabled = True
Valider.Visible = False
Valider.Enabled = False
no_ligne = ListePersCIE.ListIndex + 6
SectionPersonnels.Value = Cells(no_ligne, 2).Value
GradePersonnels.Value = Cells(no_ligne, 3).Value
NomPersonnels.Value = Cells(no_ligne, 4).Value
PrenomPersonnels.Value = Cells(no_ligne, 5).Value
FonctionPersonnels.Value = Cells(no_ligne, 6).Value
Call preTri
MajPers.Hide
MsgBox "Travail terminé."
Application.StatusBar = ""
End Sub
Private Sub Modifier_Click()
'desactive la MAJ de l'écran
Application.ScreenUpdating = False
'modifier le tableau
Dim no_ligne As Integer
'pour dé-protéger
ActiveSheet.Unprotect Password:="toto"
Sheets("PERSONNELS").Select
no_ligne = ListePersCIE.ListIndex + 6
If NomPersonnels.Value = "" Then
MsgBox ("Veuillez remplir le champs de recherche, puis réessayer!")
Else
Cells(no_ligne, 2) = SectionPersonnels.Value
Cells(no_ligne, 3) = GradePersonnels.Value
Cells(no_ligne, 4) = NomPersonnels.Value
Cells(no_ligne, 5) = PrenomPersonnels.Value
Cells(no_ligne, 6) = FonctionPersonnels.Value
End If
'pour protéger
ActiveSheet.Protect Password:="toto"
'active la MAJ de l'ecran
Application.ScreenUpdating = True
End Sub
Private Sub NomPersonnels_Change()
'METS LE NOM EN MAJUSCULE
NomPersonnels.Text = UCase(NomPersonnels.Text)
End Sub
Private Sub PrenomPersonnels_Change()
'permier lettre en majuscule
PrenomPersonnels.Value = WorksheetFunction.Proper(PrenomPersonnels.Value)
End Sub
Private Sub Retour_Click()
'fermeture formulaire
Unload MajPers
End Sub
Private Sub SectionPersonnels_Change()
End Sub
Private Sub UserForm_click()
'cache le bouton modifier
Modifier.Visible = False
Modifier.Enabled = False
Valider.Visible = True
Valider.Enabled = True
End Sub
Private Sub valider_Click()
'desactive la MAJ de l'écran
Application.ScreenUpdating = False
'mise a jour du tableau
Dim derligne As Integer
'pour dé-protéger
ActiveSheet.Unprotect Password:="toto"
If MsgBox("confirmez-vous l'ajout d'un personnel?", vbYesNo, "confirmation") = vbYes Then
derligne = Sheets("PERSONNELS").Range("B300").End(xlUp).Row + 1
Cells(derligne, 2) = SectionPersonnels.Value
Cells(derligne, 3) = GradePersonnels.Value
Cells(derligne, 4) = NomPersonnels.Value
Cells(derligne, 5) = PrenomPersonnels.Value
Cells(derligne, 6) = FonctionPersonnels.Value
End If
'pour protéger
ActiveSheet.Protect Password:="toto"
'active la MAJ de l'ecran
Call preTri
MajPers.Hide
MsgBox "Travail terminé."
Application.StatusBar = ""
Application.ScreenUpdating = True
End Sub
Sub preTri()
For i = 1 To 12
ms = Choose(i, "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre")
Set f = Sheets(ms)
Application.StatusBar = ms
f.Activate
'Sub TrieCie()
'Deproteger la feuille active
f.Unprotect Password:="toto"
'desactive la MAJ de l'écran
Application.ScreenUpdating = False
'calcul manuel
Application.Calculation = xlCalculationManual
Range("A10:CA10").AutoFilter
ActiveWindow.SmallScroll ToRight:=-7
On Error Resume Next
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Clear
'trie section
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range( _
"A11:A205"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"SK,S1,S2,SCAOS,S4,SF", DataOption:=xlSortNormal
'trie grade
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range( _
"B11:B205"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"CNE,LTN,ADC,ADJ,SCH,SGT,CC1,CCH,CPL,1CL,SDT", DataOption:=xlSortNormal
'trie nom alphabetique
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range( _
"C11:C205"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.ActiveSheet.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'zoom sur la tête de page
ActiveWindow.Zoom = 110
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
'pour protéger la feuille active
ActiveSheet.Protect Password:="toto"
'calcul auto
Application.Calculation = xlCalculationAutomatic
'active la MAJ de l'ecran
Application.ScreenUpdating = True
Next i
End SubRésultat ?
Bye !
bonjour a toi gmb
tout d'abord MERCI j'arrive à voir ou il faut arriver encore merci.
désolé pour le retard dans la réponse j'étais en déplacement.
une petite question, en espérant ne pas trop insister :
lorsque le code ce lance il termine sur la feuille décembre une fois qu'on valide "travail termine"
est il possible d'imposer l'ouverture de la feuille" personnel" une fois la MAJ effectuée?
je te remercie d'avance
jérôme
Bonjour
jeromeB a écrit :est il possible d'imposer l'ouverture de la feuille" personnel" une fois la MAJ effectuée?
En fin de macro ''PreTri", ajoute l'instruction surlignée :
Sub preTri()
......
For i = 1 To 12
Application.Calculation = xlCalculationAutomatic
'active la MAJ de l'ecran
Application.ScreenUpdating = True
Next i
Sheets("PERSONNELS").Activate
End SubBye !
bonsoir,
merci pour ta réponse,
je vais m'inspirer des éléments que tu m'as mis précédemment,
afin de voir l'avancer du travail mettre une barre de progression
jasper que cela va fonctionner
encore merci
jérôme