Rapport de message :*
 

Re: Tri de tableaux de longueurs variables sur différentes feuilles

Titre du sujet : Re: Tri de tableaux de longueurs variables sur différentes feuilles
par myDearFriend! le 07/08/2009 16:01:32

Bonjour GGlyon, le Forum,

Citation :
GGlyon a écrit :

En ce qui concerne ma compréhension du code, je bloque sur Select Case et Dateserial... J'ai lu l'aide VBA là-dessus mais ça ne m'a pas éclairé ! Est-ce que tu pourrais m'expliquer ?


Select Case
Il s'agit là d'une instruction de bloc très pratique et indispensable à connaitre à mon avis. Elle remplace très avantageusement des cascades de IF... THEN... ELSEIF...

Prenons l'exemple d'une variable MaValeur que tu souhaiterais tester. Suivant sa valeur, tu souhaites exécuter des instructions différentes. Ce test pourra se présenter sous cette forme par exemple :
   Select Case MaValeur
   
    Case Is < 0
        'ICI, instructions si MaValeur est négative (inférieure à zéro)
        '...
    Case 0, 1000
        'ICI, instructions si MaValeur est égale à zéro OU égale à 1000
        '...
    Case 1 To 100
        'ICI, instructions si MaValeur est compris entre 1 et 100 (inclus)
        '...
    Case Else
        'ICI, instructions si MaValeur ne correspond à aucun cas plus haut...
        '...
       
    End Select
On retrouve là une façon très simple et surtout très clair d'exécuter du code selon la valeur de cette variable. Pour ma part, je l'utilise très souvent pour tester des valeurs de date.

Pour info, sache qu'on peut également l'utiliser pour tester une variable de type String. Par exemple, si on considère une variable MaChaine sensée stocker un nom d'utilisateur, on pourrait faire quelque chose comme ça :
   Select Case MaChaine
   
    Case "mDF"
        MsgBox "Salut mDF !"
       
    Case "GGlyon"
        MsgBox "Salut GGlyon !"
       
    Case "Jean-Marie", "Mth"
        MsgBox "Salut les jeunes !"
       
    Case Else
        MsgBox "Bonjour " & MaChaine & ", bienvenue sur mDF-XLpages.com"
       
    End Select
Il est par ailleurs notoire que cette instruction est plus rapide à l'exécution que des instructions conditionnelles IF... THEN en cascade.
Cette instruction est donc in-dis-pen-sa-ble ! N'hésite pas à en abuser.

DateSerial
Je ne sais pas si je peux être plus clair que l'aide Excel au sujet de cette fonction...

Sa syntaxe est :
DateSerial(valeur qui représente l'année, valeur qui représente le mois, valeur qui représente le jour)

Cette fonction retourne donc une valeur de Date en fonction des arguments donnés.

Exemple :
DateSerial(2009, 8, 15) te retournera donc la date "15/08/2009"

Autre exemple (utilisé dans le code proposé dans ton classeur) :
DateSerial(Year(Date), Month(Date), 1)

Comme nous sommes le 07/08/2009, la fonction Date retourne donc "07/08/2009"
- Year(Date) donnera donc "2009"
- Month(Date) donnera donc "08"
- DateSerial(Year(Date), Month(Date), 1) donnera donc "01/08/2009"


Citation :
GGlyon a écrit :

Pour mes variables n, Z, etc je me demande ce qui pose problème ?! Il faudrait qu'elles soient plus explicites ?

Rien de grave là GGlyon... c'était juste du chipotage façon mDF !
C'était juste pour dire que nous avons tous nos habitudes et que j'avais délibérément mis les miennes de côté pour que tu puisses conserver tes proprres repères. Par exemple, je t'avoue que pour moi, l'expression Cells(X,Y) ce n'est pas très conventionnel... car généralement, le X on l'utilise plutot pour les abscisses (colonnes) et le Y pour les ordonnées (lignes) et non le contraire.

Un conseil toutefois (et en rapport avec ta remarque d'ailleurs) : si tu crées une variable qui devra stocker des numéros de ligne, il conviendrait systématiquement de la déclarer de type Long. Et si tu en crées une sensée stocker des numéros de colonnes, elle devrait être au minimum de type Integer pour éviter tout plantage (256 colonnes sur une feuille Excel).

Par ailleurs, en terme d'optimisation, tu aurais pu aussi déclarer de type Currency, les variables correspondant à des montants (d'euros) au lieu de Single. Mais bon, tout ça reste du chipotage, surtout si tu n'es pas appelé à réaliser des calculs complexes avec ces valeurs.

Bien cordialement,