Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise à jour dans ListBox à 10 colonnes

12 réponses
Avatar
DAVID
Bonsoir

Comment modifier la valeur d'une ligne d'une ListBox à 10 colonnes.
Je m'explique !
J'alimente une ListBox formaté avec Columm Count à la valeur 10.

J'aimerais après avoir cliqué sur un bouton modifier la ligne sélectionné.

Des pistes ?

Merci de votre aide

Cordialement

David

10 réponses

1 2
Avatar
Michel Pierron
Bonsoir David;
Quelque chose comme :

If Me.ListBox1.ListIndex = -1 Then Exit Sub
Dim i%, y%
i = Me.ListBox1.ListIndex
For y = 0 To 10
Me.ListBox1.List(i, y) = Cells(1, y + 1)
Next y

MP

"DAVID" a écrit dans le message de
news:
Bonsoir

Comment modifier la valeur d'une ligne d'une ListBox à 10 colonnes.
Je m'explique !
J'alimente une ListBox formaté avec Columm Count à la valeur 10.

J'aimerais après avoir cliqué sur un bouton modifier la ligne sélectionné.

Des pistes ?

Merci de votre aide

Cordialement

David


__________ Information from ESET Smart Security, version of virus
signature database 4765 (20100112) __________

The message was checked by ESET Smart Security.

http://www.eset.com







__________ Information from ESET Smart Security, version of virus signature database 4765 (20100112) __________

The message was checked by ESET Smart Security.

http://www.eset.com
Avatar
DAVID
Bonsoir et merci michel

Mais Erreur 70 : Impossible de définir la propriété List. Acces Refusé
sur la ligne Me.ListBox1.List(i, y) = Cells(1, y + 1)

J'ai pas préciser que j'alimente ListBox1 grâce à l'initialisation
ci-dessous :

Private Sub UserForm_Initialize()
ListBox1.RowSource = ("Feuil1!Base1")
ListBox1.ListIndex = -1
End Sub

"Base1" etant faite par Insertion/Nom/Définir dans la feuille "Feuil1"


Dans l'idéal, double clic dans la ligne, modifier les valeurs et clic sur
un bouton valider !

Merci de votre aide
Avatar
michdenis
Bonjour,

| j'alimente ListBox1 grâce à l'initialisation |ci-dessous :

| ListBox1.RowSource = ("Feuil1!Base1")

Pour modifier le contenu de la listBox, il faudrait modifier le
contenu des cellules de la plage ("Feuil1!Base1"). Si tu veux
modifier directement un listbox, utilise ceci pour définir le
contenu de ton ListBox.
Exemple :
'--------------------------------
Private Sub UserForm_Initialize()
With Me.ListBox1
.BoundColumn = 1
.ColumnCount = 3
.ColumnWidths = "50;50;50"
.List = Range("Feuil1!A1:C10").Value
End With
End Sub
'--------------------------------

Pour modifier le contenu du listbox de la colonne 3
de l'item sélectionné :

'------------------------------------
Dim Colonne As Integer

With Me.ListBox1
If .ListIndex = -1 Then Exit Sub
'Modifier le contenu de la 3 ième colonne
'du listbox de l'item sélectionné
'La colonne 1 débute à zéro dans un listbox.
Colonne = 3 - 1
.List(.ListIndex, Colonne) = "boxo"
End With
'------------------------------------







"DAVID" a écrit dans le message de groupe de discussion :

Bonsoir

Comment modifier la valeur d'une ligne d'une ListBox à 10 colonnes.
Je m'explique !
J'alimente une ListBox formaté avec Columm Count à la valeur 10.

J'aimerais après avoir cliqué sur un bouton modifier la ligne sélectionné.

Des pistes ?

Merci de votre aide

Cordialement

David
Avatar
DAVID
Bonjour et merci de ton aide

Ya un truc que je ne comprend pas.

Dans Excelabo, je lis qu'il vaux mieux déclarer les plages avec
Insertion/nom et quand je lis les messages du forum c'est souvent que je
vois Range("Feuil1!A1:C10").Value !!

Quelle est la différence ?

Cordialement

David
Avatar
Daniel.C
Bonjour.
Tu peux utiliser les deux. Tu peux d'ailleurs nommer la plage
Range("Feuil1!A1:C10") et utiliser ce nom.
L'avantage des noms est qu'ils te permettent d'utiliser une plage
nommée dynamique. Par exemple :
Insertion / Nom / Définir : "maPlage", "Fait référence à :" :
Decaler(Feuil1!$A$1;;;NbVal(Feuil1!$A:$A))
(éventuellement, reporte-toi à l'aide sur la fonction DECALER)
Tu obtiens ainsi une plage débutant en A1 et d'une longueur égale au
nombre de valeurs contenues dans la colonne A.
Un inconvénient toutefois : ta plage ne doit pas contenir de cellules
vides.
Cordialement.
Daniel

Bonjour et merci de ton aide

Ya un truc que je ne comprend pas.

Dans Excelabo, je lis qu'il vaux mieux déclarer les plages avec Insertion/nom
et quand je lis les messages du forum c'est souvent que je vois
Range("Feuil1!A1:C10").Value !!

Quelle est la différence ?

Cordialement

David


Avatar
michdenis
La différence n'est pas dans l'utilisation de la plage de cellules
soit par Range("Feuil1!A1:C10") ou par plage nommée, mais
plutôt l'utilisation de la propriété "List" plutôt que "RowSource"
du contrôle "ListBox".

Ta question demandait comment faire pour modifier le contenu
du contrôle "Listbox". Or, si tu utilises la propriété "RowSource"
du listBox lie ce dernier à la plage de cellules et si tu essaies de
modifier ce que le listbox affiche, il faudra que tu modifies le
contenu de la plage de cellules utilisées en référence.
La propriété ListBox utilise la notion de "Tableau" pour combler
son contenu. Seules les données de la plage de cellules utilisées
sont passées au contenu du ListBox et son contenu n'est plus
lié à la plage de cellule. En conséquence, tu peux modifier le
contenu du listbox sans affecter le contenu de la plage de cellules
sources utilisé.

Il ne s'agit pas de savoir quelle est la meilleure méthode d'initialer
le listbox mais d'utiliser la méthode qui correspond le mieux à l'usage
que l'on veut faire du ListBox dans son application.



"DAVID" a écrit dans le message de groupe de discussion :

Bonjour et merci de ton aide

Ya un truc que je ne comprend pas.

Dans Excelabo, je lis qu'il vaux mieux déclarer les plages avec
Insertion/nom et quand je lis les messages du forum c'est souvent que je
vois Range("Feuil1!A1:C10").Value !!

Quelle est la différence ?

Cordialement

David
Avatar
DAVID
Merci beaucoup à vous deux pour vos explications très complète

Cordialement

David
Avatar
DAVID
Donc si je comprend bien. Il faut que j'utilise RowSource puisque je veux
modifier l'intérieur d'une ListBox et que cela est lié au tableau de ma
feuille et à la fin de la procédure j'actualise à nouveau ListBox afin qu'il
se mette à jour. donc

J'initialise ListBox avec

Private Sub UserForm_Initialize()
ListBox1.RowSource = ("BD!MaListe")
ListBox1.ListIndex = -1
End Sub


Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

' Je mets un code ici pour modifier directement dans ListBox1 (écriture dans
ListBox1)

'Initialisation à nouveau de la ListBox
UserForm_Initialize

End Sub

Donc je mets quoi comme code ???

Merci de votre aide

David
Avatar
michdenis
Voici un exemple : http://cjoint.com/?bntXZbtT4c

C'est à toi de décider de la méthode qu'il convient le mieux
pour l'élaboration de ton application. Nous sommes là pour
apporter une aide seulement.



"DAVID" a écrit dans le message de groupe de discussion :

Donc si je comprend bien. Il faut que j'utilise RowSource puisque je veux
modifier l'intérieur d'une ListBox et que cela est lié au tableau de ma
feuille et à la fin de la procédure j'actualise à nouveau ListBox afin qu'il
se mette à jour. donc

J'initialise ListBox avec

Private Sub UserForm_Initialize()
ListBox1.RowSource = ("BD!MaListe")
ListBox1.ListIndex = -1
End Sub


Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

' Je mets un code ici pour modifier directement dans ListBox1 (écriture dans
ListBox1)

'Initialisation à nouveau de la ListBox
UserForm_Initialize

End Sub

Donc je mets quoi comme code ???

Merci de votre aide

David
Avatar
DAVID
Bonsoir et merci pour le modèle. Je comprend bien que vous êtes pas la pour
faire la totalité de nos idées mais après re-lecture, je pense m'avoir mal
exprimé.

J'utilisais cette fonction avant mais....

Je vais reformer la question !

En fait je veux écrire DIRECTEMENT dans une ListBox.

Possible ou pas sans passer par un TextBox ?

Genre :
1) Double clic dans la ligne de ListBox à modifier
2) Modification des valeurs dans la ListBox
3) Appui sur la touche entrée pour valider les saisies et remettre à jour la
ListBox

Merci de votre aide

Cordialement

David
1 2