01net    Web


Actuellement en ligne : 710 Utilisateurs dont 134 dans Windows & logiciels >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par azerty39, A.Ouloube, zippo25, totoftotof  
01net > Forum de 01net > Windows & logiciels > bureautique
> Excel - trier tableau via VBA [Résolu]
Auteur
Message
 
<     1       >
peyro
  même pas peur!
  :-)
      ?   @     Posté le 26/03/2008 13:36:53  
Voter pour ce message
Bonjour,
J'utilise VBA pour trier un tableau ( excel 2007 - anglais )
mon code est de la forme :

Range("B5:G10").Select
Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Je voudrais pouvoir modifier la clé de tri.
J'ai crée une macro pour que l'utilsateur choisisse la clé, le programme me retournant une valeur (0 ou 1 pour l'exemple)
Ensuite j'ai codé :

Dim Key As Range
If index = 0 Then
Key = Range("B5")
Else
Key = Range("C5")
End If

et j'avais comme idée de demander :

Selection.Sort Key1:=Key, ...

mais la macro me sort un magnifique "Invalid procedure call or argument" sur cette instruction. :'(
une idée?
Merci :jap:
-->Message édité par peyro le 26/03/2008 14:49:48<--
-------
they peed on my rug!
Gorfael
  
  :-)
      ?   @     Posté le 26/03/2008 14:03:39  
Voter pour ce message
Salut peyro
ça t'apprendra à être feignant :lol:

il faut déclarer tes variables : ça t'aide pour les fautes de frappe, mais aussi, si tu déclare le type tu te retrouves avec une erreur si c'est pas bon.
Il faut éviter les mots qui pourrait être interprétés comme une instruction par Excel. Word, Sheet, Key, ...
Mais tu demandes à Excel de plus réflèchir, plus t'as moins de chance d'avoir une erreur :pt1cable:

Pour ton problème, deux solutions : il s'entend que la feuille est sélectionnée/Activée (obligatoire pour un tri), que index est une autre variable, et que la déclaration (dim) se fait en tête de macro.
Solution 1
Dim K_Tri As Range
.......
If Index = 0 Then
Set K_Tri = Range("B5")
Else
Set K_Tri = Range("C5")
End If

Range("B5:G10").Sort Key1:=K_Tri, Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

on déclare K_tri en variable plage

Solution 2
Dim K_Tri As String
.......
If Index = 0 Then
K_Tri = "B5"
Else
K_Tri = "C5"
End If

Range("B5:G10").Sort Key1:=Range(K_Tri), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Comme quoi, t'était pas si loin de la solution

A+
-->Message édité par Gorfael le 26/03/2008 14:18:29<--
peyro
  même pas peur!
  :-)
      ?   @     Posté le 26/03/2008 14:49:25  
Voter pour ce message
arf... tout ca pour un petit Set

Merci! :jap:
:youpi:
-------
they peed on my rug!
Gorfael
  
  :-)
      ?   @     Posté le 26/03/2008 18:04:27  
Voter pour ce message
peyro a écrit :
arf... tout ca pour un petit Set
Merci! :jap:
:youpi:
Salut
Ouais, mais... Set, Jeu et match ! :fume:
A+
<     1       >

01net > Forum de 01net > Windows & logiciels > bureautique
> Excel - trier tableau via VBA [Résolu]

Aller à :

Page générée en : 0.084s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

MMO RPG
Evoluez dans l'univers legendaire de Conan et affrontez les joueurs du monde entier
Jeux
Nouveauté : Gagnez de l'argent en nourrissant vos clients, qui se trouvent être des corbeaux affamés.