Tri VBA

  • Initiateur de la discussion Startus
  • Date de début
S

Startus

Guest
Bonsoir tout le monde,

Dans un classeur, j'ai crée des plages nommées dynamiques sur 5 feuilles...
La formule est : =DECALER(Feuil1!$C6$;;;NBVAL($C$6:$C$1500))

Ces plages se nommes respectivement:
Opér.Compte1,Opér.Compte2... Le N° fait référence à l'index de la feuille

Un code VBA auquel je n'arrive pas à terminer, Copie la plage nommée de la feuille active, la Colle dans une autre feuille (vierge), Tri cette liste et Supprime les Doublons.

La feuille vierge, contient également une plage dynamique ('Test_Liste') que la macro utilise pour supprimer les doublons

Ensuite une autre macro ajoute cette même liste à la propriété RowSoure d'une ComboBox d'un Userform
Voilà le Code:

Code:
Sub Zone_Liste()
Dim Cible As Object
Dim Idx As Byte

Idx = Val(ActiveSheet.Index)

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

Range('Opér.Compte' & Idx).Copy
    Worksheets(8).Range('A1').PasteSpecial Paste:=xlPasteValues
Columns('A:A').Sort Key1:=Range('A1'), Order1:=xlAscending

For Each Cible In Range('Test_Liste')
        If Cible.Offset(1, 0) = Cible Then Cible.ClearContents
    Next Cible

Columns('A:A').Sort Key1:=Range('A1'), Order1:=xlAscending
Application.Calculation = xlCalculationAutomatic
End Sub

Mon ennui est que ce code me tri la colonne A de la feuille active, au lieu de me trier la Colonne A de la feuille vierge ???

En revanche, si je modifie la ligne qui copie la plage comme ceci:
Range('Opér.Compte1').Copy
Tout marche comme je le souhaite.

Mais en fait, je voudrai que ce code utilise plutôt la plage nommée de le feuille active comme référence et poursuive son exécution...

J'espère avoir été simple, mais pas facile...Ouarf...
Merci de votre aide...
 

Startus

XLDnaute Occasionnel
Startus écrit:
Bonsoir tout le monde,

Dans un classeur, j'ai crée des plages nommées dynamiques sur 5 feuilles...
La formule est : =DECALER(Feuil1!$C6$;;;NBVAL($C$6:$C$1500))

Ces plages se nommes respectivement:
Opér.Compte1,Opér.Compte2... Le N° fait référence à l'index de la feuille

Un code VBA auquel je n'arrive pas à terminer, Copie la plage nommée de la feuille active, la Colle dans une autre feuille (vierge), Tri cette liste et Supprime les Doublons.

La feuille vierge, contient également une plage dynamique ('Test_Liste') que la macro utilise pour supprimer les doublons

Ensuite une autre macro ajoute cette même liste à la propriété RowSoure d'une ComboBox d'un Userform
Voilà le Code:

Code:
Sub Zone_Liste()
Dim Cible As Object
Dim Idx As Byte

Idx = Val(ActiveSheet.Index)

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

Range('Opér.Compte' & Idx).Copy
    Worksheets(8).Range('A1').PasteSpecial Paste:=xlPasteValues
Columns('A:A').Sort Key1:=Range('A1'), Order1:=xlAscending

For Each Cible In Range('Test_Liste')
        If Cible.Offset(1, 0) = Cible Then Cible.ClearContents
    Next Cible

Columns('A:A').Sort Key1:=Range('A1'), Order1:=xlAscending
Application.Calculation = xlCalculationAutomatic
End Sub

Mon ennui est que ce code me tri la colonne A de la feuille active, au lieu de me trier la Colonne A de la feuille vierge ???

En revanche, si je modifie la ligne qui copie la plage comme ceci:
Range('Opér.Compte1').Copy
Tout marche comme je le souhaite.

Mais en fait, je voudrai que ce code utilise plutôt la plage nommée de le feuille active comme référence et poursuive son exécution...

J'espère avoir été simple, mais pas facile...Ouarf...

Merci de votre aide...
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Startus, en bonne nuit en France !

Je ne suis plus vraiment certain, mais les plages nommées sont trouvées systématqiuement dans tous le classeur, sans notion de feuilles, et je me demande même si ça ne le fait pas dans tous les classeurs ouverts...

Enfin bref, je pense que tu t'embarques sur une drôle d'histoire...

Mais sinon, sans aucun test, je conseillerai déjà de t'orienter vers une syntax comme ceci :

With Worksheets(8)
.Range('A1').PasteSpecial Paste:=xlPasteValues
.Columns('A:A').Sort Key1:=Range('A1'), Order1:=xlAscending
End With

Par contre attention sur les anciennes version d'Excel il faut que la Feuille soit active pour permettre le 'Sort'...

Alors un 'Activate' peut être bienvenu

With Worksheets(8)
.Activate
.Range('A1').PasteSpecial Paste:=xlPasteValues
.Columns('A:A').Sort Key1:=Range('A1'), Order1:=xlAscending
End With

Si celà te fait avancer...
Bonne Nuit
[ol]@+Thierry[/ol]
 

Startus

XLDnaute Occasionnel
Un GRAND MERCI Thierry, C'est TOUT BON...

J'avais bien essayé le With worksheets(8)...End With, mais sans le .Activate

Pourtant je suis sur Excel 2003, Pack Office 2003 Pro

A ne rien y comprendre...

Enfin ma galère sur ce bout de code se termine Je vais pouvoir terminer mon Application

C'est une Application qui permet de gèrer les Compte bancaire, et souhaitai vraiment reprendre les opérations (plage nommée) du compte en cours afin que l'utilisateur se voit proposer un liste actualisée de la zone déroulante à chaque ouverture du Userform

Merci
 

Discussions similaires

Réponses
2
Affichages
121
Réponses
3
Affichages
591

Statistiques des forums

Discussions
312 345
Messages
2 087 450
Membres
103 546
dernier inscrit
mohamed tano