"drag & drop" entre deux listview - bug de procédure !!

CAPRI_456

XLDnaute Occasionnel
Bonsoir le Forum,


j'ai repris sur le Forum un fil nommé :"
Une réalisation associative Michel_M et @+Thierry, 27/06/2004 au sujet de drag and drop entre deux listbox
http://www.excel-downloads.com/forum/21499-demo-associative-userform-listbox-drag-n-drop-michel_m-thierry.html

j'ai adapté le code en changeant les références au "listbox" par les références aux "listviews"

Le code émet un bug:"La déclaration de procédure ne correspond pas à la description de l'événement ou de la procédure de même nom.

D'après l'aide , il semblerait que cela provienne d'utilisation répétitive d'évènements ou de noms de procédures, mais je ne vois pas où ?!?

Le fichier est joint ( le problème doit se situer dans le code de UserForm1)


Merci pour votre aide
CAPRI_456
 

Pièces jointes

  • TRANSFERT MANIFESTES-LISTVIEW-24-5-09.zip
    58.9 KB · Affichages: 67

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonsoir le Forum,

je ne parviens pas à trouver d'où vient le bug de procédure.
j'ai consulté le net ...mais sans succès: j'ai notamment, recréé les listviews après que le code soit existant (problème du copier-coller) mais rien n'y fait

le bug pointe sur la ligne :
Private Sub ListView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal y As Single)

Merci si vous pouviez me guider

j'avais réalisé un "drag and drop" entre deux listbox et cela marchait parfaitement....
apparemment, les listviews ne sont pas à ma portée...

merci
CAPRI_456
 

Pièces jointes

  • Copie de TRANSFERT MANIFESTES-LISTVIEW-02-06-09.zip
    56.1 KB · Affichages: 81

Pierrot93

XLDnaute Barbatruc
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonjour Capri

A tout hasard, modifies la déclaration des arguments ainsi, pas testé... :

Code:
Private Sub ListView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)

bonne journée
@+
 

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

bonsoir le Forum, Pierrot93,

effectivement le passe outre le bogue tant pour listview1 que listview 2.
je dois être honnête que je ne comprend pas en quoi l'intervention a consisté ,,,,mais bref , il s'agissait bien de déclaration d'arguments en cause.

Merci Pierrot93

par contre j'ai un bogue au niveau de "userform initialize"
ListView1.AddItem (Cells(Cptr, 2).Value)
erreur de compil : membre de méthode ou de données introuvables

merci
capri_456
 

Bebere

XLDnaute Barbatruc
Re : "drag & drop" entre deux listview - bug de procédure !!

bonsoir Capri,Pierrot
syntaxe courante
ListView1.AddItem , ,Cells(Cptr, 2).Value

autre syntaxe
with ListView1
Set li = .ListItems.Add(, , Cells(Cptr, 2).Value)
ensuite
li.ListSubItems.Add , , Cells(Cptr, 3).Value)
end with

à bientôt
 

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonsoir le forum, Bebere, Pierrot

Ensuite.....

Oui c'est bien cela , j'ai adapté le code comme proposé par Bebere (autre syntaxe)
with ListView1
Set li = .ListItems.Add(, , Cells(Cptr, 2).Value)
ensuite
li.ListSubItems.Add , , Cells(Cptr, 3).Value)
end with

eh zut;;;; je bloque sur ensuite !!

Merci....
 

Bebere

XLDnaute Barbatruc
Re : "drag & drop" entre deux listview - bug de procédure !!

bonjour Capri
si tu n'y arrives pas met un fichier
Ligne = Mid(Me.ListView1.SelectedItem.key, 2)
With UserForm2
' .TextBox1 = Me.ListView1.SelectedItem
' .TextBox2 = Me.ListView1.SelectedItem.ListSubItems(1)
For i = 1 To 6
.Controls("Textbox" & i) = Sheets("base").Cells(Ligne, i)
Next
.ComboBox7 = Sheets("base").Cells(Ligne, 7)
.TextBox8 = Sheets("base").Cells(Ligne, 8)

Set li = .ListView2.ListItems.Add(, , .TextBox1)'1ère colonne
For i = 2 To 6'colonnes suivantes
li.ListSubItems.Add , , .Controls("Textbox" & i)
Next i
End With
'autrement
'effacement listview
ListView1.ListItems.Clear
'alim listview
With Sheets("Base")
For i = 2 To .Range("A65000").End(xlUp).Row
If .Cells(i, 1) = CInt(ComboBox1) Then
x = ListView1.ListItems.Count + 1
ListView1.ListItems.Add , "A" & i, .Cells(i, 1)
ListView1.ListItems(x).ListSubItems.Add , , .Cells(i, 2)
ListView1.ListItems(x).ListSubItems.Add , , i 'insertion N° ligne item
End If
Next
End With
à bientôt
 

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonsoir, le Forum, Bebere

si tu n'y arrives pas met un fichier

Effectivement je n'y arrive pas , ton code correspond à autre construction et donc , je vais devoir remodifier d'autres paramètres....si je m'y met à modifier certaines lignes...

Enfin , je pense,..

donc voici le fichier où cela bogue dans "Userform1 Initialize"

CAPRI_456
 

Pièces jointes

  • Copie de Copie de TRANSFERT MANIFESTES-LISTVIEW-02-06-09.zip
    60.4 KB · Affichages: 60

Bebere

XLDnaute Barbatruc
Re : "drag & drop" entre deux listview - bug de procédure !!

Capri voilà un début
ensuite n'avait rien à voir avec le code
pour le drag and drop le code que tu essayes d'employer est pour listbox

Private Sub UserForm_Initialize()
Dim Li As ListItem, L As Integer
Dim Col As Byte, NbCol As Byte

NbCol = 6

With Worksheets("Feuil1")
'entêtes pour les 2 listview
For Col = 1 To NbCol
ListView1.ColumnHeaders.Add , , .Cells(1, Col).Text, .Cells(1, Col).Width
ListView2.ColumnHeaders.Add , , .Cells(1, Col).Text, .Cells(1, Col).Width
Next Col

For L = 2 To Application.CountA(Range("A:A")) - 1
'1ère colonne
Set Li = ListView1.ListItems.Add(, , .Cells(L, 1).Text)
'colonnes suivantes
For Col = 1 To NbCol - 1
Li.SubItems(Col) = .Cells(L, Col + 1).Text
Next Col
Next L
End With

ListView1.View = lvwReport
ListView2.View = lvwReport
ListView1.FullRowSelect = True
ListView2.FullRowSelect = True
ListView1.Gridlines = True
ListView2.Gridlines = True
'autres propriétés listview
ListView1.CheckBoxes = True 'false
ListView1.HideColumnHeaders = True 'false
ListView1.AllowColumnReorder = True 'false
Me.Caption = TM

End Sub

à bientôt
 

Bebere

XLDnaute Barbatruc
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonsoir
après quelques recherches et essais,un bout de code pour le drag and drop qui fonctionne
clic gauche maintenu dans 1ère colonne
attention tu avais des erreurs dans la feuille,les formules sont corrigées
j'ai mis du texte pout t'indiquer l'endroit des chagements
à bientôt
 

Pièces jointes

  • MANIFESTES-LISTVIEW-CapriV1.zip
    36.6 KB · Affichages: 99

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

Le Forum, Bebere,

les élections terminées,
je reviens à vous dès que faire se peut
Bebere, merci pour cette avancée,
je l'ai implémenté (suis occupé à affiner)
je ferai suivre le dernier fichier adapté avec les avances

Bien à vous
Merci
 

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonjour le Forum, Bebere,

Voilà ou j'en suis le 09-06-09 dans MASTER
Etapes 1 à 3 , elles fonctionnent bien (pour le fil , j'ai neutralisé la connexion à outlook et mis les files test dans le rép ad hoc
Etape 4 (actuellement gérée par Cmdbtn3)
----il s'agit de boucler sur tous les 50 classeurs du rép
D:\ESSAIXLS et récupérer :
------pour col H (reste vide )---------------------------OK
----- pour col I et J la première valeur en A2 -----------OK
----- pour col K , le nombre ---------------------------PAS OK
----- pour col L à O le total ----------------------------PAS OK
------Ws.Cells(i + 1, 16) = Fichier
'pr ce dernier il faudrait un test servant à vérifier qu'il y a bien équivalence entre les fichiers affihés dans Master et les fichiers récupéres:(si pas msg box) arrête la boucle et affiche Msg Box

Voilà ou j'en suis le 09-06-09 dans LISTVIEW1 (drag/drop)
- ai introduit des images list en tête de col pour tris ----OK
- souhaite introduire image en col Origine vol en fonction key-- l'imagelist est introduite---mais apparemment j'ai un souci au niveau du Code

nb: il faut placer le zip dans un rép nommé D:\ESSAIXLS

Merci pour votre aide
CAPRI_456
 

Pièces jointes

  • ESSAIXLS.zip
    8.1 KB · Affichages: 50
  • ESSAIXLS.zip
    8.1 KB · Affichages: 47
  • ESSAIXLS.zip
    8.1 KB · Affichages: 48
  • MASTER_09_06_09.zip
    79.1 KB · Affichages: 58

CAPRI_456

XLDnaute Occasionnel
Re : "drag & drop" entre deux listview - bug de procédure !!

Bonjour le forum, Bebere,

-Voici les images dans le dossier essaiXLS

-j'ai apporté une solution pour le test d'équivalence et le reclassement par ordre des fichiers pour ce test

A +

CAPRI_456
 

Pièces jointes

  • ESSAIXLS.zip
    8.9 KB · Affichages: 65
  • Copie de MASTER_16_06_09.zip
    79.4 KB · Affichages: 68
  • ESSAIXLS.zip
    8.9 KB · Affichages: 62
  • ESSAIXLS.zip
    8.9 KB · Affichages: 68

Bebere

XLDnaute Barbatruc
Re : "drag & drop" entre deux listview - bug de procédure !!

bonjour Capri
un début de code,pour la suite je ne comprend pas ce que tu veux
j'ai mis un commentaire

'Attribute VB_Name = "Mod_boucleClass"

Sub TousFichiersDunDossier()
Dim Fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, I As Integer
Dim WkSource As Workbook, WsDest As Worksheet, Nom As String

Set Fso = CreateObject("Scripting.FileSystemObject")
NomDossier = ChoisirDossier
If NomDossier = "" Then Exit Sub
Set Dossier = Fso.getfolder(NomDossier)
Set WsDest = ThisWorkbook.Worksheets(1)

With WsDest
fichierfeuil = .Range("P2:p" & .Range("P1000").End(xlUp).Row)
End With

Set Files = Dossier.Files
If Files.Count <> 0 Then
' Sheets.AddLeft(fichierfeuil(I, 1), Len(fichierfeuil(I, 1)) - 4)
For Each File In Files
Nom = File.Name
For I = 1 To UBound(fichierfeuil)
If Right(Nom, 4) = ".xls" Then
If UCase(Nom) = UCase(fichierfeuil(I, 1)) Then
Set WkSource = Workbooks.Open(File.Name)
With WsDest'içi,explique ce que tu veux
.Cells(I, "I").Value = WsSource.ActiveSheet.Cells(I, "D").Value
.Cells(I, "J").Value = WsSource.ActiveSheet.Cells(I, "F").Value
.Cells(I, "K").Value = WsSource.ActiveSheet.Cells(I, "H").Value
.Cells(I, "L").Value = WsSource.ActiveSheet.Cells(I, "J").Value
.Cells(I, "M").Value = WsSource.ActiveSheet.Cells(I, "K").Value
.Cells(I, "O").Value = WsSource.ActiveSheet.Cells(I, "L").Value
.Cells(I, "P").Value = File.Name
End With
ActiveWorkbook.Close savechanges = False
End If
End If
Next I
Next File
End If
End Sub

Function ChoisirDossier()
Dim objShell, objFolder, chemin, SecuriteSlash

Set objShell = CreateObject("Shell.Application")
Set objFolder = _
objShell.BrowseForFolder(&H0&, "Choisisser un répertoire", &H1&)
On Error Resume Next
chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
If objFolder.Title = "Bureau" Then
chemin = "C:\Windows\Bureau"
End If
If objFolder.Title = "" Then
chemin = ""
End If

SecuriteSlash = InStr(objFolder.Title, ":")

If SecuriteSlash > 0 Then
chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
End If
ChoisirDossier = chemin
End Function

'ton code
Sub boucle()
Dim Repertoire As String, Fichier

Dim Wb As Workbook
Dim Ws As Worksheet
Dim I As Integer

Application.ScreenUpdating = True

'Définit la Première feuille du classeur contenant cette macro
'(pour recevoir les donnée extraites dans les autres classeurs).
Set Ws = ThisWorkbook.Worksheets(1)
With Ws
fichierfeuil = .Range("P2:p" & .Range("P1000").End(xlUp).Row)
End With
'Définit le répertoire de recherche
Set Dossier = "D:\ESSAIXLS\"
'Spécifie la recherche pour le fichiers .xls
Set Fichier = Repertoire.Files

'Boucle sur les fichiers du répertoire
Do While Fichier <> ""
'Vérifie que le nom du classeur est différent du classeur
'contenant cette macro (dans le cas ou il serait placé dans le même répertoire).
If ThisWorkbook.Name <> Fichier Then
'Ouvre chaque classeur
Set Wb = Workbooks.Open(Repertoire & Fichier)

I = I + 1
'Récupère le contenu de la cellule ...... dans chaque 1ere feuille des classeurs.
Ws.Cells(I + 1, 9) = Wb.Worksheets(1).Range("F2") 'sectorOri
Ws.Cells(I + 1, 10) = Wb.Worksheets(1).Range("D2") 'Produit
Ws.Cells(I + 1, 11) = Wb.Worksheets(1).Range("B2") 'NbAWB
Ws.Cells(I + 1, 12) = Wb.Worksheets(1).Range("H2") 'Nb colis
Ws.Cells(I + 1, 13) = Wb.Worksheets(1).Range("J2") 'Poids
Ws.Cells(I + 1, 14) = Wb.Worksheets(1).Range("K2") 'Volume
Ws.Cells(I + 1, 15) = Wb.Worksheets(1).Range("L2") 'Value
Ws.Cells(I + 1, 16) = Fichier
'ce dernier(sert à vérifier qu'il y a bien équivalence entre les fichiers affihés dans Master et les fichiers screenés

à bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 871
Membres
103 402
dernier inscrit
regishar