VBA - Condition si nombre à virgule alors...

Résolu
zivodul8 Messages postés 248 Statut Membre -  
blux Messages postés 2064 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Mon problème est simple : je cherche un bout de code VBA qui détermine si un nombre est à virgule ou non. Exemple :

Si n = 3.22 alors
             aligner à droite
Sinon ( n = 3)
             aligner à gauche
Fin si 


Merci!

7 réponses

  1. beber005
     
    Bonjour,

    Ce que je te conseille de faire c'est

    SI ta chaine contient un caractère spécial ici un point ALORS
    aligner à droite
    SINON
    aligner à gauche
    FIN Si

    En fait dès que dans ta chaine tu rencontre l'élément point tu en déduis que c'est un nombre à virgule
    0
  2. zivodul8 Messages postés 248 Statut Membre 22
     
    Je n'ai pas réussi à faire un :

    Application.WorksheetFunction.Search


    Il n'y a pas d'autres méthodes?
    0
  3. blux Messages postés 2064 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    tu peux faire ça avec la fonction int(nombre) qui renvoie la partie entière d'un nombre.

    Si elle est égale au nombre lui-même, c'est qu'il n'y a pas de virgule.

    IF INT(nombre) = nombre THEN
    ...
    END IF

    0
  4. zivodul8 Messages postés 248 Statut Membre 22
     
    Arff, c'est tellement bête! Je vais essayer merci ;-)
    0
    1. blux Messages postés 2064 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Prends plutôt FIX(nombre), cette fonction n'arrondit pas.
      Ca t'évitera de tester si 3 = 2, pour le cas où tu aurais 2,999999...
      0
    2. zivodul8 Messages postés 248 Statut Membre 22
       
      Merci Blux j'ai failli tomber dans le panneau!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zivodul8 Messages postés 248 Statut Membre 22
     
    J'ai un autre (rapide) problème. Je cherche à déterminer le numéro de la ligne où en colonne, deux cellules vides se suivent verticalement. Voilà ce que j'ai fait mais cela ne fonctionne pas :
    
    Sub NbLigne()
    
    Dim NbLigne, i As Integer
    i = 1
    
    Do While Range("A" & i).Value <> "" And Range("A" & i + 1).Value <> ""
        NbLigne = i
        i = i + 1
    Loop
    
    MsgBox NbLigne
    
    End Sub


    Merci!
    0
  7. zivodul8 Messages postés 248 Statut Membre 22
     
    J'ai résolu, je viens de découvrir qu'en VBA le ET se traduisait par
    or
    et non
    and
    !
    0
    1. Ctesias Messages postés 786 Statut Membre 36
       
      non, c'est faux
      0
    2. blux Messages postés 2064 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Ce n'est pas en VBA, c'est en logique booléenne, mais uniquement à cause du fait que tu as des <>, si tu avais des =, il te faudrait mettre un AND.

      Les explications ici :

      https://forums.commentcamarche.net/forum/affich-16025052-shell-condition

      Et comme je le dis, c'est un truc vieux comme les ordinateurs ;-)
      0
    3. zivodul8 Messages postés 248 Statut Membre 22
       
      Humm, à méditer...

      Merci une nouvelle fois, je ne re-ferais pas l'erreur :)
      0
  8. Ctesias Messages postés 786 Statut Membre 36
     
    Ce que tu peux faire, c'est :

    Dim nombre1 as integer
    Dim nombre2 as string
    
    Nombre1=Int(nombre2)
    
    If nombre2%nombre1 = 0 then
    
    décaler a gauche
    
    Sinon
    
    décaler à droite
    
    end if
    0
    1. zivodul8 Messages postés 248 Statut Membre 22
       
      Aussi ;-)
      0
    2. blux Messages postés 2064 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Je ne suis pas persuadé que l'on puisse diviser une chaine par un nombre...
      0
    3. Ctesias Messages postés 786 Statut Membre 36
       
      Hum... J'ia mis string rapidos comme cela. Mais je ne me souvens plus si il y a une possibilité d'initialiser des chiffre avec des chiffres a virgule.
      0
    4. blux Messages postés 2064 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      a = 9999.22
      0