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

Erreur double Clic dans ListBox

14 réponses
Avatar
DAVID
Bonsoir

J'utilie cette procédure pour récuérer les valeurs de la ListBox dans des
TextBox.

Je pensais que tout fonctionner bien mais je viens de m'apercevoir que quand
on doubleclic dans un endroit ou il y a pas de valeur cela faisait une
erreur.

Merci pour votre aide

Sub Liste1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Long
Dim j As Long
If Liste1.ListCount < 1 Then Exit Sub
i = Liste1.ListIndex
TextBox1 = Liste1.List(i, 0)
TextBox2 = Liste1.List(i, 1)
For j = 0 To Combo1.ListCount - 1
If Liste1.List(i, 2) = Combo1.List(j) Then Combo1.ListIndex = j
Next j
TextBox3 = Liste1.List(i, 3)
TextBox4= Liste1.List(i, 4)
TextBox5 = Liste1.List(i, 5)
TextBox6= Liste1.List(i, 6)
TextBox7= CDate(Liste1.List(i, 7))
If Liste1.List(i, 8) <> "" Then TextBox7 = CDate(Liste1.List(i, 8))
End Sub

4 réponses

1 2
Avatar
DAVID
J'ai chercher la moindre erreur de saisie de code toute après midi.
Je vois rien de spécial dans le formulaire "UsfVehicule"

Quand je supprime une valeur dans le ListBox, ça fonctionne mais le problème
est quand je supprime la dernière ligne de la ListBox, cela supprime pas
correctement

Merci de ton aide
Avatar
michdenis
Dans cette procédure :

Pour déterminer ta plage nommée que tu utilises, tu
utilises ce type de formule. Si tu supprimes la ligne
A2, tu obtiens des #Ref et ta formule est foutue !

=SOMME(DECALER($A$2;;;NBVAL(A:A)-1;NBVAL(1:1)))

Voilà pour l'explication !

Je t'avais donné le code pour utiliser la propriété List pour charger
un listbox.
Avatar
DAVID
Bonjour

D'accord mais je tavais répondu qu'en mettant +1, cela avait pour effet de
supprimer la ligne du dessus et non celle que je sélectionne ce qui est pas
normal justement car avec le meme style de code j'arrive à modifier une
ligne et ca fonctionne.

A savoir : Entête ligne A1:I1
Données : A2 à I......

Merci de ton aide
Cordialement
David

Private Sub UserForm_Initialize()
List1.RowSource = ("Feuil1!LISTE")
List1.ListIndex = -1
End Sub


Private Sub CmdSupprimer_Click()
ndx = List1.ListIndex
With Sheets("Feuil1")
.Cells(ndx + 2, 1).Delete
.Cells(ndx + 2, 2).Delete
.Cells(ndx + 2, 3).Delete
.Cells(ndx + 2, 4).Delete
.Cells(ndx + 2, 5).Delete
.Cells(ndx + 2, 6).Delete
.Cells(ndx + 2, 7).Delete
.Cells(ndx + 2, 8).Delete
.Cells(ndx + 2, 9).Delete
End With
End Sub


Private Sub CmdModifier_Click()
ndx = List1.ListIndex
With Sheets("Feuil1")
.Cells(ndx + 2, 1) = TxtBox1.Text
.Cells(ndx + 2, 2) = TxtBox2.Text
.Cells(ndx + 2, 3) = Combo1.Text
.Cells(ndx + 2, 4) = TxtBox3.Text
.Cells(ndx + 2, 5) = TxtBox4.Text
.Cells(ndx + 2, 6) = TxtBox5.Text
.Cells(ndx + 2, 7) = TxtBox6.Text
.Cells(ndx + 2, 8) = TxtBox7.Text
.Cells(ndx + 2, 9) = TxtBox8.Text
End With
End Sub
Avatar
michdenis
A ) Ta Listbox a la propriété Multiline = True
Donc sélection multiple possible, si tu désires
que le traitement se fasse une ligne à la fois
tu adaptes cette propriété à "Single"

Le code pour supprimer pourrait se limiter à ceci :
Ceci supprime une ligne à la fois... la ligne sélectionnée.
With Sheets("BD")
.Cells(ndx + 2, 1).Resize(, 10).Delete xlUp '1 est la colonne
End With
Cela fonctionne très bien SAUF si tu supprimes la première ligne
dans ton listbox qui correspond à la ligne de ton tableau.
Pour définir ton tableau, la fonction decaler fait référence à A2...
si tu supprimes cette ligne de code, la fonction decaler() affiche des #Ref!
et tu te retrouves en Erreur.

Une façon simple de contourner ce problème :

Dans le haut de ton module Formulaire,
déclaration d'une variable Range
Dim Rg As Range

Tu crées une petite procédure dans ton module formulaire
Tu appelles cette procédure au moment d'ouvrir ton formulaire
dans la procédure "UserForm_Initialize" et dans les procédures
qui ajoutent une ligne ou supprime une ligne pour remettre
l'affichage à jour.
'-------------------------------------
Sub Remplir_ListBox()
Dim DerLig as long
With Worksheets("BD")
DerLig = .Range("A:H").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

Set Rg = .Range("A2:i" & derLig)
End with
With Me.listbox
.List = Rg.value
End With
End With
'-------------------------------------

Et pour supprimer une ligne dans le tableau de la colonne A à i
'--------------------------------------
Sub Supprimer_une_Ligne()
Dim X as long
With Me.listbox
if .listindex = -1 Then exit sub
x = .listindex +1
Rg(x).resize(,Rg.columns.count).delete xlup
End if
Endd with
'Et pour mettre ton tableau à jour, tu appelles la procédure
Remplir_ListBox
End Sub
'--------------------------------------

à toi de décider ce que tu veux faire !
(le code n'a pas été testé, fait à la volée rapidement)



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

Bonjour

D'accord mais je tavais répondu qu'en mettant +1, cela avait pour effet de
supprimer la ligne du dessus et non celle que je sélectionne ce qui est pas
normal justement car avec le meme style de code j'arrive à modifier une
ligne et ca fonctionne.

A savoir : Entête ligne A1:I1
Données : A2 à I......

Merci de ton aide
Cordialement
David

Private Sub UserForm_Initialize()
List1.RowSource = ("Feuil1!LISTE")
List1.ListIndex = -1
End Sub


Private Sub CmdSupprimer_Click()
ndx = List1.ListIndex
With Sheets("Feuil1")
.Cells(ndx + 2, 1).Delete
.Cells(ndx + 2, 2).Delete
.Cells(ndx + 2, 3).Delete
.Cells(ndx + 2, 4).Delete
.Cells(ndx + 2, 5).Delete
.Cells(ndx + 2, 6).Delete
.Cells(ndx + 2, 7).Delete
.Cells(ndx + 2, 8).Delete
.Cells(ndx + 2, 9).Delete
End With
End Sub


Private Sub CmdModifier_Click()
ndx = List1.ListIndex
With Sheets("Feuil1")
.Cells(ndx + 2, 1) = TxtBox1.Text
.Cells(ndx + 2, 2) = TxtBox2.Text
.Cells(ndx + 2, 3) = Combo1.Text
.Cells(ndx + 2, 4) = TxtBox3.Text
.Cells(ndx + 2, 5) = TxtBox4.Text
.Cells(ndx + 2, 6) = TxtBox5.Text
.Cells(ndx + 2, 7) = TxtBox6.Text
.Cells(ndx + 2, 8) = TxtBox7.Text
.Cells(ndx + 2, 9) = TxtBox8.Text
End With
End Sub
1 2