VBA convnumberletter utilisat° variable/nbre

Fermé
Christine 78 - 25 mai 2012 à 23:30
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 - 25 mai 2012 à 23:49
Bonjour,

Après avoir télécharger la macro complémentaire "nBLETTRE;XLA", J'essaye en vain d'utiliser la fontion CONVNUMBERLETTER avec une variable pour définir le nombre choisi par l'utilisateur qui peut varier d'une feuille à l'autre et je me heurte invariablement au message d'erreur #VALEUR? :


Sub NBletters()
'
'NBletters Macro
' Macro enregistrée le 24/05/2012 par DRHEP/DGP/CD
'

Dim CEL_CHIF As Range

Set CEL_CHIF = Nothing
On Error Resume Next
Set CEL_CHIF = Application.InputBox("SELECTIONNER LA CELLULE CONTENANT DES CHIFFRES", "CELLULE CHIFFRES", Type:=8)
If CEL_CHIF Is Nothing Then
MsgBox ("Opération annulée")
On Error GoTo 0: Exit Sub
Else
CEL_CHIF.Select
End If
MsgBox (CEL_CHIF.Address)'A masquer pour l'utilisateur

'Dim i As String 'n° de ligne
'Dim l As String 'n° de colonne

'i = ActiveCell.Row
'l = ActiveCell.Column

MsgBox (i)n'A masquer pour l'utilisateur
MsgBox (l)'A masquer pour l'utilisateur

Dim Nombre As Single
Nombre = ActiveCell.Value
MsgBox (Nombre)'A masquer pour l'utilisateur

Dim CEL_LET As Range
Set CEL_LET = Nothing
On Error Resume Next
Set CEL_LET = Application.InputBox("SELECTIONNER LA CELLULE QUI DOIT CONTENIR LA CONVERSION EN LETTRES", "CONVERSION CHIFFRES EN LETTRES 2ème étape", Type:=8)
If CEL_LET Is Nothing Then
MsgBox ("Opération annulée")
On Error GoTo 0: Exit Sub
Else
CEL_LET.Select
End If
ActiveCell.FormulaR1C1 = "=ConvNumberLetter(Nombre,1,0)"
'ActiveCell.FormulaR1C1 = "=ConvNumberLetter((Nombre),1,0,1,1)"'tous les arguments

ActiveCell.Offset(0, 0).Select

End Sub

J'ai également essayé avec la référence de la cellule choisie par l'utilisateur en valeur absolue dans la formule de conversion et cela ne marche pas non plus :

'Dim i As String 'n° de ligne
'Dim l As String 'n° de colonne

'i = ActiveCell.Row
'l = ActiveCell.Column

'MsgBox (i)
'MsgBox (l)

ActiveCell.FormulaR1C1 = "=ConvNumberLetter(R&iC&l,1,0)"




Je vous remercie à l'avance de la solution que vous pourrez m'apporter à ce problème.

Par ailleurs, est il possible après que cette macro fonctionnera, de mettre à la disposition des d'utilisateurs (plus que néophytes) un package qui permettrait dans un premier temps pour l'utilsation de pour la première fois, de télécharger la macro supplémentaire en exécutable auto et de ensuite pour chaque utilisation future d'utiliser la macro de conversion sans avoir à demander si la macro complémentaire a bien été installée et de créer un une icône directement dans le menu de leur poste de travail sans avoir à le faire manuellement pour chaque PC avant la première utilsation.

J'epère que j'ai été suffisamment claire pour exposer l'ensemble de mes problèmes, et je vous remercie encore de l'aide et des astuces que que vous pourrez me donner.


Très cordialement
cHRISTINE

1 réponse

eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 8 mai 2024 7 216
Modifié par eriiic le 26/05/2012 à 00:00
Bonsoir,

Le plus souvent si tu as #valeur! c'est que tu lui passes une chaine au lieu d'un nombre (ou vice-versa) en paramètre.
Plus généralement que le type de la variable n'est pas approprié.

Dim Nombre As Single
Single va de 0 à 255. Vraiment suffisant ?
La fonction attend peut-être un Double..

Comme tu écris la fonction dans une cellule pourquoi ne pas mettre la référence plutôt que Nombre ?
Ca donnerait qcq chose comme :
ActiveCell.FormulaR1C1 = "=ConvNumberLetter(activecell.address,1,0)"

Et evite les .select inutiles
CEL_LET.Select
ActiveCell.FormulaR1C1 = "=ConvNumberLetter(Nombre,1,0)"
devient :
CEL_LET.FormulaR1C1 = "=ConvNumberLetter(Nombre,1,0)"

eric
0