Problème de Function

Le
Jocelyne
Bonjour à tous,



Dans un document, j’ai différents emplacements marqués d’un signet pour l’inscription
de degrés par exemple, 10° ou 5°.



Pour chacun de ces signets, j’ai besoin de récupérer la valeur du degré et
la mettre dans une variable.



Alors, j’ai créé la procédure Function suivante car, si j’ai bien compris,
ce type de procédure sert à retourner une valeur.



Public Function RetourneDegre(Doc As String, S As String) As Long



Dim Degre As String

Dim SymbDeg As String

SymbDeg = Chr(176) '°



Degre = Documents(Doc).Bookmarks(S).Range.Text

Debug.Print Degre

Debug.Print SymbDeg

'Degre = Trim(Degre)

'Debug.Print Degre

Degre = Replace(Trim(Degre), SymbDeg, "") ' retourne la valeur sans les
espaces et le symbole de degré

Debug.Print Degre



End Function



Pour l’utiliser :

Sub TestDegre()

Dim NomDoc As String

NomDoc = ActiveDocument.Name

Dim deg

deg = RetourneDegre(NomDoc, "ChrgCalDegG")

Debug.Print "Le degré est " & deg



End Sub



Le problème est que la « function » retourne la valeur désirée mais pas
lorsque je l’appelle??? J’ai testé différents types pour la valeur de retour
du genre String, Integer, Variant, mais je n’ai rien en retour. Seul le type
Long me retourne 0???.



Si quelqu’un d’expertise pouvait m’éclairer pour m’aider à comprendre où est
l’erreur, j’en serais très ravie.



Merci

Jocelyne
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #21388101
Bonjour Jocelyne
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]

Alors, j’ai créé la procédure Function suivante car, si j’ai bien compris, ce type de
procédure sert à retourner une valeur.



Oui, mais il faut lui dire ce qu'elle doit retourner, c'est juste cela
qui manque.

Public Function RetourneDegre(Doc As String, S As String) As Long



Donc c'est une valeur entière que vous attendez, mais un Long c'est
peut-être exagéré :)

Sinon c'est tout bon sauf :
RetourneDegre = Replace(Trim(Degre), SymbDeg, "") ' retourne la valeur

Par prudence je ferais :
Dim NbDegré as string
NbDegré = Replace(Degre, SymbDeg, "")
If IsNumeric(NbDegré) then
RetourneDegre = val(nbdegré)
else
RetourneDegre = 0
debug.print "Erreur signet : " & S
endif

Pas testé.

--
A+
michdenis
Le #21388091
Bonjour,

Dans ta fonction,
Public Function RetourneDegre(Doc As String, S As String) As Long
tu as oublié cette ligne de code comme dernière :

Retourne = Degre



"Jocelyne" discussion : #0p$
Bonjour à tous,



Dans un document, j'ai différents emplacements marqués d'un signet pour l'inscription
de degrés par exemple, 10° ou 5°.



Pour chacun de ces signets, j'ai besoin de récupérer la valeur du degré et
la mettre dans une variable.



Alors, j'ai créé la procédure Function suivante car, si j'ai bien compris,
ce type de procédure sert à retourner une valeur.



Public Function RetourneDegre(Doc As String, S As String) As Long



Dim Degre As String

Dim SymbDeg As String

SymbDeg = Chr(176) '°



Degre = Documents(Doc).Bookmarks(S).Range.Text

Debug.Print Degre

Debug.Print SymbDeg

'Degre = Trim(Degre)

'Debug.Print Degre

Degre = Replace(Trim(Degre), SymbDeg, "") ' retourne la valeur sans les
espaces et le symbole de degré

Debug.Print Degre



End Function



Pour l'utiliser :

Sub TestDegre()

Dim NomDoc As String

NomDoc = ActiveDocument.Name

Dim deg

deg = RetourneDegre(NomDoc, "ChrgCalDegG")

Debug.Print "Le degré est " & deg



End Sub



Le problème est que la « function » retourne la valeur désirée mais pas
lorsque je l'appelle??? J'ai testé différents types pour la valeur de retour
du genre String, Integer, Variant, mais je n'ai rien en retour. Seul le type
Long me retourne 0???.



Si quelqu'un d'expertise pouvait m'éclairer pour m'aider à comprendre où est
l'erreur, j'en serais très ravie.



Merci

Jocelyne
Jocelyne
Le #21388801
WOW! Un pas de plus dans mon apprentissage.



Je n'avais pas réalisé que la fonction elle-même était une variable. Je me
demandais comment arriver à la mettre dedans.


Donc c'est une valeur entière que vous attendez, mais un Long c'est
peut-être exagéré :)



Il me semblait aussi que ce n'était pas le bon type mais c'était le seul qui
me retournait une valeur :)

RetourneDegre = Replace(Trim(Degre), SymbDeg, "") ' retourne la valeur

Par prudence je ferais :
Dim NbDegré as string
NbDegré = Replace(Degre, SymbDeg, "")
If IsNumeric(NbDegré) then
RetourneDegre = val(nbdegré)
else
RetourneDegre = 0
debug.print "Erreur signet : " & S
endif

Pas testé.



Je l'ai testé et tout fonctionne à merveille. Juste une petite question,
est-ce je dois retirer la ligne
Degre = Replace(Trim(Degre), SymbDeg, "") de mon code? Votre code semble
enlever les espaces en même temps que le symbole de degré???

Merci encore une fois de votre généreuse participation à mon développement.
Ce n'est pas toujours facile l'apprentissage par soi-même mais heureusement
que vous êtes là.


Jocelyne
Geo
Le #21389661
Bonjour

est-ce je dois retirer la ligne
Degre = Replace(Trim(Degre), SymbDeg, "") de mon code?



Oui, c'est la même chose.
En fait j'ai enlevé le Trim car vba n'en tiendra pas compte en
convertissant le texte numérique en valeur numérique.
La fonction val est ici inutile, mais je trouve qu'elle permet
d'attirer l'attention sur le fait qu'on passe de caractères vers une
valeur.

Merci encore une fois de votre généreuse participation à mon développement. Ce n'est
pas toujours facile l'apprentissage par soi-même mais heureusement que vous êtes là.



J'ai appris comme ça aussi, c'est un juste retour des choses.

Bonne continuation.

--
A+
Publicité
Poster une réponse
Anonyme