XL 2010 Affichage TextBox au premier plan

JM27

XLDnaute Barbatruc
Bonjour
Comment faire pour afficher la textbox au premier plan , sans toucher au positionnement de celle ci par rapport à la listbox et en gardant la list box affichée
je souhaiterai la voir au dessus de la list box
merci de votre aide
 

Pièces jointes

  • Classeur1.xlsm
    22.2 KB · Affichages: 27

patricktoulon

XLDnaute Barbatruc
comme ca vite fait en 2 seconde avec des calcul un peu erronés mais le principe y est
le controltiptext garde la selection ligne colonne
il te faudra faire des calculs plus rigoureux quand meme j'ai fait ca en 2 secondes

demo3.gif


VB:
Dim rng
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If X > rng.Cells(1).Width Then col = 2 Else col = 1
With ListBox1
ListBox1.ControlTipText = "vous etes dans la cellule " & Cells(Round(Y / 10) + 1, col).Address
End With

End Sub

Private Sub UserForm_Activate()
Set rng = [A1:B10]
ListBox1.List = rng.Value
ListBox1.ColumnCount = 3
For i = 1 To rng.Columns.Count
blabla = blabla & rng.Columns(i).Width & IIf(i < rng.Columns.Count, ";", "")
Next
ListBox1.ColumnWidths = blabla
End Sub
c'est vraiment vite fait soit plus précis quand même
tu peux calculer la hauteur de ligne simplement avec un label autosize avec le même fontsize que la listbox
 

patricktoulon

XLDnaute Barbatruc
re
ben même sans calcul
VB:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If X > rng.Cells(1).Width Then col = 2 Else col = 1
With ListBox1
H = Label1.Height
If .ListIndex = 0 Then z = 0 Else z = 1
ListBox1.ControlTipText = "vous etes dans la cellule " & Cells(.ListIndex + 1, col).Address
End With

End Sub

Private Sub UserForm_Activate()
Set rng = [A1:B10]
Label1.Font.Size = ListBox1.Font.Size
ListBox1.List = rng.Value
ListBox1.ColumnCount = 3
For i = 1 To rng.Columns.Count
blabla = blabla & rng.Columns(i).Width & IIf(i < rng.Columns.Count, ";", "")
Next
ListBox1.ColumnWidths = blabla
End Sub
a chaque fois que tu repasse sur la listbox ça te donne la sélection ; que j'ai fait correspondre pour l'exemple a la range source mais tu peux mettre ce que tu veux en fonction de l'index de ligne et de "col" (l'index colonne dans la listbox) et des que tu change le controltip text aussi
seul inconvénient il faut sortir et revenir avec la souris pour le voir apparaître
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Voyez le fichier joint et cette solution vraiment très classique :
VB:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim v As Variant
With ListBox1
    v = Application.InputBox("Entrez la nouvelle valeur :", "Modifier", .List(.ListIndex), Type:=2)
    If v = False Or v = "" Then Exit Sub
    Sheets("Feuil1").Cells(.ListIndex + 1, 1) = v
End With
UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
ListBox1.List = Sheets("Feuil1").[A1].CurrentRegion.Resize(, 2).Value 'au moins 2 éléments
End Sub
A+
 

Pièces jointes

  • Classeur(1).xlsm
    24.6 KB · Affichages: 20

patricktoulon

XLDnaute Barbatruc
Bonjour BOISGONTIER,job75 et les autres
une idée comme ça en passant ;) pour boisgontiers
evaluate te permet de créer ton tablo non contiguë je pense pas avoir besoins de te le rappeler
@BOISGONTIER
je t'ai suivi pour le selectionmargin(8) non dispo dans listbox
je verrais plutôt 6 qui serais plus proche de la réalité
sauf que ça n'est correcte qu'en textalign=left
donc pour palier a ça il y a une condition sur la propriété textalign
et j'en ai profité pour y ajouter une partie de ma méthode qui consiste a mettre des séparateurs colonnes à l'aide de ctrl listbox disabled qui restent visibles sur une autre listbox
résultat visuel
1589040600528.png


VB:
Option Compare Text
Dim f, TblBD, ColVisu(), NbCol, arrayColHead(), TblNoncontiG


Private Sub UserForm_Initialize()
    Set f = Sheets("BD")
    Set Rng = f.Range("A2:P" & f.[A65000].End(xlUp).Row)
    TblBD = Rng.Value    ' rapidité
    arrayColHead = Array(1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15)    ' Colonnes à visualiser (adapter)
       TblNoncontiG = Application.Index(TblBD, Evaluate("ROW(" & 1 & ":" & Rng.Rows.Count & ")"), arrayColHead)
   ReDim ColVisu(2, UBound(arrayColHead))
    For i = 0 To UBound(arrayColHead)
        ColVisu(0, i) = Rng.Cells(1, arrayColHead(i)).Offset(-1).Text
        ColVisu(1, i) = Rng.Cells(1, arrayColHead(i)).Width
    Next
   ' MsgBox "les entetes " & vbCrLf & Join(WorksheetFunction.Index(ColVisu, 1, 0), ";")
    'MsgBox " le columnwidth " & vbCrLf & Join(WorksheetFunction.Index(ColVisu, 2, 0), ";")

    With ListBox1
        .List = TblNoncontiG
        .ColumnCount = UBound(arrayColHead) + 1
        .ColumnWidths = Join(WorksheetFunction.Index(ColVisu, 2, 0), ";")
    End With
    EnteteListBox ColVisu, ListBox1, True
End Sub



Sub EnteteListBox(TBL, LtBX, Optional separateurV As Boolean = False)
    Dim X#, C&, ec#
    X = LtBX.Left
    ec = IIf(LtBX.TextAlign = 1, 6, 4)    'selectionmargin non dispo dans listbox
    For C = 0 To UBound(TBL, 2)
        With Me.Controls.Add("Forms.Label.1", , True)
            .Left = X: .Height = 12: .Top = LtBX.Top - .Height + 2: .Width = TBL(1, C) + IIf(C = 0, ec, 0)
            .BorderStyle = 1: .TextAlign = LtBX.TextAlign
        'If C = UBound(TBL, 2) Then .Width = LtBX.Width + 10 - X
        .Caption = TBL(0, C)
        End With
        'separateurs colonnes
        If C > 0 And separateurV Then
            With Me.Controls.Add("Forms.ListBox.1", "Sep0" & C, True)
                .Top = LtBX.Top: .Left = X - 1: .Height = LtBX.Height: .Width = 1
                .Enabled = False
                .BorderStyle = 0: .BorderColor = vbBlack    'RGB(200, 200, 200)
            End With
        End If
        X = X + TBL(1, C) + IIf(C = 0, ec, 0)
    Next
End Sub
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
finalement la création des entêtes avec labels n'est pas la plus simple
une idée toute simple m'ai venu mais vraiment toute simple
pourquoi utiliser des labels ,calculer leur position, leur taille etc....
alors qu'avec une simple listbox de 1 ligne clonant les propriété de la liste (columnwidths,etc..)
et la mettre enabled à false
avec pour liste la ligne d'entête: une couleur différente pour la distinguer et voila le tour est joué pas de calcul
ci joint les 3 modèles
résultat avec une listbox et mes séparateurs
Capture.JPG
 

Pièces jointes

  • ListBox ColonneNonContigue.xlsm
    54.1 KB · Affichages: 8

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 205
Membres
103 157
dernier inscrit
youma