Pourquoi ajouter un $ derrière une fonction VBA

Jilde

XLDnaute Occasionnel
Bonjour aux forumeuses zé aux forumeurs !

Bah j'crois que tout est dans l'titre hein ...

En fait voilà, j'ai récupéré du code VBA dans un fichier que je suis en train de décortiquer pour le modifier et le compléter.
Et dans ce code, je trouve plein de dollars "$" !
Y'en a derrière les noms de variables (Champ$, Valeur$) mais aussi derrière des fonctions VBA (Trim$, Left$).

Et j'voudrais bien connaitre leur signification ... Nom de nom !!

Donc si y'en a qui savent ;o) !!

Merci et bonne fin de journée à tous !!
 

Minick

XLDnaute Impliqué
Re : Pourquoi ajouter un $ derrière une fonction VBA

$ est le caractere de declaration d'un String pour une variable
donc
Code:
Dim MaChaine as String
equivaut a
Code:
Dim MaChaine$

Pour les fonctions c'est un peu plus subtil:
Left par exemple retourne un variant de type String
alors que Left$ retourne un String
Ce qui permet de gagner un peu au niveau memoire
 

Jilde

XLDnaute Occasionnel
Re : Pourquoi ajouter un $ derrière une fonction VBA

Merci pour ta rapidité Minick !!

Bon, pour la déclaration de variable, c'est ok, j'ai pigé.

Mais ... pour les fonctions ...
C'est quoi la différence entre "un variant de type String" et un "String" ?

;o)
 

ROGER2327

XLDnaute Barbatruc
Re : Pourquoi ajouter un $ derrière une fonction VBA

Re...
Dans l'aide de VBA, on trouve des choses qu'il serait trop long de recopier ici.
Juste un extrait (Remarques accompagnant l'article Dim, instruction) :
Remarques

Les variables déclarées à l'aide de l'instruction Dim au niveau module sont disponibles pour toutes les procédures du module. Au niveau procédure, les variables ne sont disponibles qu'au sein de la procédure.

Utilisez l'instruction Dim au niveau module ou au niveau procédure pour déclarer le type de données d'une variable. Par exemple, l'instruction suivante déclare une variable comme variable de type Integer.

Dim NumberOfEmployees As Integer

Vous pouvez aussi utiliser une instruction Dim pour déclarer le type objet d'une variable. L'instruction suivante déclare une variable pour une nouvelle instance d'une feuille de calcul.

Dim X As New Worksheet

Si le mot clé New n'est pas utilisé pour déclarer une variable objet, la variable qui fait référence à l'objet ne peut être utilisée avant d'avoir été associée à un objet existant par le biais de l'instruction Set. Jusqu'à ce qu'elle soit attribuée à un objet, la variable objet déclarée a la valeur spéciale Nothing, qui indique qu'elle ne fait référence à aucune instance spécifique d'un objet.

Vous pouvez également utiliser l'instruction Dim suivie de parenthèses vides pour déclarer un tableau dynamique. Une fois le tableau dynamique déclaré, utilisez l'instruction ReDim dans une procédure pour définir le nombre de dimensions et d'éléments du tableau. Si vous tentez de déclarer à nouveau une dimension d'une variable tableau dont la taille a été indiquée explicitement dans une instruction Private, Public ou Dim, une erreur se produit.

Si vous n'indiquez aucun type de données ou d'objet et s'il n'y a pas d'instruction Deftype dans le module, la variable est de type Variant par défaut.

Lors de l'initialisation des variables, une variable numérique prend pour valeur initiale 0, une chaîne de longueur variable prend pour valeur initiale une chaîne de longueur nulle (""), et une chaîne de longueur fixe est remplie de zéros. Les variables Variant ont la valeur Empty à l'initialisation. Chaque élément d'une variable de type défini par l'utilisateur est initialisé comme s'il s'agissait d'une variable distincte.

Note Lorsqu'une instruction Dim est utilisée dans une procédure, elle est généralement placée au début de la procédure.
C'est un bon début pour comprendre...​
Bon courage !


ROGER2327
#3413


16 Floréal An CCXVIII
2010-W18-3T15:50:34Z
 

Minick

XLDnaute Impliqué
Re : Pourquoi ajouter un $ derrière une fonction VBA

Comme dit plus haut c'est une question de memoire utilisee

Un string occupe 10 octets en memoire + la longueur de la chaine
alors qu'un variant de type string occupe 22 octets en memoire + la longueur de la chaine

Est-ce plus clair?

Mais bon l'interet de distinguer les 2 dans vba n'est pas flagrant, l'auteur
a du l'utiliser par habitude sur d'autres langages
 

Jilde

XLDnaute Occasionnel
Re : Pourquoi ajouter un $ derrière une fonction VBA

Merci à tous pour vos explications !

Je crois avoir mieux saisi le pourquoi du comment du parce que bon ...

Bonne soirée , je m'en vais potasser ça dans le RER ...
 

ROGER2327

XLDnaute Barbatruc
Re : Pourquoi ajouter un $ derrière une fonction VBA

Bonjour Minick
Comme dit plus haut c'est une question de memoire utilisee

Un string occupe 10 octets en memoire + la longueur de la chaine
alors qu'un variant de type string occupe 22 octets en memoire + la longueur de la chaine

Est-ce plus clair?

Mais bon l'interet de distinguer les 2 dans vba n'est pas flagrant, l'auteur
a du l'utiliser par habitude sur d'autres langages
Je suis d'accord avec vous, on ne voit souvent pas grande différence à l'exécution entre une procédure dans laquelle les variables sont typées et une autre où elles ne le sont pas.
Mais je préfère, autant que faire se peut, déclarer et typer strictement les variables : cela oblige à la rigueur et évite des surprises. On est ainsi certain de manipuler des variables dont on sait exactement ce qu'elles représentent. Savoir ce qu'on manipule sans s'en remettre au hasard ou à la chance est un gage de réussite et le temps apparemment perdu dans la conception des procédures se trouve largement compensé par la facilité de détection des erreurs et de la maintenance.

Mais ce n'est qu'une opinion, un point de vue. On peut très bien en avoir d'autres...
ROGER2327
#3414


16 Floréal An CCXVIII
2010-W18-3T16:09:50Z
 

Minick

XLDnaute Impliqué
Re : Pourquoi ajouter un $ derrière une fonction VBA

Bonjour ROGER2327,

Je suis tout a fait d'accord.
Je "type" toujours mes variables (cf les quelques bouts de codes
que j'ai pu commettre ici entre autre)

J'emets juste un doute entre utiliser par exemple Left$ plutot que Left
comme preciser plus haut dans vba.
Dans d'autres langages c'est une autre histoire.

On est bien sur la meme longueur d'onde ;)
 

ROGER2327

XLDnaute Barbatruc
Re : Pourquoi ajouter un $ derrière une fonction VBA

Re...
Parfaitement sur la même longueur d'onde. Et j'ai la même opinion que vous en ce qui concerne Left() et Left$() pour lesquels je n'ai jamais été capable de voir ce qui les distingue. J'en profite pour demander à qui passe par ici de dire s'il voit quelque différence.​
Bonne soirée.
ROGER2327
#3415


16 Floréal An CCXVIII
2010-W18-3T17:04:16Z
 

MJ13

XLDnaute Barbatruc
Re : Pourquoi ajouter un $ derrière une fonction VBA

Bonjour à tous

Vous pouvez toujours tester cette macro:

Code:
Sub test_left()
a = Left("aaaa", 1)
b = Left$("aaaa", 1)
Cells(1, 1) = a
Cells(2, 1) = b
End Sub

Ou faire de la formule1 :D.
 

ROGER2327

XLDnaute Barbatruc
Re : Pourquoi ajouter un $ derrière une fonction VBA

Re...
Bonjour à tous

Vous pouvez toujours tester cette macro:

Code:
Sub test_left()
a = Left("aaaa", 1)
b = Left$("aaaa", 1)
Cells(1, 1) = a
Cells(2, 1) = b
End Sub

Ou faire de la formule1 :D.
Bon sang, mais c'est bien sûr ! Votre message fait remonter deux souvenirs à ma vieille cervelle :
  1. Left$() est au moins deux fois plus rapide que Left$() comme le montre ce test :
    Code:
    [COLOR="DarkSlateGray"][B]Sub tata()
    Dim t As Single, i&, y$
       t = Timer
       For i = 1 To 10000000
          y = Left("azertyuiop", 3)
       Next i
       [A1] = Timer - t
       t = Timer
       For i = 1 To 10000000
          y = Left$("azertyuiop", 3)
       Next i
       [A2] = Timer - t
    End Sub[/B][/COLOR]
  2. Comme disait ce cher Georges :
    Quand ils sont tout neufs
    Qu'ils sortent de l'œuf
    Du cocon
    Tous les jeunes blancs-becs
    Prennent les vieux mecs
    Pour des cons
    Quand ils sont d'venus
    Des têtes chenues
    Des grisons
    Tous les vieux fourneaux
    Prennent les jeunots
    Pour des cons
    Moi, qui balance entre deux âges
    J'leur adresse à tous un message

    Refrain
    Le temps ne fait rien à l'affaire
    Quand on est con, on est con
    Qu'on ait vingt ans, qu'on soit grand-père
    Quand on est con, on est con
    Entre vous, plus de controverses
    Cons caducs ou cons débutants
    Petits cons d'la dernière averse
    Vieux cons des neiges d'antan

    Vous, les cons naissants
    Les cons innocents
    Les jeun's cons
    Qui n'le niez pas
    Prenez les papas
    Pour des cons
    Vous, les cons âgés
    Les cons usagés
    Les vieux cons
    Qui, confessez-le
    Prenez les p'tits bleus
    Pour des cons
    Méditez l'impartial message
    D'un type qui balance entre deux âges

    (Refrain)
Merci, MJ13 !​
ROGER2327
#3416


16 Floréal An CCXVIII
2010-W18-3T20:07:06Z
 

ROGER2327

XLDnaute Barbatruc
Re : Pourquoi ajouter un $ derrière une fonction VBA

Re...
Bonjour à tous

Merci Roger, je savais que je pouvais compter sur toi ;).

Je serais un peu moins c.. ce soir :).
Eh oui, mon cher, c'est ça l'entraide !
Bon, plaisanterie mise à part, c'est bien votre intervention qui m'a fait me souvenir qu'il y a une vraie différence entre Left() et Left$(). Par conséquent, moi aussi "Je serais un peu moins c.. ce soir".
Du moins je l'espère...
Bonne journée !
ROGER2327
#3423


17 Floréal An CCXVIII
2010-W18-4T10:54:08Z
 

Discussions similaires

Statistiques des forums

Discussions
312 565
Messages
2 089 729
Membres
104 266
dernier inscrit
christian Auletta