Problème de trie

Le
Sylian
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #21670761
Bonjour,

Essaie comme ceci :

'-----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
w = .Range("A4", .Cells(DerLig, DerCol)).Address
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'-----------------------------------



"Sylian" 4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.
michdenis
Le #21670751
Bonjour,

Essaie comme ceci :

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'----------------------------------



"Sylian" 4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.
Sylian
Le #21671901
Merci beaucoup pour ton aide dominicale !

Cependant si le trie fonctionne, j'ai exactement le même problème.
En fait peut-être est-ce que cela vient du fait que je créé un nom en
colonne B de la feuille (1) et que pour toutes les feuilles suivante
j'ai mis þuil1!A(numéro de la ligne correspondante) ?

Je bloque encore

michdenis a écrit :
Bonjour,

Essaie comme ceci :

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'----------------------------------



"Sylian" 4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.

michdenis
Le #21671991
Je t'ai conçu une macro. L'as-tu essayée? Fonctionne-t-elle ?
Sinon qu'est-ce que la procédure proposée ne réussit pas
à faire ?

Si tu rencontres d'autres difficultés avec ton application,
tu peux les décrire... Pour des raisons de compréhension
prenons-les une à la fois. Pour ce faire, tu dois les décrire
séparément et te rappeler que les répondeurs n'ont pas ton
application sous les yeux. Cela demande d'être très explicite.





"Sylian" 4bddbca3$0$12194$
Merci beaucoup pour ton aide dominicale !

Cependant si le trie fonctionne, j'ai exactement le même problème.
En fait peut-être est-ce que cela vient du fait que je créé un nom en
colonne B de la feuille (1) et que pour toutes les feuilles suivante
j'ai mis þuil1!A(numéro de la ligne correspondante) ?

Je bloque encore

michdenis a écrit :
Bonjour,

Essaie comme ceci :

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'----------------------------------



"Sylian" 4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.

Sylian
Le #21674611
Excuse moi pour ces "imprécisions" et merci encore pour ton aide. Je
vais essayer de décrire un peu mieux mon projet.

Déjà, j'ai bien essayé ta macros qui bien que deux fois plus petite que
la mienne, arrive au même résultat ; un trie sur les 3 première colonnes
sans que le reste des lignes leur correspondant ne suivent.


Voici globalement mon projet. J'ai une feuille, la première, avec des
colonnes de référence A pour le prénom, B pour le nom, C pour l'age. Les
autres feuilles du classeur reprennent à chaque fois ces références dans
les mêmes colonnes. Pour la feuille 2 dans la cellule B4 est inscrit
þuill1!B4 idem pour la feuille 3 etc... Le reste des tableau à droite
de ces 3 colonnes est libre pour rentrer des données à la main.

J'ai créé un macro de gestion de personne en feuille 1 avec la
possibilité de supprimer ou d'ajouter un prénom+nom+age. La suppression
avec liste déroulante fonctionne très bien. L'insertion fonctrionne si
je rajoute une personne à la fin de tableau mais au moment de trier,
c'est la catastrophe ! Dans les feuilles de 2 à 13, seules les 3
première colonnes sont triés (en référence à la première). J'aurai aimé
avoir le reste de la ligne (hormis A B C) vierge et inséré à la bonne
position d'après un trie alphabétique se référant au nom (B)

J'espère avoir été plus clair. C'est très simple à voir mais difficile à
décrire. A la rigueur je peux extrapoler un exemple simple et l'envoyer
via ci-joint pour une meilleur compréhension ... si tu veux :-/

Merci d'avance

michdenis a écrit :
Je t'ai conçu une macro. L'as-tu essayée? Fonctionne-t-elle ?
Sinon qu'est-ce que la procédure proposée ne réussit pas
à faire ?

Si tu rencontres d'autres difficultés avec ton application,
tu peux les décrire... Pour des raisons de compréhension
prenons-les une à la fois. Pour ce faire, tu dois les décrire
séparément et te rappeler que les répondeurs n'ont pas ton
application sous les yeux. Cela demande d'être très explicite.





"Sylian" 4bddbca3$0$12194$
Merci beaucoup pour ton aide dominicale !

Cependant si le trie fonctionne, j'ai exactement le même problème.
En fait peut-être est-ce que cela vient du fait que je créé un nom en
colonne B de la feuille (1) et que pour toutes les feuilles suivante
j'ai mis þuil1!A(numéro de la ligne correspondante) ?

Je bloque encore

michdenis a écrit :
Bonjour,

Essaie comme ceci :

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'----------------------------------



"Sylian" 4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.

denis_michon
Le #21675601
Tu dois passer en mode de calcul manuel le temps que
la procédure va exécuter le tri. J'ai ajouté 2 lignes de
code à cet égard à la procédure :

Avant :
Application.Calculation = xlCalculationManual
Après :
Application.Calculation = xlCalculationAutomatic

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

Application.Calculation = xlCalculationManual
For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
Application.Calculation = xlCalculationAutomatic
End Sub
'----------------------------------





"Sylian" 4bde750c$0$16944$
Excuse moi pour ces "imprécisions" et merci encore pour ton aide. Je vais
essayer de décrire un peu mieux mon projet.

Déjà, j'ai bien essayé ta macros qui bien que deux fois plus petite que la
mienne, arrive au même résultat ; un trie sur les 3 première colonnes sans
que le reste des lignes leur correspondant ne suivent.


Voici globalement mon projet. J'ai une feuille, la première, avec des
colonnes de référence A pour le prénom, B pour le nom, C pour l'age. Les
autres feuilles du classeur reprennent à chaque fois ces références dans
les mêmes colonnes. Pour la feuille 2 dans la cellule B4 est inscrit
þuill1!B4 idem pour la feuille 3 etc... Le reste des tableau à droite de
ces 3 colonnes est libre pour rentrer des données à la main.

J'ai créé un macro de gestion de personne en feuille 1 avec la possibilité
de supprimer ou d'ajouter un prénom+nom+age. La suppression avec liste
déroulante fonctionne très bien. L'insertion fonctrionne si je rajoute une
personne à la fin de tableau mais au moment de trier, c'est la catastrophe
! Dans les feuilles de 2 à 13, seules les 3 première colonnes sont triés
(en référence à la première). J'aurai aimé avoir le reste de la ligne
(hormis A B C) vierge et inséré à la bonne position d'après un trie
alphabétique se référant au nom (B)

J'espère avoir été plus clair. C'est très simple à voir mais difficile à
décrire. A la rigueur je peux extrapoler un exemple simple et l'envoyer
via ci-joint pour une meilleur compréhension ... si tu veux :-/

Merci d'avance

michdenis a écrit :
Je t'ai conçu une macro. L'as-tu essayée? Fonctionne-t-elle ?
Sinon qu'est-ce que la procédure proposée ne réussit pas
à faire ?

Si tu rencontres d'autres difficultés avec ton application,
tu peux les décrire... Pour des raisons de compréhension
prenons-les une à la fois. Pour ce faire, tu dois les décrire
séparément et te rappeler que les répondeurs n'ont pas ton
application sous les yeux. Cela demande d'être très explicite.





"Sylian" discussion : 4bddbca3$0$12194$
Merci beaucoup pour ton aide dominicale !

Cependant si le trie fonctionne, j'ai exactement le même problème.
En fait peut-être est-ce que cela vient du fait que je créé un nom en
colonne B de la feuille (1) et que pour toutes les feuilles suivante
j'ai mis þuil1!A(numéro de la ligne correspondante) ?

Je bloque encore

michdenis a écrit :
Bonjour,

Essaie comme ceci :

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'----------------------------------



"Sylian" discussion :
4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.

Daniel.C
Le #21675591
Bonjour Denis.
Adieu Michdenis ?
Cordialement.
Daniel

Tu dois passer en mode de calcul manuel le temps que
la procédure va exécuter le tri. J'ai ajouté 2 lignes de
code à cet égard à la procédure :

Avant :
Application.Calculation = xlCalculationManual
Après :
Application.Calculation = xlCalculationAutomatic

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

Application.Calculation = xlCalculationManual
For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
Application.Calculation = xlCalculationAutomatic
End Sub
'----------------------------------





"Sylian" 4bde750c$0$16944$
Excuse moi pour ces "imprécisions" et merci encore pour ton aide. Je vais
essayer de décrire un peu mieux mon projet.

Déjà, j'ai bien essayé ta macros qui bien que deux fois plus petite que la
mienne, arrive au même résultat ; un trie sur les 3 première colonnes sans
que le reste des lignes leur correspondant ne suivent.


Voici globalement mon projet. J'ai une feuille, la première, avec des
colonnes de référence A pour le prénom, B pour le nom, C pour l'age. Les
autres feuilles du classeur reprennent à chaque fois ces références dans
les mêmes colonnes. Pour la feuille 2 dans la cellule B4 est inscrit
þuill1!B4 idem pour la feuille 3 etc... Le reste des tableau à droite de
ces 3 colonnes est libre pour rentrer des données à la main.

J'ai créé un macro de gestion de personne en feuille 1 avec la possibilité
de supprimer ou d'ajouter un prénom+nom+age. La suppression avec liste
déroulante fonctionne très bien. L'insertion fonctrionne si je rajoute une
personne à la fin de tableau mais au moment de trier, c'est la catastrophe
! Dans les feuilles de 2 à 13, seules les 3 première colonnes sont triés
(en référence à la première). J'aurai aimé avoir le reste de la ligne
(hormis A B C) vierge et inséré à la bonne position d'après un trie
alphabétique se référant au nom (B)

J'espère avoir été plus clair. C'est très simple à voir mais difficile à
décrire. A la rigueur je peux extrapoler un exemple simple et l'envoyer via
ci-joint pour une meilleur compréhension ... si tu veux :-/

Merci d'avance

michdenis a écrit :
Je t'ai conçu une macro. L'as-tu essayée? Fonctionne-t-elle ?
Sinon qu'est-ce que la procédure proposée ne réussit pas
à faire ?

Si tu rencontres d'autres difficultés avec ton application,
tu peux les décrire... Pour des raisons de compréhension
prenons-les une à la fois. Pour ce faire, tu dois les décrire
séparément et te rappeler que les répondeurs n'ont pas ton
application sous les yeux. Cela demande d'être très explicite.





"Sylian" discussion : 4bddbca3$0$12194$
Merci beaucoup pour ton aide dominicale !

Cependant si le trie fonctionne, j'ai exactement le même problème.
En fait peut-être est-ce que cela vient du fait que je créé un nom en
colonne B de la feuille (1) et que pour toutes les feuilles suivante
j'ai mis þuil1!A(numéro de la ligne correspondante) ?

Je bloque encore

michdenis a écrit :
Bonjour,

Essaie comme ceci :

'----------------------------------
Sub test()
Dim DerCol As Integer, DerLig As Long
Dim Sh As Worksheet

For Each Sh In Worksheets
With Sh
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With .Range("A4", .Cells(DerLig, DerCol))
.Sort Key1:=.Item(2, 2), Order1:=xlAscending, Header:=xlYes
End With
End With
Next
End Sub
'----------------------------------



"Sylian" discussion :
4bdd8814$0$16563$
Bonjour,

Je possède 13 feuilles sur un classeur avec des tableaux différents.
Je souhaite les trier en ordre alphabétique en prenant la colonne B en
référence (à partir de B4 jusqu'à la fin de ma colonne).

J'ai enregistrer une macro grâce à l'enregistreur (qui fonctionne) mais
quand je l'intègre à ma macro, chaque feuille est bien triée mais ...
seulement les 3 premières colonnes alors que le reste de la ligne lui
correspondant ne suit pas.

Indice : les 3 1eres colonnes ont de commun que se sont des formules
faisant appel à la feuille 1. Mais je bloque quand même.

voici l'extrait de mon code. Peut-être est-ce une faute de ponctuation ?

For j = 13 To 1 Step -1
If j <> 2 Then
ActiveWorkbook.Worksheets(j).Range(Cells(4, 1), Cells(nbpersonnel +
4, 29)).Select
ActiveWorkbook.Worksheets(j).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(j).Sort.SortFields.Add
Key:=Worksheets(j).Range(Cells(4, 2), Cells(nbpersonnel + 4, 2)),
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(j).Sort
.SetRange ActiveWorkbook.Worksheets(j).Range(Cells(3, 1),
Cells(nbpersonnel + 4, 29))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
Next

Merci d'avance de votre aide précieuse.

michdenis
Le #21675821
Bonjour,

C'est qui lui ? Je ne le connais pas !
;-)

Je vais devoir m'absenter un temps indéterminé,
le temps d'affectuer une réparation "HardWare"
sur mon ordi. principal.
Jacky
Le #21675871
Bonjour,

C'est qui lui ? Je ne le connais pas !


Sauf que lui, comme toi, fait de la moto
;o)))

--
Salutations
JJ


"michdenis"
Bonjour,

C'est qui lui ? Je ne le connais pas !
;-)

Je vais devoir m'absenter un temps indéterminé,
le temps d'affectuer une réparation "HardWare"
sur mon ordi. principal.



michdenis
Le #21675931
| Sauf que lui, comme toi, fait de la moto


Tout un hasard !
Publicité
Poster une réponse
Anonyme