Listview Excel 2016
Bonjour,
actuellement sous windows 10 et office 2016 je n'arrive pas a avoir le contrôle LISTVIEW j'ai vue qu'il était possible de le créer par code vba mais ca ne fonctionne pas il y a une erreur et je ne sais pas pourquoi?
' Create a ListView control in VBA code
Dim objListView As ListView
Set objListView = ThisWorkbook.Sheets(1).OLEObjects.Add( _
ClassType:="MSComctlLib.ListViewCtrl.2", _
Link:=False, DisplayAsIcon:=False, _
Left:=50, Top:=50, Width:=200, Height:=100).Object
' Set ListView properties through the objListView reference
objListView.LabelEdit = lvwAutomatic
objListView.CheckBoxes = True
Pourriez vous m'aider a faire fonctionner le contrôle soit par code vba soit en l'ajoutant?
Il me valide bien le MSCOMCTL.OCX quand je l'ajoute avec la commande MSDOS mais il n'apparait pas dans les controles supplémentaire....
Peut-on remplacer la listview par MSFlexGrid?
Merci....
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
A mon avis, vous êtes en Office 2016 64 bits, version pour laquelle ce contrôle ne fonctionne pas. Il faut en choisir un autre ou revenir à Office 2016 32 bits.
L'alternative 64 bits est une ListBox qu'il faudra paramétrer manuellement au niveau des propriétés ColumnCount et Rowsource .
Merci thev effectivement excel 64 bits....
comment transformer mon code listview en listbox s'il te plait?
If UserForm1.ListView1.ListItems.Count >= 27 Then
MsgBox "Bon de commande rempli": Exit Sub
Else
With UserForm1
.ListView1.ListItems.Add , , TextBoxNCOMMANDE.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , TextBox2.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , TextBox8.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , TextBox10.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , Textbox9.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , TextBox4.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , TextBox1.Value
.ListView1.ListItems(.ListView1.ListItems.Count).ListSubItems.Add , , TextBox3.Value
End With
End If
Me suffit-il de remplacer listview1 par listbox?
Merci cordialement.
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ci-dessous code avec ListBox
With Me.ListBox1
If .ListCount >= 27 Then
MsgBox "Bon de commande rempli": Exit Sub
Else
.ColumnCount = 8
.AddItem TextBoxNCOMMANDE.Value
.List(.ListCount - 1, 1) = TextBox2.Value
.List(.ListCount - 1, 2) = TextBox8.Value
.List(.ListCount - 1, 3) = TextBox10.Value
.List(.ListCount - 1, 4) = Textbox9.Value
.List(.ListCount - 1, 5) = TextBox4.Value
.List(.ListCount - 1, 6) = TextBox1.Value
.List(.ListCount - 1, 7) = TextBox3.Value
End If
End With
Merci thev j'ai appliqué ton code qui fonctionne très bien par contre je ne vois pas entièrement le texte dans ma listbox comment renvoyer a la ligne le texte d'une colonne?
ensuite quand je valide avec un bouton ma liste de ma listbox je la transfere vers mon bon de commande peut tu me modifier le code pour que ca se copie vers mon bon de commande?
With Sheets("Bon de commande")
If .ListCount >= 1 Then
' If UserForm1.ListView1.ListItems.Count >= 1 Then
For k = 1 To UserForm1.ListView1.ListItems.Count
.Range("A" & k + 20) = UserForm1.ListView1.ListItems(k).ListSubItems(1)
.Range("G" & k + 20) = UserForm1.ListView1.ListItems(k).ListSubItems(7)
.Range("F" & k + 20) = UserForm1.ListView1.ListItems(k).ListSubItems(6)
.Range("F12").Value = UserForm1.TxtDatedecommande.Value
.Range("B12").Value = UserForm1.Txtsaisipar.Value
.Range("B14").Value = UserForm1.Textbox9.Value
Next k
End If
End With
Dim lg As Long, cl As Long, i As Long, j As Long
Dim T As Variant
With UserForm1.ListView1
lg = .ListItems.Count
cl = .ColumnHeaders.Count
ReDim T(1 To lg, 1 To cl + 1)
For i = 1 To lg
T(i, 1) = .ListItems(i).Text
For j = 1 To cl - 1
T(i, j + 1) = .ListItems(i).ListSubItems(j).Text
Next j
Next i
End With
Dim derlig As Long
Merci pour tout.
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Je pense que le mieux est de jouer sur la taille des colonnes pour afficher ton texte. Ci-dessous exemple de ListBox avec largeur totale de 720 pt et les 8 colonnes de même taille :reglaet a écrit :Merci thev j'ai appliqué ton code qui fonctionne très bien par contre je ne vois pas entièrement le texte dans ma listbox comment renvoyer a la ligne le texte d'une colonne?
With Me.ListBox1
.Width = "720"
.ColumnCount = 8
.ColumnWidths = "90;90;90;90;90;90;90;90"
End With
Ce code devrait fonctionnerreglaet a écrit :ensuite quand je valide avec un bouton ma liste de ma listbox je la transfere vers mon bon de commande peut tu me modifier le code pour que ca se copie vers mon bon de commande?
Set F = Sheets("Bon de commande")
With UserForm1.ListBox1
If .ListCount >= 1 Then
For k = 0 To .ListCount - 1
F.Range("A" & k + 21) = .List(k, 0)
F.Range("G" & k + 21) = .List(k, 6)
F.Range("F" & k + 21) = .List(k, 5)
With UserForm1
F.Range("F12").Value = .TxtDatedecommande.Value
F.Range("B12").Value = .Txtsaisipar.Value
F.Range("B14").Value = .Textbox9.Value
End With
Next k
End If
End With
super un grand merci il me reste juste une petite erreur que je n'arrive pas a expliquer....[code With Me.ListBox1
If .ListCount >= 27 Then
MsgBox "Bon de commande rempli": Exit Sub
Else
.ColumnWidths = "640"
.ColumnCount = 5
.ColumnWidths = "80;280;230;0;50"
.AddItem TextBoxNCOMMANDE.Value
.List(.ListCount - 1, 1) = TextBox2.Value
.List(.ListCount - 1, 2) = Textbox9.Value
.List(.ListCount - 1, 3) = TextBox4.Value
.List(.ListCount - 1, 4) = TextBox1.Value
End If
'End][/code]
je n'explique pas pourquoi il me décale le textbox 1 d'une colonne dans la listbox et pour le coup je suis obligé de mettre 0 en largeur dans la 4eme colonnes?
quels est le code a utiliser pour supprimer une ligne du listbox merci?
ListBox1.ListItems.Remove (ListBox1.SelectedItem.Index)
et pour modifier la quantitée?
With ListView1.ListItems(ListView1.SelectedItem.Index)
.ListSubItems(6).Text = TextBox1.Value
End With
Merci pour ton aide précieuse qui me permet d'avancer dans mon projet , j'ai vraiment du mal à convertir cette listview en listbox....
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
D'abord erreur d'inattention, la propriété relative à la largeur totale de la ListBox est "Width" :reglaet a écrit :je n'explique pas pourquoi il me décale le textbox 1 d'une colonne dans la listbox et pour le coup je suis obligé de mettre 0 en largeur dans la 4eme colonnes?
.Width = "640"
.ColumnCount = 5
.ColumnWidths = "80;280;230;0;50"
Ensuite au niveau de la taille spécifique de chaque colonne, il faut toujours indiquer les 5. Pour ne pas en afficher une, il suffit de mettre sa taille à 0.
ci-dessous exemple de code (attention!, il faut partir du dernier élément pour ne pas se mélanger les pinceaux)reglaet a écrit :quels est le code a utiliser pour supprimer une ligne du listbox merci?
With Me.ListBox1
For i = .ListCount - 1 To 0 Step -1
'si l'élément est selectionné dans la ListBox, on le supprime
If .Selected(i) = True Then .RemoveItem (i)
Next i
End With
Pour remplacer ton instruction Listview
With Me.ListBox1
.RemoveItem (.ListIndex)
End With
reglaet a écrit :et pour modifier la quantité?
With Me.ListBox1
.List(.ListIndex, 5) = TextBox1.Value
End With
merci pour les colonnes je ne comprends pas pourquoi ca m'en creer une vide mais bon je la mettrait a 0 pour ne pas la voir.
Pour la suppression OK ca fonctionne parfaitement, par contre pour la modification de la quantité il ne se passe rien?
Problème dans le code ou mauvaise manip de ma part....
une derniere modif de listview à listbox pour transferer ma liste sur mon historique de commande apres j'espere ne plus t'embeter...[code
Dim lg As Long, cl As Long, i As Long, j As Long
Dim T As Variant
With UserForm1.ListView1
lg = .ListItems.Count
cl = .ColumnHeaders.Count
ReDim T(1 To lg, 1 To cl + 1)
For i = 1 To lg
T(i, 1) = .ListItems(i).Text
For j = 1 To cl - 1
T(i, j + 1) = .ListItems(i).ListSubItems(j).Text
Next j
Next i
End With
Dim derlig As Long
With Sheets("Historique Commande")
derlig = .Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne occupée
For i = 1 To lg ' boucle sur les lignes du tableau
derlig + i => pour incrémenter au fur et à mesure les lignes de la feuille
.Range("A" & derlig + i) = T(i, 1) ' N°commande
.Range("B" & derlig + i) = Txtsaisipar.Value
.Range("C" & derlig + i) = T(i, 2) ' Ref produit
.Range("D" & derlig + i) = T(i, 3) ' conditionnement
.Range("E" & derlig + i) = T(i, 4) ' dosage
.Range("F" & derlig + i) = T(i, 5) ' fournisseur
.Range("G" & derlig + i) = T(i, 6) ' ref fournisseur
.Range("H" & derlig + i) = T(i, 8) 'Prix
.Range("I" & derlig + i) = T(i, 7) 'Quantité
.Range("J" & derlig + i) = CDate(TxtDatedecommande.Value)
.Range("K" & derlig + i) = CDate(TxtDatedelivraison.Value)
Next i
End With][/code]
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Pour terminer, un code optimisé qui devrait convenir :reglaet a écrit :une derniere modif de listview à listbox pour transferer ma liste sur mon historique de commande
Dim cel_vide As Range, lig_vide As Range
'1ère cellule disponible en colonne A et 1ère ligne associée
Set cel_vide = Sheets("Historique Commande").Columns("A").Find("")
Set lig_vide = cel_vide.EntireRow
With UserForm1.ListBox1
'ajout données ListBox1 à partir de la première cellule disponible
cel_vide.Resize(.ListCount, .ColumnCount).Value = Application.Transpose(Application.Transpose(.List))
'décalage d'une colonne à partir de la colonne B ajoutée
lig_vide.Columns("B").Resize(.ListCount).Insert Shift:=xlToRight
'remplissage colonnes B,J,K pour les lignes ajoutées
lig_vide.Columns("B").Resize(.ListCount).Value = Txtsaisipar.Value
lig_vide.Columns("J").Resize(.ListCount).Value = CDate(TxtDatedecommande.Value)
lig_vide.Columns("K").Resize(.ListCount).Value = CDate(TxtDatedelivraison.Value)
End With
bonjour,
dans le dernier code j'ai une erreur d'incompatibilité sur cette ligne:
[codecel_vide.Resize(.ListCount, .ColumnCount).Value = Application.Transpose(Application.Transpose(.List))][/code]
j'ai aussi un autre bouton qui me permet de récupérer les produits "a commander" et me les transfere directement sur la listview
Dim Com As Worksheet
Set Com = Worksheets("Historique Commande")
Dim ligne As Long
Dim Cel As Range
If TxtDatedecommande.Value = "" Then
Me.TxtDatedecommande.BackColor = &H80FFFF
MsgBox "Veuillez saisir une date de commande"
Exit Sub
End If
If Txtsaisipar.Value = "" Then
Me.Txtsaisipar.BackColor = &H80FFFF
MsgBox "Veuillez saisir un Nom pour la commande"
Exit Sub
End If
If TxtDatedelivraison.Value = "" Then
Me.TxtDatedelivraison.BackColor = &H80FFFF
MsgBox "Veuillez saisir une date de livraison prévue"
Exit Sub
End If
If TextBoxNCOMMANDE.Value = "" Then
MsgBox "Veuillez cliquer sur le Bouton Nouvelle Commande"
Exit Sub
End If
With UserForm1.ListView1
.ListItems.Clear
With .ColumnHeaders
'Titres des colonnes
.Clear
'Ajout des colonnes
.Add , , "N° Commande", 50
.Add , , "Désignation", 200
.Add , , "Conditionnement", 90, lvwColumnCenter
.Add , , "Dosage", 50, lvwColumnCenter
.Add , , "Fournisseur", 70, lvwColumnCenter
.Add , , "Réf Fournisseur", 90, lvwColumnCenter
.Add , , "Quantité", 50, lvwColumnCenter
.Add , , "Prix", 50, lvwColumnCenter
End With
.Font.Size = 8
.Font.Bold = True
.View = lvwReport 'affichage en mode Rapport
.Gridlines = True 'affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes comlètes
.LabelEdit = lvwAutomatic
.HotTracking = False
With UserForm1.ListView1
For cellule = 7 To Cells(65535, 7).End(xlUp).Row
If Range("Q" & cellule) = "A COMMANDER" Then
.ListItems.Add , , TextBoxNCOMMANDE
'.ListItems.Add , "Q" & cellule, Range("Q" & cellule)
Compteur = .ListItems.Count
.ListItems(Compteur).ListSubItems.Add , "D" & cellule, Range("D" & cellule)
.ListItems(Compteur).ListSubItems.Add , "B" & cellule, Range("B" & cellule)
.ListItems(Compteur).ListSubItems.Add , "C" & cellule, Range("C" & cellule)
.ListItems(Compteur).ListSubItems.Add , "G" & cellule, Range("G" & cellule)
.ListItems(Compteur).ListSubItems.Add , "H" & cellule, Range("H" & cellule)
.ListItems(Compteur).ListSubItems.Add , "K" & cellule, Range("K" & cellule)
.ListItems(Compteur).ListSubItems.Add , "J" & cellule, Range("J" & cellule)
End If
Next cellule
End With
End With
Merci pour le temps que tu passe pour mon projet .
Cette listview incompatible avec office 2016 64 bits me pénalise beaucoup GRRRRR!!!!
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
reglaet a écrit :dans le dernier code j'ai une erreur d'incompatibilité sur cette ligne: [codecel_vide.Resize(.ListCount, .ColumnCount).Value = Application.Transpose(Application.Transpose(.List))][/code]
Je n'ai pas cette erreur. Il faudrait me communiquer un extrait de ton nouveau code plus complet. A tout hasard, essayer cette modif :
Dim cel_vide As Range, lig_vide As Range
'1ère cellule disponible en colonne A et 1ère ligne associée
With Sheets("Historique Commande")
Set cel_vide = .Columns("A").Find(""): If cel_vide Is Nothing Then Set cel_vide = .Range("A1")
Set lig_vide = cel_vide.EntireRow
End With
With UserForm1.ListBox1
If .ListCount > 0 Then
'ajout données ListBox1 à partir de la première cellule disponible
cel_vide.Resize(.ListCount, .ColumnCount).Value = Application.Transpose(Application.Transpose(.List))
'décalage d'une colonne à partir de la colonne B ajoutée
lig_vide.Columns("B").Resize(.ListCount).Insert Shift:=xlToRight
'remplissage colonnes B,J,K pour les lignes ajoutées
lig_vide.Columns("B").Resize(.ListCount).Value = Txtsaisipar.Value
lig_vide.Columns("J").Resize(.ListCount).Value = CDate(TxtDatedecommande.Value)
lig_vide.Columns("K").Resize(.ListCount).Value = CDate(TxtDatedelivraison.Value)
End If
End With
non c'est pareil avec ce code erreur incompatibilité de type et l'userform se ferme et rien n'est inscrit dans ma feuille historique commande...
c'est pas facile tout ca....
le probleme vient de cette ligne:
cel_vide.Resize(.ListCount, .ColumnCount).Value = Application.Transpose(Application.Transpose(.List))
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Pour que je voie d'où vient l'erreur, il me faudrait un code plus complet de l'alimentation de l'historique et le code constitutif de ListBox1, voire un extrait non confidentiel de votre classeur.
bonjour ci joint le fichier.
click sur bouton commande et bouton passer une commande et tu trouvera l'userform a modifier pour le transformer avec une listbox plutôt qu'une listview ou autre idée je suis preneur si ça améliore le projet.
Merci pour tout Thev
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ci-jointe version modifiée avec :
1- paramétrage ListBox1 via éditeur VBA
2- adaptation de la désignation au niveau BDD et Bon de Commande
Un grand merci toute tes modifications fonctionnent à merveille
Juste un dernier bouton qu'on à pas traiter dans l'userform 1 le bonton ajouter les produits "A COMMANDER" de la feuille listing directement dans la listbox bouton en haut à droite.
Merci
- Messages
- 3'999
- Excel
- 2021 FR 64 bits
- Inscrit
- 13.06.2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Ajout des produits "A COMMANDER" avec pour simplifier code et formules, la création du nom de plage :
Produits_à_commander =DECALER('Listing Produits'!$Q:$Q;5;0;NBVAL('Listing Produits'!$A:$A);1)
Cette plage correspond donc à la colonne Q de la feuille Listing Produits, commençant à la ligne 6 avec un nombre de lignes égal au nombre de cellules non vides de la colonne A (référence Produit).