Cellule vide reconnue non vide ... ?

Bonjour tous,

Le titre parle de lui même : j'ai une fonction dont voici le code :

Option Explicit
Option Base 1

Public Sub ImposeBornes()

'NB : ne fonctionne que lorsque l'on clic, ensuite les bornes ne sont plus effectives
'       la procédure joue sur la feuille active
'       on considre que des valeurs numériques ont été entrées dans les cellules

Dim c As Range
Dim val As Double
Dim ws As Worksheets

'If Range("A1").Value > 3 Then
'    Range("C1").Value = 3
'ElseIf Range("A1").Value < 0.1 Then
'    Range("C1").Value = 0.1
'ElseIf Range("A1").Value = "" Then
'    Range("B1").Value = "Renseignez valeur"
        'voir si A1 mais aussi A2 sont vides, dans ce cas C1 = ""
'        If Range("A2").Value = "" Then
'            Range("C1").Value = ""
'            Exit Sub
'        End If
'End If

'Boucle avec les Select Case car avec les IF la condition range("A1").value < 0.1 est reconnue VRAI _
même si la case est vide (pourquoi ?)

Select Case Range("A1").Value
    Case Is > 3
        Range("C1").Value = 3
    Case Is < 0.1
        Range("C1").Value = 0.1
    Case Is = ""
        Range("B1").Value = "Renseignez valeur"
        If Range("A2").Value = "" Then
            Range("C1").Value = ""
            Exit Sub
        End If
End Select

If Range("A1").Value <> "" Then Range("B1").Value = ""

'on réinitialise val avec la valeur de la cellule A2

Select Case Range("A2").Value
    Case Is = ""
        Range("B2").Value = "Renseignez valeur"
    Case Is <> ""
        Range("B2").Value = ""
End Select

If Range("A1").Value <> "" And Range("A2").Value <> "" Then
    Range("A1").Value = Range("C1").Value
    Range("C1").FormulaLocal = "=si(esterreur(A1*A2);" & "" & ";A1*A2)"
End If

'réglage taille des colonnes
Columns.ColumnWidth = 15

End Sub

Je l'ai codée pour qu'elle vérifie deux conditions : une sur A1, et une sur A2.

le truc, c'est que si A1 est vide, la cellule est tout de même considérée comme ayant une valeur inférieure à 1 0_0

Et ce qui m'étonne encore plus, c'est qu'en revanche pour la cellule A2, là la cellule si elle est vide est bien reconnue comme vide -_-

Il y a forcément un truc qui m'échappe ?

J'ai testé en créant une nouvelle feuille, rien n'y change...

Si quelqu'un à une idée, il doit y avoir un truc énorme qui m'échappe

Ps : fichier joint

Bonjour

Modifie l'ordre de tes Case

Select Case Range("A1").Value
    Case Is = ""
        Range("B1").Value = "Renseignez valeur"
        If Range("A2").Value = "" Then
            Range("C1").Value = ""
            Exit Sub
        End If
    Case Is > 3
        Range("C1").Value = 3
    Case Is < 0.1
        Range("C1").Value = 0.1
End Select

Je teste cela tout de suite, merci

Une explication théorique quand même, de pourquoi la cellule vide est reconnue comme ayant une valeur inférieure à 0.1 ?

Ca m'intrigue, et savoir d'où ça vient me permettrait d'éviter à l'avenir des déconvenues.

En tout cas merci poru la réactivité, je teste immédiatement

Edit : ça fonctionne nickel !!

Reste à comprendre pourquoi, pour l'instant ça me dépasse ... Il doit y avoir une histoire d'affectation automatique de valeur pendant le test de valeur ? Je ne suis pas encore assez callé sur le théorique, comment fonctionne VBA, le dessous les cartes.

Bonjour

N'appuie pas sur "Citer" pour répondre à un message, cela encombre le post pour rien

Tu as un bouton "Répondre" en bas à gauche du dernier message

Sinon cela peut se comprendre (je ne fais qu'une interprétation de ce qui me semble logique)

Pour comparer il faut bien transformer les données en quelque chose de comparable (le code de chaque lettre-caractère-signe-etc ....)

Pour une cellule vide, comme il n'y aucun caractère le code de cellule sera 0 (attention supposition)

Pour une cellule contenant 0.1 (le code du 0 = 48)

donc quand tu marques Case Is < 0.1 : en réalité tu compare 0 et 48 donc on a bien une cellule vide est plus petite que 0.1

C'est sur que ce n'est pas l'explication officielle mais elle me plait

Noté, je retiens donc que pour la comparaison, on commence par tester s'il y a vide pour ne pas affecter la valeur 0 automatiquement.

J'avais donc la bonne intuition,

Ca prouve encore une fois qu'il faut se mettre à la place de l'ordinateur, comprendre son fonctionnement, avant de pouvoir coder efficacement.

Merci à toi : résolu

Rechercher des sujets similaires à "vide reconnue"