Erreur Range dans Textbox

M

Moa

Guest
Salut à tous !

Dans la getion des erreurs, comment gérer l'erreur d'une valeur ne faisant pas référence à une cellule ?

En fait, j'ai plusieurs textboxs, dans lesquels l'utilisateur entre des valeurs différentes, ces valeurs dans ma macro deviennent des variables.

Et dans ces textboxs j'en ai deux qui servent à définir la plage de travail de la macro.

Et je n'arrive pas à faire le code de gestion d'erreur si les valeurs entrées ne correpondent pas à une cellule.

Si un chef pouvait me mettre sur la voie, ce serait vraiment cool.

Merci beaucoup

@ +

Moa
 
A

Arnaud

Guest
En espérant que c'est ce que tu veux :)

'**********************************************************************************************
'* determine si la saisie rentrée par l'utilisateur est de type string ( n'importe quoi ) *
'* ou de type range (reférence a une cellule) *
'* renvoi 0 si de type string, 1 si de type range *
'**********************************************************************************************
Public Function TypeSaisie(FCellule As String) As Integer
On Error GoTo Er
Dim r As Object
Set r = Range(FCellule)
TypeSaisie = 1
Exit Function
Er:
TypeSaisie = 0
End Function
 
M

Moa

Guest
Merci Arnaud !

Je vais essayer de me dépatouiller avec çà.

Et justement, j'ai un autre problème d'erreur possible.

Dans mon textbox1, l'utilisateur saisi, le début de la plage, dans le textbox2, la fin de la plage.

Hors si la valeur de la fin est avant le début de la plage, j'ai aussi un hic, et là aussi je rame.

J'ai commencé en donnant des valeurs numériques à mes ranges, mais c'est une vraie usine à gaz.


Merci à toi et bonne journée !

@ +

Moa
 
A

Arnaud

Guest
pour tes histoires de plages, à part en comparant tes plages je vois pas trop ( je suppose que c'est ce que tu fais dans ton usine à gaz )

sinon g oublié de mettre des commentaire dans ma fonction :
et bien c'est tout seul. j'essaye de créer un objet range et la 2 possiblités : ça pète ce n'est pas un range
ça pète pas c'est bien un range.
 
M

Moa

Guest
Salut Arnaud !

En ce qui concerne la sélection de la plage, j'ai trouvé....Héhé :


If Range(UserForm1.TextBox1.Text).Column + Range(UserForm1.TextBox1.Text).Row > Range(UserForm1.TextBox2.Text).Column + Range(UserForm1.TextBox2.Text).Row Then
MsgBox "Plage Impossible, La Fin doit être Supérieure au Début !", vbCritical
Exit Sub

En fait je fais l'addition des valeurs Colonne et Ligne pour chaque TextBox et il faut que la valeur du textbox1 ne soit pas supérieure à celle du textbox2.

Maintenant, faut que j'arrive à résoudre le problème des valeurs entrées dans les textboxs.

Et j'ai du mal à adapter ta fonction.

@ +

Moa
 
M

Moa

Guest
Tout à fait !

Je suis déjà sur une piste.

J'ai essayé en déclarant une variable object ou range, puis de dire :

If IsRange(blablabla) then msgbox blablabla.

Mais cela ne fonctionne pas.

Là, j'extrait avec left le premier caractère à gauche et je regarde si il est d'ordre alpahbétique, puis celui de droite et je regarde si il est numérique.

Mais il y a trop de possibilités et cela devient une vraie usine à gaz.

Je suis sur qu'il y a un moyen simple d'obliger à avoir des valeurs "Range" dans mes deux textboxs.

@ +

Moa
 
A

Arnaud

Guest
et bien c'est bien ce que je fais dans mon code ce que tu veux faire.
si tu essaye de créer un objet Range avec comme valeur du texte qui ne conrespond pas a un range, une erreur interviens donc tu passe dans la gestion d'erreur et tu renvoi que ton texte n'es pas un range.
en tout cas chez moi ça marche très bien :)
 
M

Moa

Guest
Salut Arnaud !


Excuse-moi, je me suis mal exprimé.

Je ne voulais pas dire que ton code ne fonctionnait pas, je l'ai testé et il fonctionne à merveille.

Ce que je voulais dire, est que je n'arrive pas à l'adapter correctement dans ma macro.

Mais je viens de revenir dessus et je devrais y arriver..auquel cas....je te fais signe.

Encore merci à toi.

@ +

Moa
 
M

Moa

Guest
Re Arnaud !

Voilà, en fait, j'ai plus d'une dizaine de textbox, avec chacun des valeurs et des formats à entrer, différents.

Et pour linstant, j'ai déjà fait une dizaine de gestion d'erreurs, cela devient long.

Donc, j'ai simplement rajouté au début de mon code, On Error GoTo Bof

Puis Bof : msgbox "blablabla"
Exit Sub

De cette manière, je gère en une sel fois toutes mes erreurs de saisie possibles.

En revanche, j'ai un autre problème, quand il n'y a pas d'erreur, la boite de message s'affiche quand-même.

Décidement, y'a toujours un truc...Héhé...!!!

@ +

Moa
 
M

Moa

Guest
Salut Arnaud !

Merci c'est sympa, je viens juste de trouver et je venais sur le forum te le dire, et je m'aperçois que tu m'avait donné la solution.

Ceci dit, après de multiples tests, j'ai décidé de combiner les deux :

Sub UneColonneSurDeux()
On Error GoTo Bof
If BlaBlaBlaThen
MsgBox "Vous avez oublié une valeur !", vbCritical
Exit Sub
End If
If BloBloBloThen
MsgBox "Valeur Négative Impossible, Veuillez saisir une valeure Supérieure ou égale à Zéro !", vbCritical
Exit Sub
End If

Etc...tous mes tests

Toutes mes déclarations de variable

Ma Procédure

Bof: If Err.Number <> 0 Then MsgBox "Valeur Début ou Fin ne fait pas référence à une cellule !", vbCritical
Exit Sub
End Sub

Merci de m'avoir aidé, c'est super cool !

@ +

Moa
 

Discussions similaires

Réponses
9
Affichages
247
Réponses
26
Affichages
531

Statistiques des forums

Discussions
312 612
Messages
2 090 227
Membres
104 453
dernier inscrit
benjiii88