Variable string

Bonjour à tous.

Je dois être en plein bug, mais quelque chose me paraît étrange.

J'avais jusqu'alors un userform depuis lequel je choisissais une donnée et ça remplissait tout un tas de valeurs par VBA. Tout allait nickel.

Public mail As String
…
mail = Range("mail").Value '(j'ai bien une cellule qui s'appelle mail dans ma feuille)
…
Select Case mail
    Case Is <> ""
...
    Case Else
....
End Select

Ma cellule mail restait vide si aucune donnée ne devait s'y trouver.

Pour faire l'économie d'un userform, j'ai maintenant des formules qui attendent bien sagement.

Et du coup, la cellule mail n'est plus considérée comme étant vide comme une formule s'y trouve.

Elle est égale à 0.

Questions :

Je pourrais changer le code Case Is <> "" en Case Is <> "0", mais il n'y a pas quelque chose de plus propre ?

C'est normal que mail soit égal à 0 si non rempli pour une variable string ?

Par avance merci.

Bonjour,

tu as :

- mail un objet Name

et aussi

- mail une variable de type String

ça fait un conflit

Bonjour,

Ah bon,

Select Case mail

peut faire référence à une cellule nommée ? Si tel est le cas, on n'aurait donc pas forcément l'obligation de déclarer des variables si on a des plages nommées sur notre feuille ?

essai,

Select Case Range("mail").Value

J'ai essayé de renommer mail en mail2 pour éviter le conflit, j'ai essayé aussi Range("mail").Value.

Les deux donnent la même chose. Ce qui ne m'étonne qu'à moitié étant donné que la variable mail vaut 0 dès le départ.

Est-ce qu'il y a des choses genre Isempty, qui fonctionneraient avec select case ?

quel sont les valeurs possible pour Range("mail").Value ?

as tu essayé comme ça ?

Public mail2 As String
…
mail2 = Range("mail").Value '(j'ai bien une cellule qui s'appelle mail dans ma feuille)
…
Select Case mai2
    Case Is <> ""
...
    Case Else
....
End Select

oui j'ai essayé ça.

Mais mail2, tout comme mail, prend la valeur 0 et donc n'est pas considéré comme vide ici

Encore une fois, je peux le feinter en mettant select case <>"0".

Mais ça ne me paraît pas être la façon la plus "propre" de faire, étant donné qu'il s'agit d'une variable string.

ajoute un case 0 pour ton test,

Select Case mai2
    Case 0:
    Case Is <> "":
    Case Else:
End Select

La "logique" est respectée, si pas d'adresse mail, le code après

select case 0: 

se lance.

Mais du coup, j'hallucine en pensant qu'une variable string ne devrait pas être égale à 0 ?

pourquoi pas ?

Sub test()
Dim myVar As String
myVar = 0
test1 = IsNumeric(myVar)
MsgBox test1
End Sub

Bonjour Isabelle, merci bien pour ces propositions.

J'ai donc essayé ceci dans un classeur test

Sub test()
Dim myVar As String
myVar = 0
test1 = IsNumeric(myVar)
MsgBox test1
End Sub

Bien entendu, test1 renvoie vrai.

Puis, pour reproduire mon problème, dans ce même classeur test j'ai nommé une cellule "mail" :

Sub test()
Dim mail As String
mail = range("mail").value
test1 = IsNumeric(mail)
MsgBox test1
End Sub

Et là : test1 = faux ! Ce qui devrait être le cas dans mon vrai fichier également.

(À noter 2 choses :

  • J'ai d'abord laissé la variable nommée Myvar pour éviter l'éventuel conflit entre la variable mail et la cellule nommée mail.
  • Pas de conflit entre la variable et la cellule nommée à priori)

Mais dans mon vrai fichier, la variable reste numérique. J'ai bien conscience qu'il sera difficile de m'aider sans voir le vrai fichier.

Je vais essayer de le tronquer pour le joindre, mais ça ne sera pas facile.

Un immense merci pour ton aide en tout cas.

Rechercher des sujets similaires à "variable string"