If avec variable > nombre

Bonjour à tous,

J'ai écrit le code suivant pour macro hauteur de ligne afin de gérer les erreurs de saisie.

Dim hl As Byte

hl = InputBox("Entrez hauteur désirée ; 1=15 ;2=30 ;3=40 ;4=50 ;5=65 ;6=72", "EX:30")

If hl = Decimal Then

MsgBox ("Vous avez entré un Nombre décimal - la procédure est arrêtée.Veuillez recommencer")

Else If hl > 72 Then " NE FONCTIONNE PAS. ME REPOND "CETTE INSTRUCTION DOIT ÊTRE LA PREMIERE DE LA LIGNE....?????"

Merci à vous pour votre aide.

Bonjour,

il suffit de supprimer l'espace entre le Else et le If

Car en effet ElseIF est différent de Else If !

Ou alors il vous faut faire un "entrée" pour ouvrir une série de IF dans le Else :

If then
Else
     If then
     ElseIf then
     Else
     End If
End If

@ bientôt

LouReeD

Bonjour Michared, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim BE As Variant 'déclare la variable BE (Boîte d'entrée)
Dim V As Double 'déclare la variable V (Valeur)
Dim HL As Byte 'déclare la variable HL (Hauteur de Ligne)

ici: 'étiquette
BE = Application.InputBox("Entrez hauteur désirée : 1=15 ; 2=30 ; 3=40 ; 4=50 ; 5=65 ; 6=72", Type:=1) 'définit la boîte d'entrée BE
If BE = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
V = CDbl(BE) 'définit la valeur V
If V <> CInt(V) Then GoTo erreur 'si V est décimal, va à l'étiquette "erreur"
On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
'définit la hauteur de ligne HL en fonction du choix de BE (génère un erreur si autre que {1, 2, 3, 4, 5 ou 6})
HL = Choose(V, "15", "30", "40", "50", "65", "72")
If err <> 0 Then 'condition : si une erreur a été générée
    err.Clear 'supprime l'erreur
erreur: 'etiquette
    MsgBox "Vous devez taper un nombre entier compris entre 1 et 6 !": GoTo ici 'message puis renvoie à l'étiquette "ici"
End If 'fin de la condition
ActiveCell.EntireRow.RowHeight = HL 'exemple de récupération de la variable HL
End Sub

Édition

Bonjour Lou Reed, nos post se sont croisés...

Bonjour ThauThème !

Oui ils se sont croisés à 34 minutes près !

Ouvrir les questions auxquelles on veut réponde sans faire d'actualisation provoque ce genre de croisement !

Mais pas de soucis, je ne suis pas susceptible ! Le forum c'est ça, tout le monde qui parle !

@ bientôt

LouReeD

Re,

Ben oui... Ça donne une idée du temps qu'il m'a fallu pour trouver une solution...

@ bientôt

LouReeD

Merci à vos ThauThème et LouReed,

Je m'attelle à écrire ton code en faisant gaffe de ne pas faire de faute.

C'est pas simple le sujet que j'ai posé (enfin pour moi).....!!!

Je vous dis ce que ça donne en milieu aprem...

A toute

Bonjour ThauThème (et LouReeD), Bonjour à tous sur le forum,

Désolé hier aprem je suis tombé comme une masse... Sieste de 2h30...

En me réveillant, mon écran était full de "s". J'ai dû m'endormir en laissant 1s ou 2 mon doigt sur le "s" avant de gagner mon lit...!!

J'ai rédigé ta macro... (c'est du lourd ton code... Tu fais pas mine...!!!)

Si je tape entre 1 et 6, tout va super.

Par contre en gestion des erreurs, il zappe la MsgBox sur GoTo erreur et il masque la ligne. C'est moi qui ai dû mal placer un End If peut-être.... Que ce soit avec Nb > 7 ou Nb décimal.

D'autre part, je ne connais pas ce que veut dire une InputBox "False". Tu peux me dire ?

J'ai oublié une condition dans ma macro

If Rows.Selection > 1 Then Exit Sub (je ne sais pas si ce code fonctionne)

De plus je voudrais que la macro vienne se caler à la fin sur la Cellule colonne C en faisant un offset (0,3) . Je ne sais pas comment passer de la sélection ligne à la sélection cellule.

Grand merci à toi... Et à plus...

Info: Today, suis indisponible à partir 13h00

Oublié de te joindre Fichier....

3glinel-michel.xlsm (29.07 Ko)

Re,

Pourquoi t’embêter à retaper le code alors qu'un simple copier/coller suffisait !?... C'est ce que j'ai fait sur ton fichier en pièce jointe.

La condition :

If BE = False Then Exit Sub

permet l'annulation. Sans cette ligne, le bouton [Annuer] de la boîte d'entrée est inactif et tu tournerais en boucle tant que tu n'aurais pas entré une valeur.

Le code fonctionne de la manière suivante :

La boîte d'entrée permet à l'utilisateur de rentrer n'importe quelle valeur numérique (à cause du Type:=1)

Un test vérifie que la valeur entrée ne soit pas décimale. Si elle l'est, cela renvoie à l'étiquette Erreur, qui affiche un message et envoie à nouveau la boîte d'entrée BE...

Ensuite la valeur BE est comparée avec la fonction Choose, qui renverra la hauteur de ligne HL si BE existe dans la liste ou une erreur, si BE n'existe pas. Le On Error Resume Next, permet d'éviter le bug si l'on tape un 8 (par exemple). Dans ce cas on retrouve le même message, suivi de la réouverture de la boîte d'entrée. Comme dit plus haut, l'utilisation du bouton Annuler, grâce au If BE = False Then Exit Sub

Le Fichier :

Bonjour Thau Thème, Bonjour à tous sur le forum,

Désolé de te répondre si tard, mais j'ai été occupé par ailleurs.

Tu as raison pour le copier/coller mais je ne le faisais pas car je pensais qu'il entraînait des erreurs sur certains signes à cause d'une différence entre Excel et Word.

Je le ferai dorénavant.

Merci pour la clarté de tes explications sur la construction de la macro.

Par contre, j'ai un souci avec:

erreur:

If Err <> 0 Then

MsgBox "Vous devez taper un nombre entier compris entre 1 et 6 !":

GoTo ici

End If

Si je suis en erreur, elle zappe la msgbox et me fait un masquer ligne.

J'ai essayé:

If Err = 0 Then

Elle me fait le contraire. Elle passe par la msgbox même si je ne suis pas en erreur.

Par contre, ton code m'épate dans sa simplicité et sa technicité. Bravo pour tes connaissances.

Je suis à des années lumière.

A+

Re,

Une fois de plus le code ne correspond pas à celui que je t'ai proposé. Inutile de revenir sur le problème si tu te refuses à faire un copier/coller !... Puisque deux instructions dans la même ligne te posent problème :

Sub Macro1()
Dim BE As Variant 'déclare la variable BE (Boîte d'entrée)
Dim V As Double 'déclare la variable V (Valeur)
Dim HL As Byte 'déclare la variable HL (Hauteur de Ligne)

ici: 'étiquette
BE = Application.InputBox("Entrez hauteur désirée : 1=15 ; 2=30 ; 3=40 ; 4=50 ; 5=65 ; 6=72", Type:=1) 'définit la boîte d'entrée BE
If BE = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
V = CDbl(BE) 'définit la valeur V
If V <> CInt(V) Then GoTo erreur 'si V est décimal, va à l'étiquette "erreur"
On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
'définit la hauteur de ligne HL en fonction du choix de BE (génère un erreur si autre que {1, 2, 3, 4, 5 ou 6})
HL = Choose(V, "15", "30", "40", "50", "65", "72")
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
erreur: 'etiquette
    MsgBox "Vous devez taper un nombre entier compris entre 1 et 6 !"
    GoTo ici 'message puis renvoie à l'étiquette "ici"
End If 'fin de la condition
ActiveCell.EntireRow.RowHeight = HL 'exemple de récupération de la variable HL
End Sub

Bonjour Thau Thème,

Non , je n'ai pas ré-écrit le code.

J'ai téléchargé le fichier joint et je l'ai enregistré sous.

Donc je n'ai rien pu changer...

Là, je ne comprends pas....

En tout cas, j'ai fait un copier / coller et cela marche super....

Bravo à toi et merci beaucoup..

Passe une bonne fin de journée et, de nouveau merci

Rechercher des sujets similaires à "variable nombre"