Probleme listbox recuperation

lelectricien

XLDnaute Junior
Madame Monsieur Bonjour,


Alors tout d'abord bonjour à toutes et à tous, je viens juste de m'inscrire sur votre site mais je ne sais où je dois me présenter.
Cela fait quelques semaines (+/-2 mois) que je visite régulièrement votre site car je m'intéresse de plus en plus à Excel (& Visual) et je dois dire qu'après avoir visité plusieurs sites, à mon sens, le votre me convient.

En ce moment j'ai un problème, je vous explique:
J'ai créé une macro avec une listbox multiselect. J'ai fait en sorte que quand je lance ma macro, une feuille excel apparait. Ainsi qu'une listbox. Quand je selectionne des lignes dans ma listbox, ces lignes sont reportées sur la feuille Excel. Et quand je selectionne d'autres lignes, elles sont ajoutées en plus de ce que j'ai déjà selectionné.
Tout le temps que je selectionne des lignes dans le userform, ces lignes sont reportées lignes après lignes dans la feuille. Jusque la tout va bien.
MAIS, quand je quitte l'userform, et que je le rappelle (via bouton accès rapide), et que je selectionne des nouvelles lignes, les lignes selectionnées sont recopiées sur les MEMES lignes que j'avais déjà sélectionné.

Voila la partie "importante" du code de l'userform :

Private Sub CommandButton1_Click()
ActiveWindow.WindowState = xlMaximized
Dim k As Integer, i As Integer, x As Byte

i = i + 1
'De la première ligne de la listbox à la dernière
For k = 0 To ListBox1.ListCount - 1


'Si une ligne est sélectionnée
If ListBox1.Selected(k) Then
'Avec la feuille où tu souhaites placer les données
With Sheets("feuil1")
'De la première colonne à la dernière colonne de la listbox
For x = 0 To 40

'Copie des données de la cellule A1 à J1 pour la première ligne sélectionnée dans la listbox
.Cells(i + 10, x + 1) = ListBox1.List(k, x)
Next
'Incrémente la variable I de +1 pour passer à la ligne suivante (A2:J2) dans la feuille si tu as
'plusieurs ligne de la listbox à tranférer
i = i + 1
End With
End If
Next

End Sub



Ce que je souhaite, c'est que quand je quitte l'userform, et que je le rapelle, et que je selectionne à nouveau des lignes, que ces lignes soient recopiées en DESSOUS de ce qui a déjà été copié.

Pouvez-vous m'aider?

Merci d'avance.

Bien à vous.
lelectricien.​
 
C

Compte Supprimé 979

Guest
Re : Probleme listbox recuperation

Bonjour lelectricien et bienvenue sur ce forum

Tout d'abord merci de mettre ton code entre balise
Code:
 et [ /code] (sans espace entre [ et /)

Ensuite si tu veux avoir 41 colonnes dans une liste déroulante, il ne faut surtout pas utiliser une ListBox (10 colonnes max)
mais une[COLOR=#0000CD][B] ListView [/B][/COLOR](chercher sur le forum)

Sinon le code pourrait ressembler à ça[code]Private Sub CommandButton1_Click()
  ActiveWindow.WindowState = xlMaximized
  Dim k As Integer, Dlig As Long, Col As Integer
  'Avec la feuille où tu souhaites placer les données
  With Sheets("feuil1")
    ' Trouver la dernièe ligne remplie
    Dlig = .Cells.SpecialCells(xlCellTypeLastCell).Row
    'De la première ligne de la listbox à la dernière
    For k = 0 To ListBox1.ListCount - 1
    
      'Si une ligne est sélectionnée
      If ListBox1.Selected(k) Then
      
        ' On rempli la ligne suivante pour chaque colonne de la listbox
        'For Col = 1 To 41
        ' une ListBox ne peut avoir que 10 colonnes max
        ' sinon il faut utiliser une ListView
        For Col = 1 To 10
          ' inscrire les données dans chaque colonne pour la ligne sélectionnée
          .Cells(Dlig + 1, Col) = ListBox1.List(k, Col - 1)
        Next
      End If
    Next
  End With
End Sub

A+
 

lelectricien

XLDnaute Junior
Re : Probleme listbox recuperation

Bonjour BrunoM45,

Et merci d'avoir répondu à ma question. J'ai éssayé et c'est presque ca mais,

quand je charge de nouveau l'userform il détecte la dernière ligne.. sauf que ce n'est pas la dernière ligne de ce que j'avais selectionné et recopié avant mais directement la dernière ligne de mon tableau. Alors du coup il récupère ma nouvelle sélection en dessous de mon tableau.

En fait il faudrait juste "ajouter" à cette phrase :

i = Cells.SpecialCells(xlCellTypeLastCell).Row

qu'il détecte la dernière ligne ENTRE la ligne 10 et 100 , pour que ma nouvelle sélection soit recopié APRES la dernière ligne, ET DANS le tableau.

Merci d'avance.
A+
 
C

Compte Supprimé 979

Guest
Re : Probleme listbox recuperation

quand je charge de nouveau l'userform il détecte la dernière ligne.. sauf que ce n'est pas la dernière ligne de ce que j'avais selectionné et recopié avant mais directement la dernière ligne de mon tableau. Alors du coup il récupère ma nouvelle sélection en dessous de mon tableau.
En fait il faudrait juste "ajouter" à cette phrase :
i = Cells.SpecialCells(xlCellTypeLastCell).Row
qu'il détecte la dernière ligne ENTRE la ligne 10 et 100 , pour que ma nouvelle sélection soit recopié APRES la dernière ligne, ET DANS le tableau.

Alors essaye cette instruction
Code:
DLig = .Range("A9").End(xlDown).Row
Ce qui correspond en manuel à CRL+Flèche vers le bas à partir de la cellule 9 (entête de tableau)

A+
 

lelectricien

XLDnaute Junior
Re : Probleme listbox recuperation

Private Sub CommandButton1_Click()
ActiveWindow.WindowState = xlMaximized
Dim k As Integer, i As Integer, x As Byte
i = i + 1
For k = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(k) Then
With Sheets("feuil1")
For x = 0 To 40
.Cells(i + 10, x + 1) = ListBox1.List(k, x)
Next
i = i + 1
End With
End If
Next
End Sub



Salut BrunoM45, salut tout le monde,

J'ai essayé la nouvelle formule mais rien n'y fait. J'ai même essayé une une nouvelle méthode :
listbox1selected(k) = false
userform2.hide

Mais de cette façon, il n'oublie pas ce que j'avais déjà sélectionné et alors si je resélectionne le même élément, il ne fait rien : car je l'avais déjà sélectionné.

En attendant j'ai allégé le texte, mais...

A bientôt.
 

Discussions similaires

Réponses
25
Affichages
672

Statistiques des forums

Discussions
312 309
Messages
2 087 107
Membres
103 470
dernier inscrit
ali2020