Erreur format textbox

Bonjour à tous.

Je viens vous voir face à 2 problèmes que je n'arrivent pas à résoudre.

Premièrement, j'ai une erreur d'exécution 1004 qui m'embête et que je n'arrive pas à corriger. Je vous met si le code peut-être trouverez-vous l'erreur mais j'ai beau chercher, je ne vois pas.

Private Sub CmdbuttonValider_Click()
um = Sheets("Recherche foncière").Range("B65536").End(xlUp).Row + 1
' pour aller à la premiere ligne vide
ActiveCell.EntireRow.Insert xlShiftDown
' pour ajouter une ligne en dessous

Sheets("Recherche foncière").Activate
Range("C" & num).Value = Txtcommune
Range("D" & num).Value = Txtadresse
Range("E" & num).Value = CbbAffectation
Range("F" & num).Value = CBBpréexistante
Range("G" & num).Value = TxtPLQ
Range("H" & num).Value = Txtproduit
Range("I" & num).Value = Txtnumparcelle
Range("J" & num).Value = Txtsurface
Range("K" & num).Value = Txtpotentiel
Range("L" & num).Value = Txtactions
Range("M" & num).Value = Txtpersonnedossier
If OptionButton1.Value = True Then Range("B" & num) = ("Court terme")
If OptionButton2.Value = True Then Range("B" & num) = ("Moyen terme")
If OptionButton3.Value = True Then Range("B" & num) = ("Long terme")

Deuxièmement, j'ai 3 boutons d'options :

  • court terme
  • moyen terme
  • long terme

J'aimerais qu'en fonction de ce qui est coché, en colonne "B", il s'écrive ce qui est coché.

Voilà, j'espère que vous saurez m'aider.

Merci d'avance.

Bonjour,

Tout est bon, sauf...

La déclaration de ta variable.

Tu n'as :

  • pas indiqué Option Explicit en entête de module, sinon l'erreur aurait été détectée de suite,
  • pas déclaré ta variable num.
  • tu as mal écrit la première fois num...
remplaces donc :
um = Sheets("Recherche foncière").Range("B65536").End(xlUp).Row + 1

pas :

Dim num As Long
Sheets("Recherche foncière").Activate 'à placer de préférence avant...
num = Sheets("Recherche foncière").Range("B65536").End(xlUp).Row + 1

et tout va dérouler, y compris ta seconde question avec tes OptionButton.

Tant que tu y es, cette ligne n'est pas utile, sauf si tu as des formules dans d'autres colonnes :

ActiveCell.EntireRow.Insert xlShiftDown

Supprimes la donc.

Mais quel c** j'ai passé 30 min dessus sans voir le premier "um"

Qu'est ce que : Option Explicit en entête de module, sinon l'erreur aurait été détectée de suite ? J'ai juste à écrire Option explicit tout en haut pour me dire où se situe mon erreur ?

ActiveCell.EntireRow.Insert xlShiftDown

Il n'est nécessaire que si j'ai des éléments écrits en B10 par exemple et que je souhaite décaler cela vers le bas sans jamais le recouvrir par mes nouvelles données c'est ça ?

A quoi sert le :

Dim num As Long

Merci pour votre réponse

A lire :

https://www.excel-pratique.com/fr/vba/variables.php

note : il est possible de forcer les déclarations de variables en plaçant Option Explicit tout au début du module (une erreur sera ainsi générée en cas d'oubli de déclaration).

Cela devrait répondre à toutes tes questions.

ActiveCell.EntireRow.Insert xlShiftDown

Insère une ligne sous la cellule active.

Ici totalement inutile car tu stockes, dans ta variable num, le numéro de la première ligne vide grâce à :

num = Sheets("Recherche foncière").Range("B65536").End(xlUp).Row + 1

Je profite de ce post pour poser une dernière question :

Comment faire pour transformer cela en valeur numérique (pour ensuite pouvoir utiliser des formules ? )

Range("J" & num).Value = Txtsurface
Range("K" & num).Value = Txtpotentiel

Merci beaucoup pour votre aide et pour vos explications

Bonjour,

Pour transformer des valeurs numériques de String en nombres utilisables par des formules, il faut utiliser une des fonctions de conversion suivantes :

Nombres entiers : CInt(TextBox1)

Nombres décimaux : CDbl(monText)

Et ne pas oublier le cas d'une mauvaise saisie de séparateur décimal (point au lieu de la virgule) :

Replace(monTextBox, ".", ",")

D'ou : CDbl(Replace(texte, ".", ","))

D'accord je comprends le raisonnement.

Par contre, où dois-je mettre

CDbl(Replace(texte, ".", ","))

A la suite de mon

Range("J" & num).Value = Txtsurface
Range("K" & num).Value = Txtpotentiel

? Juste après mon Sub ?

Merci

Oula...

Non!

Range("J" & num).Value = CDbl(Replace(Txtsurface, ".", ","))
Range("K" & num).Value = CDbl(Replace(Txtpotentiel, ".", ","))

devrait te convenir...

Effectivement, cela fonctionne parfaitement. Par contre, maintenant un autre soucis apparaît.

Si je ne remplis pas la case correspondant à Txtpotentiel, une erreur s'affiche plutôt que de laisser la cellule vide.

Erreur d'exécution '13' : incomparabilité de type.

Désolé pour niveau déplorable.

Si rien n'est inscrit, il te faut tester avant.

Sinon, le textbox retourne une chaine de caractère vide : "". Or ce string "vide" ne peut pas être converti en nombre par CDbl.

Donc teste si le textbox est vide ( = "")...

Par exemple :

Range("J" & num).Value = IIf(Txtsurface = "", 0, CDbl(Replace(Txtsurface, ".", ",")))
Range("K" & num).Value = IIf(Txtpotentiel = "", 0, CDbl(Replace(Txtpotentiel, ".", ",")))

Même avec

IIf(Txtsyrface = "", 0, ...

l'erreur '13' est toujours présente.

Range("J" & num).Value = IIf(Txtsurface = "", 0, CDbl(Replace(Txtsurface, ".", ",")))
Range("K" & num).Value = IIf(Txtpotentiel = "", 0, CDbl(Replace(Txtpotentiel, ".", ",")))

Malgré ce code, j'ai toujours le même problème. Je ne trouve pas de solution à ce problème.

Bonjour,

As tu essayé un test simple If :

If Txtsurface = "" Then
   Range("J" & num).Value = 0
Else
   Range("J" & num).Value = CDbl(Replace(Txtsurface, ".", ","))
End If

Magnifique cela fonctionne.

Merci de votre réactivité et de votre efficacité.

Rechercher des sujets similaires à "erreur format textbox"