VBA Tirer une Plage Nommee en fonction de la premiere colonne

patapock

XLDnaute Nouveau
Bonsoir.

Soit le tableau B3,D8 comportant les colonnes "NOM", "RENOM", "DATE DE NAISSANCE".
La plage contenant les données saisies (B4,D8) a été nommée "SM"

Quel serait la fonction qui permettrait de trier les lignes de la plage "SM" par ordre croissant de la colonne "NOM" ?

Je pensais a quelque chose comme:


Range("SM").Sort key1:=Range("???"), order1:=xlAscending​


Je ne sais pas quoi mettre a la place des ??? pour que le code fonctionne ?!

Merci de votre aide

Cordialement
 

Pièces jointes

  • Test.xls
    24.5 KB · Affichages: 47
  • Test.xls
    24.5 KB · Affichages: 51
  • Test.xls
    24.5 KB · Affichages: 49

bbb38

XLDnaute Accro
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

Bonjour patapock, le forum,
Une solution avec le fichier joint.
Cordialement,
Bernard
 

Pièces jointes

  • Test.xls
    68 KB · Affichages: 83
  • Test.xls
    68 KB · Affichages: 79
  • Test.xls
    68 KB · Affichages: 76
Dernière édition:

patapock

XLDnaute Nouveau
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

Bonjour bbb38, et merci de répondre si vite.

C'est vrai que ta solution trie bien la première colonne ("B", en l'occurrence), mais ce n'est pas ce que je souhaite.

Je reformule le problème différemment, en mettant moins de données a disposition:


  • soit un tableau comprenant un certain nombre de lignes et de colonnes, que l'on a nommé "SM".

    Avec un bouton, comment trier les ligne de "SM" en ordre croissant en fonction de sa première colonne?

    On ne sait pas ou se trouve "SM" sur la feuille! :rolleyes:


Je sais, c'est fourbe, mais, au lire de plusieurs posts sur la toile, dans une quête désespérée, il me semble que la solution ravirait nombre d'entre nous.
 

Misange

XLDnaute Barbatruc
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

Bonjour

En mettant ton tableau sous forme de vrai tableau excel
Ce lien n'existe plus

Code:
Sub trie()
With Worksheets("feuil1").ListObjects("tableau1")
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("tableau1[[#Headers],[#Data],[nom]]"), _
 SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub

ce code reste valable quel que soit le nombre de lignes, de colonnes (c'est dynamique, pas besoin de plage nommée avec decaler ou autre).Tu peux bien sur renommer SM ce tableau 1 (en supprimant le nom que tu as déjà mis sinon conflit).
 

Pièces jointes

  • Test.xlsm
    16.6 KB · Affichages: 69
  • Test.xlsm
    16.6 KB · Affichages: 82
  • Test.xlsm
    16.6 KB · Affichages: 66

patapock

XLDnaute Nouveau
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

Misange, merci pour ce modèle de code que je trouve très réussi.
La encore, tu contourne le problème, non?

Mon entêtement a vouloir traiter une "Plage Nommée", indépendamment de sa position, vient du fait que dans plusieurs de mes projets, j'utilise (ou vais utiliser) différents formulaires pour alimenter des tableaux "nommes". Par la suite, je souhaiterai reproduire des fragments de ces tableaux dans d'autres feuilles avec une mise en page qui m'est imposée (mêmes données, mais agencées différemment).

L’idée me parait séduisante, d'un bout de code facilement transposable en ne changeant qu'un nom (la plage nommée), insère une nouvelle ligne (enregistrement par formulaire) dans la bonne plage nommée, puis la classe alphabétiquement au bon endroit.

Pourquoi pas, non plus, alimenter différentes plages nommées dans différentes feuilles, en ne pressant qu'une fois sur un bouton "valider" de formulaire.

Mais peut être fais-je fausse route?
 

Misange

XLDnaute Barbatruc
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

Là où tu fais fausse route c'est en n’utilisant pas les tableaux alors que tu as excel 2010 :)
Tu n'as plus besoin de plages nommées avec les tableaux. Ou plus exactement un tableau EST une plage nommée mais avec des tas d'autres avantages. Je t'incite à lire la page dont je t'ai donné le lien pour voir les nombreux avantages.
Un tableau peux très bien s'alimenter avec un formulaire par VBA (tu trouveras un exemple de code sur excelabo).
 

Si...

XLDnaute Barbatruc
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

salut

j'approuve pleinement le conseil donné par Misange :D de passer par un tableau et le tri peut être fait avec un code très simple :
VB:
Sub trie()
  [Tableau1].Sort [Tableau1[NOM]], 1, Header:=1
End Sub

le tableau nommé ainsi est trié en fonction de la colonne dont le titre suit, en ordre décroissant (2 pour l'autre) etsans toucher à la ligne des titres.

Remarque le code est indépendant de la position du tableau sur la feuille !
 

patapock

XLDnaute Nouveau
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

Si...

Je teste ta méthode sans succès. Je pense avoir un problème de syntaxe.
Aurais-tu la gentillesse de joindre un fichier exemple?

Tri s'effectuant en cliquant sur un bouton qui valide un formulaire (dans mon cas, ajoutant un nouvel enregistrement dans "Tableau1".

-Plage de cellules concernées: appelée "Tableau1"
-Tri croissant en fonction de la colonne "Colone1"
-Pas d’entêtes de colonnes

Cordialement
 

patapock

XLDnaute Nouveau
Re : VBA Tirer une Plage Nommee en fonction de la premiere colonne

J'ai contourne le problème par un tri automatique de tableau.

Ci-joint, mon fichier test pour que d'autres puissent en profiter.

Cordialement
 

Pièces jointes

  • Tri Automatique Test Working.xlsm
    15.2 KB · Affichages: 89

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU