Signaler

Demande aide sur la compréhension d’une fonction [Résolu]

Posez votre question mijean94 305Messages postés mercredi 16 décembre 2015Date d'inscription 5 décembre 2016 Dernière intervention - Dernière réponse le 25 nov. 2016 à 21:30
Bonjour,

Je n’arrive pas à comprendre le fonctionnement du code si dessous et donc de pouvoir trouver un remède, car lorsque j’utilise ma variable l_nblig dans une autre procédure, elle est à 0 et donc ma procédure ne fonctionne pas.

Je m’explique,

Je lance ma procédure, le code si dessous,

Tous se passe bien, mais la séquence se termine presque toujours après le code SET même si je supprime la ligne On Error GoTo fin et fin : ?

Donc les lignes l_nblig = Int(PixH) et l_nbcol = Int(PixW) ne sont pas exécutées ?

Procédure dans module 1,

Option Explicit
'*** ajout 2015 ****

Public seuil_Luminance As Long
Public l_nblig As Long, l_nbcol As Long


Procédure dans module 2,

Function GetPointsImage(Ctrl As MSForms.Control, Quadrillage As Boolean) As Range

Dim col&, Lgn&
Dim cHDC&, PixW!, PixH!
Dim Tabl() As Long

On Error GoTo fin

cHDC = DCCtrl(Ctrl)
With Ctrl
PixW = PointsToPixels(.Width)
PixH = PointsToPixels(.Height)
End With

ReDim Tabl(1 To Int(PixH), 1 To Int(PixW))
For Lgn = 1 To UBound(Tabl)
For col = 1 To UBound(Tabl, 2)
Tabl(Lgn, col) = GetPixel(cHDC, col, Lgn)
Next col
Next Lgn

Set GetPointsImage = Tapisse(Tabl, Quadrillage)

'***ajout 2015***
l_nblig = Int(PixH)
l_nbcol = Int(PixW)
'***********
fin:

End Function


Merci de l'aide

Bien cordialement
Afficher la suite 
Utile
+0
moins plus
Bonjour,

déjà on ne met pas on error sans bonne raison.
Là c'est pour cacher la poussière sous le tapis...
Enlève Set qui n'est utilisé que pour initialiser un objet.
Ensuite si pb tu fais en pas à pas en contrôlant tes variables. Si une n'a pas la valeur attendue à cet instant tu réfléchis et cherches pourquoi.
eric
mijean94 305Messages postés mercredi 16 décembre 2015Date d'inscription 5 décembre 2016 Dernière intervention - 25 nov. 2016 à 10:47
Bonjour,

Mercie pour les remarques.

J’ai supprimé le SET mais ça ne fonctionne plus.

Dans le nom de mes macros j’avais un code qui faisait appel à un autre fichier qui n’existe plus sur mon PC, mais le même code est bien sur mon PC. J’ai rétabli la situation et c’est rentré dans l’ordre ???

Pour faire un pas à pas j’ai mis un stop dans mon code, puis je commande par le bouton pas à pas détaillé. Faut-il bien pratiqué comme cela ?

Bien cordialement
Répondre
eriiic 20007Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 6 décembre 2016 Dernière intervention - 25 nov. 2016 à 11:04
Bonjour,

j'avais lu un peu rapidement et pas fait attention que ta fonction était As Range.Le Set est donc justifié.

Pour faire un pas à pas j’ai mis un stop dans mon code, puis je commande par le bouton pas à pas détaillé. Faut-il bien pratiqué comme cela ?

oui, et contrôler le contenu de tes variables.
Tu te plains que l_nblig = 0,
or l_nblig = Int(PixH) et PixH est calculé ici :
    With Ctrl
PixW = PointsToPixels(.Width)
PixH = PointsToPixels(.Height)
End With

Il faut donc contrôler que Ctrl soit bien l'objet que tu attends, et voir la valeur sa propriété .Height et celle de sa conversion PointsToPixels(.Height)

Et si dans ton autre procédure tu as déclaré une autre variable l_nblig tu utiliseras celle-ci non initialisée à la place de Public l_nblig calculée
eric
Répondre
mijean94 305Messages postés mercredi 16 décembre 2015Date d'inscription 5 décembre 2016 Dernière intervention - 25 nov. 2016 à 21:30
Bonjour,

Merci pour toutes les explications.
ça remarque correctement.

Bien cordialement
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !