VBA Range("Tableau1[#Headers]").Cells(, i)

Regueiro

XLDnaute Impliqué
Bonsoir à Tous
J'ai un petit problème.
J'aimerais sélectionner les cellules 2 à 4 de mon tableau.
Auriez vous une solution.

Code:
Sub Macro2()
   For i = 2 To 4 Step 1
    'Range("Tableau1[#Headers]").Columns(2 & "," & i).Select
    Range("Tableau1[#Headers]").Cells(, i).Select
    Selection.Font.Italic = True
    Next i
End Sub

Pour ensuite l'adapter à une autre macro.

Code:
Sub CréerLabel()
'Alimentation des Labels du USF ( F_BDD)
Dim Ctrl As Control
Dim USF As UserForm
Dim i As Integer
Dim nbcol
Set Plage = Range("Tableau1[#Headers]")

nbcol = Range("Tableau1").Columns.Count
Set USF = F_BDD.MultiPage1.Pages(1).Frame2
    For Each Ctrl In USF.Controls
    If TypeOf Ctrl Is MSForms.Label Then
          For i = 1 To USF.Controls.Count
            Ctrl.Caption = Plage.Columns(i + 1).Value
    '.Caption = Plage.Columns(i).Value
            Next i
    End If
    
    'MsgBox Ctrl.Name & " " & TypeName(Ctrl)
    Next


End Sub

Meri d'avance
A+
 

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Re
Pour mon 1er problème c'est résolu

Code:
    Range("Tableau1[#Headers]").Columns(i).Font.Italic = True
Je pense qu'il n'aime pas les select.

Maintenant le 2ème problème :confused:

Bonne soirée à demain
 

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Bonsoir à Tous
Je suis à bout touchant, mais toujours un problème.
Je n'arrive pas à alimenter mes Labels avec la caption des titres.
Quelqu'un aurait-il une idée.
Je ne peux actuellement pas vous mettre de fichier joint :

Code:
Private Sub UserForm_Initialize()
Dim lstObj As ListObject
Dim Plage As Range
Dim PlageTitre As Range
Dim NumCol As Long
Dim i
Dim nbcol
Dim Ctrl As Control
'xxx DECLARATION DES VARIABLES xxxxxxxxxxxxxxx
    Set lstObj = Worksheets("BD Client").ListObjects("Tableau1")
    nbcol = lstObj.ListColumns.Count
    
    MsgBox nbcol
    Set Plage = lstObj.DataBodyRange
    'Set PlageTitre = lstObj.HeaderRowRange
    MsgBox Plage.Address
    'MsgBox PlageTitre.Address
   'MsgBox PlageTitre.Columns(2).Value
   
    
'xxxxxxxx ALIMENTATION DES LABELS DES MULTIPLAGES
    With Me.MultiPage1.Pages(1).Frame2
        'With Me.Frame2
    
        'For Each Ctrl In Frame2.Controls
      
        For i = 1 To Frame2.Controls.Count
        NumCol = i
        
'MsgBox Me.Frame2.Controls.Count
MsgBox NumCol

                Me.Controls("Label" & i).Caption = lstObj.HeaderRowRange.Columns(NumCol).Value
                
                
  Next i
'Next Ctrl

        End With
Merci de votre aide
 

Hervé

XLDnaute Barbatruc
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

salut :)

un exemple en pièce jointe pour peut être t'aider.

a plus

édition :

un autre exemple de boucle peut etre plus adapté à ta demande :

Code:
For i = 2 To lstObj.HeaderRowRange.Count
    Me.MultiPage1.Pages(1).Controls("Label" & i) = lstObj.HeaderRowRange.Item(i)
Next i
 

Pièces jointes

  • Classeur1.xls
    46.5 KB · Affichages: 141
  • Classeur1.xls
    46.5 KB · Affichages: 147
  • Classeur1.xls
    46.5 KB · Affichages: 163
Dernière édition:

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Re Bonjour
Enfin trouver le Code à Ma convenance.
Merci de ton aide

Code:
Private Sub UserForm_Initialize()
Dim lstObj As ListObject
Dim i As Byte
Dim c As Range
Dim X
Dim Ctrl As Control
Set lstObj = Worksheets("feuil1").ListObjects("Tableau1")
For X = 1 To Me.Frame1.Controls.Count
MsgBox X
Me.Frame1.Controls("Label" & X) = lstObj.HeaderRowRange.Cells(X).Value
Next X

'XX Boucle pour remplir X Labels selon Nbre de Cellules de la plage titre
'For Each c In lstObj.HeaderRowRange
 '   i = i + 1
  '  Me.MultiPage1.Pages(1).Controls("Label" & i) = c
'Next c
'XXX
End Sub
 

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

OUPS
Avec le fichier joint :

Sur l'onglet page d'accueil, bouton bleu formulaire
Sur le multipage INFORMATIONS GENERALES
Les 9 Labels doivent être alimentées par les 9 premières données du HEADERS
Bonne soirée
Merci de votre Aide
 

Pièces jointes

  • Modif_BDD_USF_travaux-bd-test V03.xlsm
    88.9 KB · Affichages: 100

Paf

XLDnaute Barbatruc
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

bonjour,

sur excel 2003 ça ne marche pas non plus parce que:

Code:
For X = 1 To Me.Frame2.Controls.Count
nous donne pour 1 à 9

Code:
Me("Label" & X).Caption
nous donnera donc Label1, Label2, Label3 ...

Or les labels concernées sont nommés Label100, Label101, Label102 ...

solution: modifier Me("Label" & X).Caption en Me("Label" & X+99).Caption

pas eu le temps de voir la suite .

Bonne journée
 

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Bonjour à Tous
Paf merci pour ton aide c'est parfait.
J'ai encore un petit problème pour alimenter les textbox de la multipage 2.
Lorsque je double-click sur mon listBox il se positionne sur la Multipage 2.
Et les Textbox doivent alimenter.
Mais j'ai un décalage d'une colonne ?
Cela doit être un problème de listIndex mais je ne maitrise pas?
Merci de votre Aide.

Code:
Dim lstObj As ListObject
Dim Plage As Range
Dim X, Y
Dim nbcol
Dim Ctrl As Control
Private Sub UserForm_Initialize()
'xxx DECLARATION DES VARIABLES xxxxxxxxxxxxxxx
Set lstObj = Worksheets("BD Client").ListObjects("Tableau1")
nbcol = lstObj.HeaderRowRange.Count
MsgBox nbcol
Set Plage = lstObj.DataBodyRange

'xxxxxxxx ALIMENTATION DES LABELS DES MULTIPLAGES xxxxxxxxxxxxx
    With Me.Frame2
    Dim a, b, c, d
    a = 10    'Position Leff
    b = 100     'largeur Width
    c = 25      'Hauteur Height
    d = 5       'Position Top
        
        For X = 1 To Me.Frame2.Controls.Count
            'Me("Label" & X + 99).Caption = lstObj.HeaderRowRange.Cells(X)                  'Code OK
            'Me("Label" & X + 99).Caption = lstObj.HeaderRowRange.Columns(X).Value  'Code Ok
            With Me("Label" & X + 99)
                .Caption = lstObj.HeaderRowRange.Columns(X).Value
                .Left = a
                .Width = b
                .Height = c
                .Top = d
                .ForeColor = vbRed
            d = d + 30      'Décalage pour le positionnement du prochain Label
            End With
        Next X
    End With
    
            For Y = 1 To Me.Frame2.Controls.Count Step 2
                With Me("Label" & Y + 99)
                    .ForeColor = vbWhite
                End With
            Next Y
            
'xxxxxxxx ALIMENTATION DES TextBox DES MULTIPLAGES xxxxxxxxxxxxx
With Me.Frame3
    a = 1     'Position Leff
    b = 150  'largeur Width
    c = 25      'Hauteur Height
    d = 5       'Position Top
    For X = 1 To Me.Frame3.Controls.Count
          'MsgBox X
          With Me("TextBox" & X)
            .Left = a
            .Width = b
            .Height = c
            .Top = d
                d = d + 30      'Décalage pour le positionnement du prochain TextBox
            End With
    Next X
End With

'xxx ALIMENTATION DU LISTBOX xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    With Me.ListBox1
        .Clear
        .ColumnCount = nbcol
        .AddItem
        .List = Plage.Value
            For i = 1 To nbcol
                temp = temp & Plage.Columns(i).Width * 0.9 & ";"
            Next
        .ColumnWidths = temp
    End With

Me.MultiPage1.Value = 0

With Me.Frame1
.Caption = " F O R M U L A I R E   D E   R E C H E R C H E "
End With

With Me.Label1
Set Plage = Range("Tableau1[Code client]")
Reponse = Application.WorksheetFunction.Max(Plage)
.Caption = Format(Reponse, "00000")
.ForeColor = 3
End With

Dim Cel As Range
   Set mondico = CreateObject("Scripting.Dictionary")
    For Each Cel In Range("Tableau1[Type Client]")
     If Not mondico.Exists(Cel.Value) Then mondico.Add Cel.Value, Cel.Value
   Next Cel
   Me.ComboBox1.AddItem "*"
   For Each i In mondico.Items
     Me.ComboBox1.AddItem i
   Next
   Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Me.MultiPage1.Value = 1     'Pour acceder la page 2 du multipages
    'With Me.Frame3
        ligne = Me.ListBox1.ListIndex + 2
        'MsgBox Me.ListBox1.ListCount

        'MsgBox Me.ListBox1.ColumnCount
        For X = 1 To Me.Frame3.Controls.Count
       ' Me ("TextBox" & X).Cancel
       
       Me("TextBox" & X).Value = Me.ListBox1.List(ligne, X)
        Next X
End Sub
Private Sub Image1_Click()
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    'Interdit la fermeture de l'USF avec la crois
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        Me.Caption = "Click the CommandButton to close Me!"
    End If
    MsgBox "Vous devez appuyer sur le bouton Close sur la 1ère page"
End Sub
A+
 

Pièces jointes

  • Modif_BDD_USF_travaux-bd-test V05.xlsm
    68.9 KB · Affichages: 129
  • Modif_BDD_USF_travaux-bd-test V05.xlsm
    68.9 KB · Affichages: 149
  • Modif_BDD_USF_travaux-bd-test V05.xlsm
    68.9 KB · Affichages: 163

Paf

XLDnaute Barbatruc
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Re Bonjour,

Vous voulez répartir les différentes colonnes de la ligne de listbox sélectionnée par double clic dans les textbox


Si vous sélectionnez, par double clic, la première ligne de la listbox (son ListBox1.ListIndex vaut 0)
puis vous "copiez" dans des textbox les données de la ligne dont l'indice est 0 + 2


vous ne transférez donc pas les données de la lignes sélectionnée , puisque l'indice a changé !

il faut, soit modifier le contenu de la variable ligne en:
Code:
ligne = Me.ListBox1.ListIndex

soit modifier l'indice lors de la copie dans les textbox :
Code:
Me("TextBox" & X).Value = Me.ListBox1.List(Me.ListBox1.ListIndex , X)

Bon courage
 

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Re Bonsoir
Merci pour les INFOS.
Malheureusement les 2 codes de fonctionnent pas.

1 code :
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ligne = Me.ListBox1.ListIndex
Me.MultiPage1.Value = 1 'Pour acceder la page 2 du multipages
For X = 1 To Me.Frame3.Controls.Count
Me("TextBox" & X).Value = Me.ListBox1.List(ligne, X)
Next X
End Sub

2 code :
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

Me.MultiPage1.Value = 1 'Pour acceder la page 2 du multipages
For X = 1 To Me.Frame3.Controls.Count


'Me("TextBox" & X).Value = Me.ListBox1.List(Me.ListBox1.ListIndex, X)

Next X
End Sub
Voir sur l'image ci-dessous :
Les informations dans les TextBox sont décalées?
La première TextBox devrait Le code client

Capture200.jpg
Merci
A1
 

Regueiro

XLDnaute Impliqué
Re : VBA Range("Tableau1[#Headers]").Cells(, i)

Rebonsoir
Il fallait juste rajouter x - 1 étant que la première colonne du ListBox = 0

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Ligne = Me.ListBox1.ListIndex
Me.MultiPage1.Value = 1 'Pour acceder la page 2 du multipages
For X = 1 To Me.Frame3.Controls.Count
Me("TextBox" & X).Value = Me.ListBox1.List(Ligne, X - 1)
Next X
End Sub
Bonne soirée
A+
 

Discussions similaires

Réponses
29
Affichages
944
Réponses
11
Affichages
297

Statistiques des forums

Discussions
312 270
Messages
2 086 678
Membres
103 370
dernier inscrit
pasval