XL 2016 Mystere avec une ListBox

rodger85

XLDnaute Nouveau
j'ai un Bug avec une ListBox dans un UserForm ou j'ai des chiffres de 120 à 500 par pas de 10 et la valeur lu par un TextBox (espion)ne correspond pas
a ma ListBox et cela sur 2 ligne sur 3 en fait une ligne sur 3 est bonne
il faut ouvrir le fichier pour bien comprendre
quand je suis sur les chiffre après les flêches
120 : 150 : 180 : 210 etc
la ligne de la listbox est active (bleu)
et les chiffres de la listbox correspond bien
à ma fenêtre Espion (Textbox1)
je fait valider et quand je rappel le UserForm
ma ligne de listbox est bien active (bleu)
mais sur tout les autres chiffres de la
listbox quand elle devienne active
la textbox (espion) voit soit 0,25 ou 0,75 en
plus du chiffre
et après validation et rappel du Userform
la macro plante si je ne met pas
"On Error Resume Next"
dans UserForm_Initialize()
et la ligne choisi n'est pas active
normal car elle n'appartient pas
à la listbox
c'est toujours par pas de trois ligne
1°) ligne OK (120)
2°) ligne 129,75 au lieu de 130
3°) ligne 140,25 au lieu de 140
4°) ligne OK 150
mystère ????
en elle même la macro marche
mais j'aimerais comprendre
j'ai essayé avec des arrondis up et down
et fiasco
la listbox est dans la colonne "Z"
mon affichage d'ordi est sur 100%
j'avais déjà eu des problème à cause de ça
Merci d'avance
 

Pièces jointes

  • test listebox-2.xlsm
    23.1 KB · Affichages: 7
Solution
re
bonjour
Ah!!... la conversion point to pixel et vice versa
tout un programme avec excel
;)
code du userform réécrit
VB:
Option Explicit


Private Sub UserForm_Activate()    'pour demarrage du userform
 Dim x&, tbl, Index, LfTX, ToPY, PtoPx#
   tbl = LBHauteur.List
    Range("C1").Select
 
 'position de l'userform toujours en A3.left et A3.top
 'quelque soit   le windowstate ou le zoom  ou la position de excel  à l'ecran
 With ActiveWindow
 PtoPx = (4 / 3)
 LfTX = .Panes(1).PointsToScreenPixelsX(0) / PtoPx
 ToPY = .Panes(1).PointsToScreenPixelsY([A3].Top) / PtoPx
 End With
 
 Me.Move LfTX, ToPY
      
  'arrondi ou superieur pour la reception du height du comm
    With Application
        x =...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Rodger,
Si vous modifiez votre code comme suit :
VB:
Private Sub LBHauteur_Click()
Dim i
For i = 0 To 50
    ActiveCell.Comment.Shape.Height = 120 + i / 10
    Cells(i + 2, "H") = 120 + i / 10
    Cells(i + 2, "I") = ActiveCell.Comment.Shape.Height
Next i
End Sub
Vous vous apercevrez que la dimension effective ne peut pas prendre toutes les valeurs, mais elle évolue pas step de 0.75 :
1675769390981.png

L'explication tient surement dans les unités employées entre les points, les pixels...
Je pense que quelqu'un de plus pointu que moi aura la réponse.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
Ah!!... la conversion point to pixel et vice versa
tout un programme avec excel
;)
code du userform réécrit
VB:
Option Explicit


Private Sub UserForm_Activate()    'pour demarrage du userform
 Dim x&, tbl, Index, LfTX, ToPY, PtoPx#
   tbl = LBHauteur.List
    Range("C1").Select
 
 'position de l'userform toujours en A3.left et A3.top
 'quelque soit   le windowstate ou le zoom  ou la position de excel  à l'ecran
 With ActiveWindow
 PtoPx = (4 / 3)
 LfTX = .Panes(1).PointsToScreenPixelsX(0) / PtoPx
 ToPY = .Panes(1).PointsToScreenPixelsY([A3].Top) / PtoPx
 End With
 
 Me.Move LfTX, ToPY
      
  'arrondi ou superieur pour la reception du height du comm
    With Application
        x = Round(CDbl(ActiveCell.Comment.Shape.Height), 0)
        If x < ActiveCell.Comment.Shape.Height - 1 Then x = x + 10
        Index = .IfError(.Match(x, Application.Transpose(tbl)), 0)
        If Index <> 0 Then
            LBHauteur.Value = x
            End If
    End With
End Sub


Private Sub LBHauteur_Click()
    ActiveCell.Comment.Shape.Height = LBHauteur.Value
      TextBox1.Value = LBHauteur.Value
End Sub
' je ne vois pas l'intérêt de deux boutons  MAIS BON!!! :)
Private Sub Valider_Click():  Unload Me: End Sub
Private Sub CommandButton1_Click(): Me.Hide: End Sub

Private Sub TextBox1_Change()    'juste pour espionnage
    'TextBox1.Value = ActiveCell.Comment.Shape.Height
End Sub

;)
 

rodger85

XLDnaute Nouveau
Bonjour
comme d'habitude réponse rapide
ça marche nickel, j'ai pu déplacer le UserForm et augmenter la listbox
à priori sans conséquence sur le fonctionnement de la macro parce-que tu avait marqué
'position de l'userform toujours en A3.left et A3.top

le EXIT et La Validation vous avez raison ils sont identiques mais ces plus psychologique
je vais transférer cela dans mon dans mon projet
j'ai eu ma réponse du pourquoi par
sylvanu
et une belle macro par vous
Merci encore
 

Discussions similaires

Réponses
16
Affichages
728
Réponses
25
Affichages
1 K
Réponses
18
Affichages
1 K

Statistiques des forums

Discussions
315 094
Messages
2 116 143
Membres
112 669
dernier inscrit
Guigui2502