(resolu)envoyer lignes de listbox dans classeurs sur C:merci lone-wolf et si...

grisan29

XLDnaute Accro
bonjour a tous et toutes
je cherche a faire un peu comme un carnet de commandes mais avec un classeur exel, avec un userform et une listbox ,mais c'est la que ça vas plus car je ne sais comment envoyer les lignes sélectionnées dans le classeur qui est déterminer par le choix du combobox , de plus ces classeurs au nom de fournisseurs se trouvent dans un dossier sur C:\fournisseurs
comme mon explication n'est peut être pas clair, je vous joints des exempes
le dossier"fournisseurs" est mettre sous C: et le test commande listbox est le classeur test

j'ai mis un code qui envoie correctement les lignes sur la feuille
il vaux mieux que je donne plus d'explication
donc quand l'userform s'initialise la listbox se charge du contenu de la feuille et comme un devis ne concerne pas qu'un seul fournisseurs, je sélectionne les lignes correspond a tel fournisseurs
et je voudrais pouvoir désélectionnée les lignes après dès l'appui sur le bouton "transfert" qui lui envoie les lignes sélectionnées dans la feuille choisi dans la combobox, afin de continuer les commandes

merci par avance a celui que ça tente
 

Pièces jointes

  • test fournisseurs.zip
    98.5 KB · Affichages: 48
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour Pascal

Un essai comme ceci

VB:
With Workbooks(Chemin).Sheets(1)
    derlig = .Range("b" & Rows.Count).End(xlUp).Row
      For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then Range("b2:b" & derlig) = ListBox1.List(i)
    Next i
       .Close (1)
    End With
 

grisan29

XLDnaute Accro
bonjour Lone-wolf
merci de ta réponse le code fonctionne mais n'écrit pas dans le classeur et de plus le garde ouvert
j'ai modifier mon en rajoutant if ListBox1.Selected(i) = True Then devant mes lignes et c'est mieux
mais il n'y a que la première colonne qui reçois bien les données les autres plus haut

Code:
If ListBox1.Selected(i) = True Then .Sheets(1).Range("B65536").End(xlUp).Offset(1, 0) = ListBox1.List(i, 0)
         If ListBox1.Selected(i) = True Then .Sheets(1).Range("C65536").End(xlUp).Offset(0, 1) = ListBox1.List(i, 1)
         If ListBox1.Selected(i) = True Then .Sheets(1).Range("D65536").End(xlUp).Offset(0, 2) = ListBox1.List(i, 2)
        If ListBox1.Selected(i) = True Then .Sheets(1).Range("E65536").End(xlUp).Offset(0, 3) = ListBox1.List(i, 3)
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re Pascal

C'est juste pour une ligne, je n'arrive pas à transferer plusieures lignes.

VB:
lig = Sheets(1).Range("d" & Rows.Count).End(xlUp).Row + 1
With ListBox1
  For i = 1 To .ListCount
  If ListBox1.Selected(i) = True Then
  Sheets(1).Range("d" & lig) = ListBox1.List(i, 0)
  Sheets(1)..Range("e" & lig) = ListBox1.List(i, 1)
  End If
  Next i
  End With
 

Lone-wolf

XLDnaute Barbatruc
Re Pascal

cette fois c'est bon. C'est RowsSource qui causait problème.

Dans un premier temps, donne comme nom de la plage "liste". Ensuite

VB:
Sub ChargementListBox1()
        'nettoyage
        ListBox1.Clear

                With ListBox1
                .List = Sheets(1).[liste].Value
                .MultiSelect = fmMultiSelectMulti
                    .ColumnHeads = True 
                    .ColumnCount = 2
                    .ColumnWidths = "180;50"
                End With
        End Sub

Private Sub CommandButton1_Click()
Dim derlig As Long, i As Long

  derlig = Sheets(1).Cells(Rows.Count, 4).End(xlUp).Row + 1
  For i = 0 To Me.ListBox1.ListCount - 1
  If ListBox1.Selected(i) Then
  Sheets(1).Cells(derlig, 4) = ListBox1.List(i)
  Sheets(1).Cells(derlig, 5) = ListBox1.List(i, 1)
  derlig = derlig + 1
  End If
  ListBox1.Selected(i) = False
  Next i
End Sub
 

grisan29

XLDnaute Accro
bonjour Lone wolf
merci beaucoup de tes derniers codes mais j'ai un bug d'erreur d'exécution 424 objet requis a lla 2ème ligne apres With listbox1
mais faut savoir que j'ai 5 colonnes en tout donc j'ai modifier le code comme ceci
voici quasi tout le code sauf celui du combobox

Code:
    Option Explicit
    Sub ChargementListBox1()
        'nettoyage
       ListBox1.Clear

                With ListBox1
                .List = Sheets(1).[liste].Value <========================ici bug
                .MultiSelect = fmMultiSelectMulti
                    .ColumnHeads = True
                    .ColumnCount = 5
                    .ColumnWidths = "50;180;50;50;50"
                End With
        End Sub

Private Sub CommandButton1_Click()


'copie les lignes selectionnées dans la colonne G
    Dim i As Integer
    Dim rg As Range
    Dim Fichier As Workbook
    Dim Chemin As String
    Dim derlig As Long, i As Long

'Call hautpage
    Chemin = commande.CBlistefournisseurs
    Application.ScreenUpdating = False
    On Error Resume Next
    Set Fichier = Workbooks.Open("C:\Facturation\base\fournisseurs\" & Chemin)
derlig = Sheets(1).Cells(Rows.Count, 4).End(xlUp).Row + 1
    With Workbooks(Chemin)
        'on boucle sur tous les éléments du Listview
       For i = 0 To Me.ListBox1.ListCount - 1
  If ListBox1.Selected(i) Then
  Sheets(1).Cells(derlig, 4) = ListBox1.List(i)
  Sheets(1).Cells(derlig, 5) = ListBox1.List(i, 1)
  Sheets(1).Cells(derlig, 6) = ListBox1.List(i, 2)
  Sheets(1).Cells(derlig, 7) = ListBox1.List(i, 3)

  derlig = derlig + 1
  End If
  ListBox1.Selected(i) = False
  Next i
       .Close (1)
    End With

     Application.ScreenUpdating = True
End Sub
    Private Sub UserForm_Activate()
        'activation du chargement de la listbox
        Call ChargementListBox1
        End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re Pascal

Cela n'a aucune importance, exemples:
liste = Range("D2:F200") - liste = Range("D2:F2000") - liste = Range("D2:F65536")

Supprime aussi la macro pour le chargement de la liste (inutile), met-la directement dans Initialize. En PJ.
 

Pièces jointes

  • test commande listbox exemple.xlsm
    25.1 KB · Affichages: 47
Dernière édition:

grisan29

XLDnaute Accro
bonjour Lone-wolf
dans le dernier classeur tu as oublier que mes fournisseurs sont des classeur sur c: et la le transfert ce fait en fin de liste ce n'est pas du tout cela que je veux
ce que tu as fait je sais le faire

ce que je veux c'est sélectionner des lignes (peu importe le nombre et lesquelles)
choisir le fournisseur dans la combobox
puis cliquer sur transfert dans la feuille qui a été désignée dans la combobox
 
Dernière édition:

Si...

XLDnaute Barbatruc
Salut
j'ai mis un code qui envoie correctement les lignes sur la feuille
il vaux mieux que je donne plus d'explication
donc quand l'userform s'initialise la listbox se charge du contenu de la feuille et comme un devis ne concerne pas qu'un seul fournisseurs, je sélectionne les lignes correspond a tel fournisseurs
et je voudrais pouvoir désélectionnée les lignes après dès l'appui sur le bouton "transfert" qui lui envoie les lignes sélectionnées dans la feuille choisi dans la combobox, afin de continuer les commandes

merci par avance a celui que ça tente

si ma proposition ne te tente pas, laisse la de côté. J'irai la planter ailleurs, peut-être faire Dodo en Suisse:p.

Ce que j'utilise pour désélectionner : propriété Multiselect à False puis à True !

Je sais que tu sais passer au cas de la copie dans un fichier donc je te laisse faire :confused:.

édition : fichier joint supprimé (voir le dernière message)
 
Dernière édition:

Discussions similaires

Réponses
25
Affichages
648
Réponses
18
Affichages
611

Statistiques des forums

Discussions
312 146
Messages
2 085 764
Membres
102 967
dernier inscrit
Syl34