Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de Function

4 réponses
Avatar
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

4 réponses

Avatar
Geo
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+
Avatar
michdenis
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" a écrit dans le message de groupe de
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
Avatar
Jocelyne
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
Avatar
Geo
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+