Tri et mise en forme automatique

  • Initiateur de la discussion Initiateur de la discussion Moi69
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Moi69

XLDnaute Occasionnel
Bonjour à Tous,

Voici mon problème : dans le fichier ci-dessous à partir de l'onglet "liste personne" trié par n° je souhaiterai que l'onglet "export annuaire" se remplisse automatiquement mais par ordre alphabétique et QUE 83 ligne. Si j'ajoute ou enlève un nom je voudrais que la mise en page se fasse automatiquement.
Je sais c'est un peu compliqué mais ça fait un moment que je me creuse la tête et rien ne sort. La dernière le forum m'a bien aidé et rapidement je me suis dit que cette fois aussi je vais trouver la personne qui va pouvoir m'aider.
Le fichier que je mets est le résultat souhaité remplit manuellement !!! Il est à noter que normalement il contient 25 colonnes et environ 400 noms...

Merci d'avance
 

Pièces jointes

Re : Tri et mise en forme automatique

Bonjour Toi , bonjour le forum,

Pas clair ton histoire dans le second onglet tu doubles les données sur deux tableaux, donc ça correspond à 166 lignes du premier tableau puis tu nous parles de 25 colonnes de 400 noms. Désolé mnais je ne comprends rien !
 
Re : Tri et mise en forme automatique

Bonsoir, salut Robert,
d'accord avec Robert, c'est pas clair. Certaines données dans liste personnes n'existent pas dans l'onglet export annuel (2701, 2702, 2706, 2707,...).
Personnellement, par formules, le plus compliqué semble être de trouver le moyen de trier par ordre croissant les 2 colonnes "tél" et cela j'y arrive sans colonne intermédiaire et avec une formule "compacte". Le reste semble a priori pouvoir être réglé plus simplement. Le problème, c'est que sur 25 colonnes et avec 400 noms, les formules matricielles prendraient trop de temps de calcul et cela deviendrait vite ingérable. Je ne pousse pas plus avant et te conseille de passer par macro.
C'est pourquoi je ne livre pas, (sauf à considérer que cela peut aider un VBAiste à te régler le problème, auquel cas qu'il me le fasse savoir).
A+
 
Dernière édition:
Re : Tri et mise en forme automatique

Bonjour Robert et David, bonjour le Forum

Mon fichier final a une taille de 86 ko et ne peut donc être joint ici, c'est pourquoi j'ai supprimé des colonnes et des lignes d'où le fait que certains noms ne correspondent plus (je les ai supprimé au hasard 😱 )
Savez-vous comment je peux joindre un fichier plus gros que 48 ko ?

je vous remets le fichier épuré correctement cette fois-ci avec les noms qui correspondent sur les 2 feuilles et vous réexplique mon problème :
A partir de la feuille 1 (liste personnes) trié par n° de tel je voudrais que la feuille 2 (export annuaire) se remplisse automatiquement par ordre alpha mais pas plus de 83 noms par pavé : tel / nom / prénom / société / service (ce "pavé" se répète 5 fois dans la feuille 2 du fichier original d'où mes 25 colonnes) et cela même si j'ajoute ou retire un nom dans la feuille 1. J'espère avoir été un peu plus clair et vous remercie de toute façon pour l'attention que vous avez porté à mon problème.
@+
 

Pièces jointes

Re : Tri et mise en forme automatique

Re,
si tes 2 listes sont déjà triées par ordre alpha comme c'est le cas dans le dernier fichier fourni, et que les pavés comportent toujours 83 lignes, pourquoi ne pas simplement taper en A2 de l'onglet liste personnes ='liste personnes'!A2 et tirer la formule sur 5 colonnes et 83 lignes, puis en F2 ='liste personnes'!A84 et faire de même (on peut éventuellement trouver une formule qui automatiserait cette procédure)?
Cela t'éviterait de devoir inutilement utiliser des formules matricielles et ainsi, accélérer considérablement le traitement de tes données...
A+
 
Re : Tri et mise en forme automatique

Bonjour,

Il est vrai que dans le fichier fourni les 2 listes sont triés par ordre alpha mais dans l'original, la première feuille est numérique.

Mais finalement j'ai créé 2 petites macros et mis les formules adéquates et tout fonctionne.

Merci pour votre aide

@+
 
Re : Tri et mise en forme automatique

Bonjour Moi69, david84,
Trop tard, mais comme je l'ai fait, je le poste.
A mettre dans le code de la feuille Liste Personnes.
Code:
[COLOR=blue]Private Sub[/COLOR] Worksheet_Change([COLOR=blue]ByVal[/COLOR] Target [COLOR=blue]As[/COLOR] Range)
Application.ScreenUpdating = [COLOR=blue]False[/COLOR]
[COLOR=blue]Dim[/COLOR] Tablo()
k = 2
[COLOR=blue]With[/COLOR] Sheets("export annuaire au 17 07 2009")
    .Cells.ClearContents
[COLOR=blue]End With[/COLOR]
Derligne = Sheets("liste personnes").Range("A" & Application.Rows.Count).End(xlUp).Row
Boucle:
[COLOR=blue]With[/COLOR] Sheets("liste personnes")
    BCL = BCL + 1
    z = 2
    [COLOR=blue]ReDim[/COLOR] Tablo(1 [COLOR=blue]To[/COLOR] 83, 1 [COLOR=blue]To[/COLOR] 25)
    [COLOR=blue]For[/COLOR] a = 1 [COLOR=blue]To[/COLOR] 25
        Tablo(1, a) = .Cells(1, a)
    [COLOR=blue]Next[/COLOR]
    [COLOR=blue]For[/COLOR] i = k [COLOR=blue]To[/COLOR] k + 81
        [COLOR=blue]For[/COLOR] j = 1 [COLOR=blue]To[/COLOR] 25
        Tablo(z, j) = .Cells(i, j)
        [COLOR=blue]Next[/COLOR] j
        z = z + 1
    [COLOR=blue]Next[/COLOR] i
[COLOR=blue]End With[/COLOR]
[COLOR=blue]With[/COLOR] Sheets("export annuaire au 17 07 2009")
    Dercol = .Cells(1, Application.Columns.Count).End(xlToLeft).Column
    .Cells(1, Dercol).Resize([COLOR=blue]UBound[/COLOR](Tablo, 1), [COLOR=blue]UBound[/COLOR](Tablo, 2)) = Tablo
[COLOR=blue]End With[/COLOR]
[COLOR=blue]If[/COLOR] k * BCL < Derligne [COLOR=blue]Then[/COLOR] k = k + 84: [COLOR=blue]GoTo[/COLOR] Boucle
Application.ScreenUpdating = [COLOR=blue]True[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Cordialement
 

Pièces jointes

Re : Tri et mise en forme automatique

Merci Efgé.

J'essaye de voir le résultat dès fois que le résultat soit mieux que ce que j'ai actuellement mais je t'avoue que je n'y arrive pas. J'ai bien copié le code dans la feuille (alt+F11) mais rien ne se passe...

Cordialement
 
Re : Tri et mise en forme automatique

Re
Dans mon exemple, si tu modifie quoique ce soit sur la feuille "Liste Personnes", la feuille "export annuaire au 17 07 2009" est automatiquement mise à jour.
Il faut que ton propre fichier possède les mêmes noms d'onglets que ton exemple.
Cordialement
 
Re : Tri et mise en forme automatique

Re

Ok je viens de voir le résultat. C'est génial le principe mais ce n'est pas vraiment le résultat que je souhaite car la seconde feuille ne se met pas automatiquement par ordre alphabétique !! Je pense que ce doit être un peu plus compliqué.

Merci je vais tout de même étudié ton code car il est bien sympa tout de même.

Cdt
 
Re : Tri et mise en forme automatique

Bonjour à Moi (même) 😉 😀

Peut-être comme ceci ??? :

Code:
Private Sub Worksheet_Activate()
Range("A1:H40").Select 'plage par exemple où sont tes noms et adresses
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 'A1 est la cellule où il y a le premier nom
Range("A1").Select
End Sub

Oubien, crée une macro (Sub tris() par ex.) avec ces lignes, et dans le premier module tu appelle
celle-ci.
 
Re : Tri et mise en forme automatique

Bonjour Moi69, le fil, le forum,
Pour l'exercice et parce que ma précédente proposition comportait des erreurs (pas assez testée 😡 😱), une nouvelle version:
Pour 400 lignes j'arrive à 0,30 seconde, donc la macro est dans un bouton.
Code:
[COLOR=blue]Private Sub[/COLOR] CommandButton1_Click()
Application.ScreenUpdating = [COLOR=blue]False[/COLOR]
Application.DisplayAlerts = [COLOR=blue]False[/COLOR]
[COLOR=blue]Dim[/COLOR] Tablo()
k = 2
Sheets("liste personnes").Copy After:=Sheets(Sheets.Count)
[COLOR=blue]With[/COLOR] Sheets(Sheets.Count)
    Derligne = .Range("B" & Application.Rows.Count).End(xlUp).Row
    .Range("A2:E" & Derligne).Sort Key1:=.Range("B2"), Order1:=xlAscending
[COLOR=blue]End With[/COLOR]
Sheets("export annuaire au 17 07 2009").Cells.ClearContents
Boucle:
[COLOR=blue]With[/COLOR] Sheets(Sheets.Count)
    z = 2
    [COLOR=blue]ReDim[/COLOR] Tablo(1 [COLOR=blue]To[/COLOR] 83, 1 [COLOR=blue]To[/COLOR] 5)
    [COLOR=blue]For[/COLOR] a = 1 [COLOR=blue]To[/COLOR] 5
        Tablo(1, a) = .Cells(1, a)
    [COLOR=blue]Next[/COLOR]
    [COLOR=blue]For[/COLOR] i = k [COLOR=blue]To[/COLOR] k + 81
        [COLOR=blue]For[/COLOR] j = 1 [COLOR=blue]To[/COLOR] 5
        Tablo(z, j) = .Cells(i, j)
        [COLOR=blue]Next[/COLOR] j
        z = z + 1
    [COLOR=blue]Next[/COLOR] i
[COLOR=blue]End With[/COLOR]
 
[COLOR=blue]With[/COLOR] Sheets("export annuaire au 17 07 2009")
    Dercol = .Cells(1, Application.Columns.Count).End(xlToLeft).Column + 1
    [COLOR=blue]If[/COLOR] Dercol = 2 [COLOR=blue]Then[/COLOR] Dercol = 1
    .Cells(1, Dercol).Resize([COLOR=blue]UBound[/COLOR](Tablo, 1), 5) = Tablo
[COLOR=blue]End With[/COLOR]
[COLOR=blue]If[/COLOR] k + 82 <[SIZE=4][COLOR=red][B]=[/B][/COLOR][/SIZE] Derligne [COLOR=blue]Then[/COLOR] k = k + 82: [COLOR=blue]GoTo[/COLOR] Boucle
Sheets(Sheets.Count).Delete
Sheets("liste personnes").Activate
Application.DisplayAlerts = [COLOR=blue]True[/COLOR]
Application.ScreenUpdating = [COLOR=blue]True[/COLOR]
MsgBox "Exportation terminée"
[COLOR=blue]End Sub[/COLOR]
Cordialement
Edit : en Rouge + changement du fichier.
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
372
  • Question Question
XL pour MAC mise en forme
Réponses
2
Affichages
545
M
Réponses
9
Affichages
830
Maikales
M
Réponses
2
Affichages
910
Retour