Single et Integer

2b7a

XLDnaute Occasionnel
Bonjour à toutes et tous,

J'ai mis un msg il y a qq jours et j'ai eu une réponse Macro qui fonctionne à merveille

J'essaye, avec beaucoup de mal, à comprendre comment fonctionne VBA !!!

.... mais il me manque les bases !!

Par exemple dans la macro ci-dessous : que signifie Single et Integer .... ça sert à quoi ?

Je m'aide d'un bouquin mais je n'ai pas trouvé de réponse

.... très "basique" comme question ......

Merci pour votre aide






Sub MFC()
Dim ValeurMax As Single
Dim NuméroLigne As Integer

ValeurMax = Application.WorksheetFunction.Max(Range("C4:C10"))

For NuméroLigne = 4 To 10
If Range("C" & NuméroLigne) = ValeurMax Then

With Range("C" & NuméroLigne).Font
.FontStyle = "Gras"
.ColorIndex = 3
End With

End If
Next NuméroLigne

End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : Single et Integer

Bonjour à tous


Entièrement d'accord avec phlaurent55 sur le fait qu'une mise en forme conditionnelle dans la feuille est suffisante. Toutefois, une procédure peut être utile sous Excel2003 si l'on veut gérer de nombreuses conditions de mise en forme. Par ailleurs, l'étude du fonctionnement d'un procédure peut être instructive.
Voici une version possible avec des commentaires :
VB:
Sub MFC()
Dim VMax!   'équivaut à dim VMax As Single. Ce qui veut dire que dans la suite
            'de la procédure VMax désigne un nombre de type Single.
            'Pour l'instant, la valeur de VMax est 0.
Dim NLig%   'équivaut à dim NLig As Integer. Ce qui veut dire que dans la suite
            'de la procédure NLig désigne un nombre de type Integer.
            'Pour l'instant, la valeur de NLig est 0.
    With Range("C4:C10").Columns(1)     'On va travailler avec la plage "C4:C10"...     (.Columns(1) est inutile dans cet exemple, mais est nécessaire si la plage considérée possède plusieurs colonnes)
        With .Font                      '...en commençant par rétablir le style de texte par défaut :
            .Bold = False               '...pas de graisse
            .ColorIndex = xlAutomatic   '...couleur par défaut
        End With
        VMax = WorksheetFunction.Max(.Cells)    'On donne à VMax la plus grande valeur contenue dans la plage "C4:C10"
        For NLig = 1 To .Rows.Count             'NLig va prendre successivement les valeurs 1, 2, ... , 7 car la plage "C4:C10" compte 7 lignes.
            With .Cells(NLig, 1)                'On travaille maintenant avec la "NLig ième" cellule de la plage "C4:C10"
                If .Value = VMax Then           'Si sa valeur est la plus grande des valeurs de la plage...
                    With .Font                  '...on modifie son style d'écriture...
                        .Bold = True            '...en ajoutant la graisse...
                        .ColorIndex = 3         '...et en écrivant en rouge
                    End With
                End If
            End With
        Next NLig
    End With
End Sub
On remarque que la modification de la procédure pour l'adapter à tout autre plage qu'on voudra se fait par la modification d'une seule ligne :
Code:
With Range("C4:C10").Columns(1)


On peut écrire une variante sans référence aux numéros de lignes :
VB:
Sub MFC()
Dim VMax!   'équivaut à dim VMax As Single. Ce qui veut dire que dans la suite
            'de la procédure VMax désigne un nombre de type Single.
            'Pour l'instant, la valeur de VMax est 0.
Dim oCel As Range   'signifie que dans la suite de la procédure oCel désigne une plage de cellules.
            'Pour l'instant, la valeur de oCel est Nothing (i.e. "Rien" puisqu'on n'a affecté aucune plage à oCel).
    With Range("C4:C10").Columns(1)     'On va travailler avec la plage "C4:C10"...     (.Columns(1) est inutile dans cet exemple, mais est nécessaire si la plage considérée possède plusieurs colonnes)
        With .Font                      '...en commençant par rétablir le style de texte par défaut :
            .Bold = False               '...pas de graisse
            .ColorIndex = xlAutomatic   '...couleur par défaut
        End With
        VMax = WorksheetFunction.Max(.Cells) 'On donne à VMax la plus grande valeur contenue dans la plage "C4:C10"
        For Each oCel In .Cells              'oCel désigne successivement chacune des cellules de la plage "C4:C10"
            With oCel                        'On travaille maintenant avec la cellule désignée par oCel
                If .Value = VMax Then        'Si sa valeur est la plus grande des valeurs de la plage...
                    With .Font               '...on modifie son style d'écriture...
                        .Bold = True         '...en ajoutant la graisse...
                        .ColorIndex = 3      '...et en écrivant en rouge
                    End With
                End If
            End With
        Next oCel
    End With
End Sub
qui fait exactement la même chose.​


ROGER2327
#5440


Mardi 10 Gueules 139 (Saint Préservatif, bedeau - fête Suprême Quarte)
15 Pluviôse An CCXX, 4,0955h - vache
2012-W05-6T09:49:45Z
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Single et Integer

Bonjour
Et d'abord tous mes encouragements pour vous lancer dans l'apprentissage de VBA, c'est intéressant et amusant.
Il y a quelques notions de base à connaître avant de vous lancer dans le décortiquage d'un code.
Je vous invite à lire des pas à pas sur ce sujet ici

  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
  • Ce lien n'existe plus
La page sur les variables et leur déclaration vous intéressera plus particulièrement au vu de votre question.
Il faut savoir (mais ce n'est pas du tout recommandé) qu'on n'est pas obligé de déclarer les variables dans le VBA. Si on ne le fait pas, par défaut, excel leur donne le type variant qui comme son nom l'indique veut dire que la nature de la variable est ... variable.
A quoi ça sert alors ?
A deux choses en fait :
1) à minimiser la taille mémoire qu'excel attriue à chaque variable.
Si vous avez un test qui renvoie seulement vrai ou faux (une variable de type booleen), il n'y aura besoin de stocker que 1 ou 0. En revanche si votre variable est un texte, ou un tableau interne (array) qui peut contenir des milliers de données, il faut qu'excel réserve la place en mémoire pour pouvoiir traiter cette donnée.
Si vous savez que vous allez faire une boucle sur des nombres entiers positifs qui vont de 1 à 10, il n'est pas nécessaire de dire à excel de réserver la place pour écrire des nombres très élevés avec des virgules.
Déclarer les variables permet donc d'optimiser la mise en mémoire et donc la rapidité des codes. Mais attention, si vous dites
dim i as integer
et que dans le code vous écrivez
for i = 1,02 to 178e12
vous aurez une erreur (et ce n'est pas toujours évident au début de savoir pourquoi excel râle !)
si vous dites
i="mon texte" vous aurez aussi une erreur
et si dans votre procédure i peut aller au delà de 32767 vous aurez aussi une erreur (dépassement de capacité).

2) c'est un excellent moyen de ne pas avoir deux variables avec le même nom et d'être sur d'orthographier correctement vos variables
si je dis
Dim MonTexte as string (string c'est une chaine de caractère, que les esprits coquins s'en désolent ou pas :) )
si dans ma macro j'écris
monstring (en minuscule), excel reconnait que c'est la variable que j'ai définie et modifie mon écriture ce qui me permet d'être sure d'avoir écrit correctement. Si l'écris mastring il ne se passera rien.
 

Discussions similaires

Statistiques des forums

Discussions
312 496
Messages
2 088 979
Membres
103 996
dernier inscrit
KB4175