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
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
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
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
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.
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.
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.
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
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
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
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
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" <direction-ternoise@wanadoo.fr> a écrit dans le message de groupe de discussion :
uk3JOWBmKHA.4772@TK2MSFTNGP04.phx.gbl...
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
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