[Excel] problème de condition If ElseIf

Résolu
LeGhe -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à remplir une cellule colonne M avec une valeur en fonction de la colonne N :

Columns("N:N").Select
Selection.NumberFormat = "0"
For li = lifinz3 To 2 Step -1
If 0 < OAma.Range("N" & li).Value < 100 Then
Range("M" & li) = "100G"
ElseIf 101 < OAma.Range("N" & li).Value < 250 Then
Range("M" & li) = "250G"
ElseIf 251 < OAma.Range("N" & li).Value < 500 Then
Range("M" & li) = "500G"
ElseIf 501 < OAma.Range("N" & li).Value < 1000 Then
Range("M" & li) = "1000G"
ElseIf 1001 < OAma.Range("N" & li).Value < 2000 Then
Range("M" & li) = "2000G"
ElseIf 2001 < OAma.Range("N" & li).Value < 3000 Then
Range("M" & li) = "3000G"
End If
Next li


Mais tout est rempli avec 100G.

Pourquoi ?

Merci !

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    comment veux-tu qu'on te réponde sans voir ce qu'il y a réellement dans N ?
    Déposer le fichier xls sur cjoint.com et coller ici le lien fourni.

    eric
    0
    1. LeGhe
       
      Columns("N:N").Select
      Selection.NumberFormat = "0"


      ben N est un nombre entier, non ?
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, je pense que tu veux plutôt écrire:
    (0 < OAma.Range("N" & li).Value) and (OAma.Range("N" & li).Value < 100)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      si tu écris
      a < b < c
      , VBA va faire ainsi:
      (a<b) < c

      donc il va vérifier si a est plus petit que b, et vérifier si le résultat (vrai ou faux) est plus petit que c.
      0
    2. LeGhe
       
      Logique...
      0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    suggestion:
    option explicit
    dim vl as single
    Columns("N:N").Select
    Selection.NumberFormat = "0"
    For li = lifinz3 To 2 Step -1
    vl = OAma.Range("N" & li).Value
    If 0 < vl then
    if  vl  < 100 Then
    Range("M" & li) = "100G"
    ElseIf vl  < 250 Then
    Range("M" & li) = "250G"
    ElseIf vl < 500 Then
    Range("M" & li) = "500G"
    ElseIf vl < 1000 Then
    Range("M" & li) = "1000G"
    ElseIf vl < 2000 Then
    Range("M" & li) = "2000G"
    ElseIf vl < 3000 Then
    Range("M" & li) = "3000G"
    End If
    end if
    Next li 
    0
    1. LeGhe
       
      C'est parfait, j'ai compris, merci infiniment !
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      je reprend ici pour qu'il y ait une logique dans la continuité.

      Selection.NumberFormat = "0"
      ben N est un nombre entier, non ?

      Non. Un format change l'affichage, jamais la valeur.
      Il faut prendre la partie entière Int(ta_cellule)
      eric
      0