Demande aide sur la compréhension d’une fonction

Résolu/Fermé
mijean94 Messages postés 413 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 12 septembre 2024 - 24 nov. 2016 à 10:24
mijean94 Messages postés 413 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 12 septembre 2024 - 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
A voir également:

1 réponse

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 236
24 nov. 2016 à 15:24
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
0
mijean94 Messages postés 413 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 12 septembre 2024 11
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
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 236
Modifié par eriiic le 25/11/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
0
mijean94 Messages postés 413 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 12 septembre 2024 11 > eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024
25 nov. 2016 à 21:30
Bonjour,

Merci pour toutes les explications.
ça remarque correctement.

Bien cordialement
0