XL 2019 Recopier mes feuilles dans mon USF

  • Initiateur de la discussion Initiateur de la discussion Phil Du59
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Phil Du59

XLDnaute Nouveau
Bonjour à tous
Je reviens vers vous pour améliorer mon tableau afin d’avoir une meilleure visibilité et de regrouper les données de mes feuilles sur mon USF , si tout est possible bien sur .
Pour entrer mes données je passe par NEW QSO

1° Dans la Listbox 1 , recopier la ligne de B2 à H2 de le feuille LOG .

2° Dans la Listbox 2 (le grand cadre) , recopier les entrées des colonnes B C D E F G et H de façon à voir toujours le dernier entré visible en bas , donc avec la liste qui monte au fur et à mesure (si c’est possible)

3° Dans la Listbox 3 (QSO N°) , recopier la case A2 de la feuille LOG

4° Dans la Listbox 4 (DXCC WORKED) , recopier la case L1 de la feuille STATS

5° Dans la Listbox 5 (celle en bas) , recopier de H2 à Q31 de la feuille STATS (par ordre croissant si possible)

Je pense n’avoir rien oublié dans mes demandes , en tout cas n’hésitez pas à demander si besoin , en fait tout ce que je rentre dans la partie haute de mon USF serait visible dans les ListBox pour avoir un aperçu global .

Par avance Merci , Philippe
 

Pièces jointes

Bonjour Phil, Oneida,
Un essai en PJ pour les deux premiers points, Remplir ListBox1 et 2, avec :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, DL%
UserForm1.ListBox1.Clear
UserForm1.ListBox1.List = Application.Transpose(Sheets("LOG").Range("B2:H2").Value)
DL = Cells(Cells.Rows.Count, "B").End(xlUp).Row
Set plage = Range("B3:H" & DL)
With UserForm1.ListBox2
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
Load UserForm1
UserForm1.Show
End Sub
Les autres questions peuvent être résolues avec la même approche.
 

Pièces jointes

Bonjour Phil, Oneida,
Un essai en PJ pour les deux premiers points, Remplir ListBox1 et 2, avec :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, DL%
UserForm1.ListBox1.Clear
UserForm1.ListBox1.List = Application.Transpose(Sheets("LOG").Range("B2:H2").Value)
DL = Cells(Cells.Rows.Count, "B").End(xlUp).Row
Set plage = Range("B3:H" & DL)
With UserForm1.ListBox2
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
Load UserForm1
UserForm1.Show
End Sub
Les autres questions peuvent être résolues avec la même approche.
Bonjour Sylvanu, je constate plusieurs bug : 1° La box 1 les mots sont l'un en dessous de l'autre mais je les voudrait aligné sur la largeur de la Box (autrement je mettrais une zone de texte) , 2° quand je rempli mon USF via NEW QSO rien ne s'affiche en direct il faut quitter puis rouvrir pour voir les entrées , 3° la colonne TIME se met au format 0,xxxx et pas en Heures et Minutes j'avais déjà vu comment faire mais .....
Philippe
 
Re,
1° La box 1 les mots sont l'un en dessous de l'autre mais je les voudrait aligné sur la largeur de la Box
C'était peu explicite. Alors :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, DL%
Set plage = Range("B2:H2")
With UserForm1.ListBox1
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
DL = Cells(Cells.Rows.Count, "B").End(xlUp).Row
Set plage = Range("B3:H" & DL)
With UserForm1.ListBox2
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
Load UserForm1
UserForm1.Show
End Sub
2° quand je rempli mon USF via NEW QSO rien ne s'affiche en direct il faut quitter puis rouvrir pour voir les entrées
Pas compris. Lorsque j'appuie sur NewQso, chez moi, l'usf s'ouvre correctement avec les listbox remplies.
3° la colonne TIME se met au format 0,xxxx et pas en Heures et Minutes
Votre fichier étant vierge, comment peux t-on savoir dans quel format afficher les données. Cela frôle la plaisanterie. 😅
 
Re,
Pour le format horaire :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, DL%, i%
Set plage = Range("B2:H2")
With UserForm1.ListBox1
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
DL = Cells(Cells.Rows.Count, "B").End(xlUp).Row
Set plage = Range("B3:H" & DL)
With UserForm1.ListBox2
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
    For i = 1 To plage.Rows.Count
        .AddItem plage.Cells(i, 5).Text
        .List(i - 1, 4) = Format(CDbl(plage.Cells(i, 5).Value), "hh:mm")
    Next i
End With
Load UserForm1
UserForm1.Show
End Sub
 
Bonjour Phil Du59, sylvanu,

Ou aussi :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, a, i&
Set plage = Range("B3:H" & Cells(Cells.Rows.Count, "B").End(xlUp).Row)
With UserForm1.ListBox1
    .ColumnCount = plage.Columns.Count
    .List = plage.Rows(0).Value
End With
With UserForm1.ListBox2
    .ColumnCount = plage.Columns.Count
    a = plage
    For i = 1 To UBound(a): a(i, 5) = Format(a(i, 5), "hh:mm"): Next i
    .List = a
End With
UserForm1.Show
End Sub
A+
 

Pièces jointes

Re,

C'était peu explicite. Alors :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, DL%
Set plage = Range("B2:H2")
With UserForm1.ListBox1
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
DL = Cells(Cells.Rows.Count, "B").End(xlUp).Row
Set plage = Range("B3:H" & DL)
With UserForm1.ListBox2
    .Clear
    .ColumnCount = plage.Columns.Count
    .List = plage.Value
End With
Load UserForm1
UserForm1.Show
End Sub

Pas compris. Lorsque j'appuie sur NewQso, chez moi, l'usf s'ouvre correctement avec les listbox remplies.

Votre fichier étant vierge, comment peux t-on savoir dans quel format afficher les données. Cela frôle la plaisanterie. 😅
Désolé , il est vrai que je sais comment est mon tableau et ce que je voudrais et parfois on en oubli ceux qui le découvre ainsi que son fonctionnement , je ferais en sorte de joindre un fichier rempli la prochaine fois .
 
Bonjour Phil Du59, sylvanu,

Ou aussi :
VB:
Private Sub CommandButton1_Click()
Dim plage As Range, a, i&
Set plage = Range("B3:H" & Cells(Cells.Rows.Count, "B").End(xlUp).Row)
With UserForm1.ListBox1
    .ColumnCount = plage.Columns.Count
    .List = plage.Rows(0).Value
End With
With UserForm1.ListBox2
    .ColumnCount = plage.Columns.Count
    a = plage
    For i = 1 To UBound(a): a(i, 5) = Format(a(i, 5), "hh:mm"): Next i
    .List = a
End With
UserForm1.Show
End Sub
A+
Bonjour Job, ok ça fonctionne pour les H et M mais je dois quitter et re ouvrir pour voir les entrer sur le USF et quand j'efface ma feuille LOG sur le USF l'entête de la Lbox 1 descend sur la Lbox 2
 
Bonjour Job, ok ça fonctionne pour les H et M mais je dois quitter et re ouvrir pour voir les entrer sur le USF et quand j'efface ma feuille LOG sur le USF l'entête de la Lbox 1 descend sur la Lbox 2
Si vous voulez pouvoir modifier le tableau source quand l'UserForm est ouvert il faut l'ouvrir en non modal.

Et pour le cas où le tableau est vide il suffit de traiter le cas où plage.Row = 2 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If UserForms.Count Then CommandButton1_Click 'rouvre l'UserForm pour le mettre à jour
End Sub

Private Sub CommandButton1_Click()
Dim plage As Range, a, i&
Set plage = Range("B3:H" & Cells(Cells.Rows.Count, "B").End(xlUp).Row)
With UserForm1.ListBox1
    .ColumnCount = plage.Columns.Count
    .List = plage.Rows(IIf(plage.Row = 2, 1, 0)).Value
End With
With UserForm1.ListBox2
    .ColumnCount = plage.Columns.Count
    a = plage
    For i = 1 To UBound(a): a(i, 5) = Format(a(i, 5), "hh:mm"): Next i
    .List = a
    If plage.Row = 2 Then .Clear 'si le tableau est vide
End With
UserForm1.Show 0 'ouverture en non modal
End Sub
 

Pièces jointes

Si vous voulez pouvoir modifier le tableau source quand l'UserForm est ouvert il faut l'ouvrir en non modal.

Et pour le cas où le tableau est vide il suffit de traiter le cas où plage.Row = 2 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If UserForms.Count Then CommandButton1_Click 'rouvre l'UserForm pour le mettre à jour
End Sub

Private Sub CommandButton1_Click()
Dim plage As Range, a, i&
Set plage = Range("B3:H" & Cells(Cells.Rows.Count, "B").End(xlUp).Row)
With UserForm1.ListBox1
    .ColumnCount = plage.Columns.Count
    .List = plage.Rows(IIf(plage.Row = 2, 1, 0)).Value
End With
With UserForm1.ListBox2
    .ColumnCount = plage.Columns.Count
    a = plage
    For i = 1 To UBound(a): a(i, 5) = Format(a(i, 5), "hh:mm"): Next i
    .List = a
    If plage.Row = 2 Then .Clear 'si le tableau est vide
End With
UserForm1.Show 0 'ouverture en non modal
End Sub
Impecc Job ça fonctionne , et pour les autres Lbox est il possible d'importer les données d'autres feuilles de ma demande si c'est possible :

Dans la Listbox 3 (QSO N°) , recopier la case A2 de la feuille LOG

Dans la Listbox 4 (DXCC WORKED) , recopier la case L1 de la feuille STATS

Dans la Listbox 5 (celle en bas) , recopier de H2 à Q31 de la feuille STATS (par ordre croissant si possible)
 
Bonjour,

Pour toi, jeune padawan, juste pour information en passant© : de ta ListBox, le RowSource utiliser tu peux. 😀


Pour entrer mes données je passe par NEW QSO

1° Dans la Listbox 1 , recopier la ligne de B2 à H2 de le feuille LOG .

2° Dans la Listbox 2 (le grand cadre) , recopier les entrées des colonnes B C D E F G et H de façon à voir toujours le dernier entré visible en bas , donc avec la liste qui monte au fur et à mesure (si c’est possible)
Un truc magique pour ça :
1- Tu transformes le tableau de la feuille "LOG", en Tableau Structuré" (nommé par exemple "t_Log").
2- Dans les paramètres de configuration de ta ListBox2, tu entres la valeur t_Log pour le paramètre RowSource.
3- Dans les paramètres de configuration de ta ListBox2, tu entres la valeur True pour le paramètre "ColumnHeads". Ta ListBox1 devient alors inutile.


3° la colonne TIME se met au format 0,xxxx et pas en Heures et Minutes j'avais déjà vu comment faire mais .....
En utilisant le RowSource, tu ne devrais plus avoir ce problème.


quand j'efface ma feuille LOG sur le USF l'entête de la Lbox 1 descend sur la Lbox 2
En utilisant le RowSource, tu ne devrais plus avoir ce problème.


Maintenant quand tu ouvres ton UserForm, la ListBox2 est automatiquement mise à jour sans la moindre ligne de VBA !
C'est magique, te dis-je. 😉
 
Dernière édition:
Dans la Listbox 3 (QSO N°) , recopier la case A2 de la feuille LOG

Dans la Listbox 4 (DXCC WORKED) , recopier la case L1 de la feuille STATS
Autres informations pour ta formation :
- on parle plutôt de cellule A2,
- pour afficher une seule information on utilise généralement un Label (ou une TextBox) plutôt qu'une ListBox (qui sert surtout à afficher une liste).
 
Dernière édition:
Bonjour le forum,
Impecc Job ça fonctionne , et pour les autres Lbox est il possible d'importer les données d'autres feuilles de ma demande si c'est possible :
Utilisez ce code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If UserForms.Count Then CommandButton1_Click 'rouvre l'UserForm pour le mettre à jour
End Sub

Private Sub CommandButton1_Click()
Dim plage As Range, a, i&
Set plage = Range("B3:H" & Cells(Cells.Rows.Count, "B").End(xlUp).Row)
With UserForm1.ListBox1
    .ColumnCount = plage.Columns.Count
    .List = plage.Rows(IIf(plage.Row = 2, 1, 0)).Value
End With
With UserForm1.ListBox2
    .ColumnCount = plage.Columns.Count
    a = plage
    For i = 1 To UBound(a): a(i, 5) = Format(a(i, 5), "hh:mm"): Next i
    .List = a
    If plage.Row = 2 Then .Clear 'si le tableau est vide
End With
UserForm1.ListBox3.AddItem [A2]
UserForm1.ListBox5.AddItem Sheets("STATS").[L1]
With Sheets("STATS").[H2:Q31]
    .Parent.Worksheet_Activate 'exécute le tri
    UserForm1.ListBox4.ColumnCount = .Columns.Count
    UserForm1.ListBox4.ColumnWidths = Application.Rept((UserForm1.ListBox4.Width - 15) \ .Columns.Count & ";", .Columns.Count)
    UserForm1.ListBox4.List = .Value
End With
UserForm1.Show 0 'ouverture en non modal
End Sub
La macro Quick sort est utilisée pour trier le tableau de la feuille STATS.

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
141
Réponses
5
Affichages
504
Retour