XL 2021 Module d’envoi à la Corbeille qui ne fonctionne pas en 64 Bits

AR MOR

XLDnaute Nouveau
Bonjour,

J’ai deux PC portables du même tonneau. Les deux, sous Wind 11.

L’ancien avec Office 21 (32 bits), et le nouveau idem, mais en 64 bits.

Voici le problème que je ne parviens pas à résoudre malgré une foultitude de recherche sur le web

Mon code pour envoyer un fichier choisi à la corbeille fonctionne parfaitement en 32 bits

Mais en 64 bits, malgré mes ajouts de « PtrSafe »,

j’ai un plantage immédiat. (Voire même sans bug, mais rien n’a bougé)

Ceci est très dommageable pour moi, car j’ai une bonne poignée d’applications où j’utilise ce module.

A noter :

Test à faire avec un dossier où vous aurez mis une dizaine de Fichiers dont 2 ou 3 « Raccourcis »

Pour ce qui est des liens que j’ai pu trouver sur le web, ce sont bien souvent des usines à gaz pas buvables, surtout pour moi qui est n’a pas toujours bien compris le fonctionnement des Fonctions.

Si quelqu’un peut m’aider, je l’en remercie par avance.

Je saurai renvoyer l’ascenseur, si une question entre dans le domaine de ce que je sais faire.

En PJ, Le Classeur qui marche en 32 (Pas la pointure !!!)
 

Pièces jointes

  • REPURGATEUR.xlsm
    26.3 KB · Affichages: 5

AR MOR

XLDnaute Nouveau
Oups j'ai du te renvoyer le fichier téléchargé
Regarde celui-ci à affiner
Re sousou

Merci d’avoir investi ce temps à me construire ton code.

Beau travail, mais il y a des mots que je n’utiliserai jamais plus de ma vie :

« Kill » ou « Dilete » sur un Chemin.

J’ai eu trop de mauvaises surprises par erreur de rédaction genre slaches ou points

De plus, cela ne permet pas de restaurer, si besoin, les fichiers supprimés.

Bonne soirée, et encore Merci
 

sousou

XLDnaute Barbatruc
Il faut simplement qu au lieu de les delete tu les copies dans une corbeille qui t es propre.
Ou dans la corbeille windows ensuite tu les effaces
Un exemple avec une corbeille sur le bureau.
Dans ton cas tu ne peux pas avoir d'erreurs de rédactions, car c'est l'appli qui génère les noms de fichiers :)
 

Pièces jointes

  • REPURGATEUR.xlsm
    32.3 KB · Affichages: 3
Dernière édition:

AR MOR

XLDnaute Nouveau
Il faut simplement qu au lieu de les delete tu les copies dans une corbeille qui t es propre.
Ou dans la corbeille windows ensuite tu les effaces
Un exemple avec une corbeille sur le bureau.
Dans ton cas tu ne peux pas avoir d'erreurs de rédactions, car c'est l'appli qui génère les noms de fichiers :)
J'ai aussi fait, faute de solutions, un module qui déplace les fichiers voués à la corbeille dans un Dossier que j'ai appelé "POUB"
Parallèlement, j'écris son origine dans une feuille, et sa destination dans "POUB"
J'ai donc par cette mémoire, la possibilité des les restaurer.
Comme quoi les beaux esprits se rencontrent :)
Merci Breizh izel
 
Dernière édition:

AR MOR

XLDnaute Nouveau
Il semble que j'ai trouvé.......

Bonjour,

Mon sujet n’ayant pas attiré les foules, j’en déduis que nous ne sommes pas nombreux à naviguer en Office 64 bits (Ma copine dit aussi que c’est un peu trop dans son office)

Causant un peu le Rosbeef des voisins du dessus, j’ai trouvé ici belle idée que j’ai exploitée :

https://www.mrexcel.com/board/threads/send-files-to-the-recycle-bin-in-vba.950327/

Je n’ai pas tout épuré !!!

Mais je ne puis m’empêcher de vite vous livrer ma bidouille adaptée qui fonctionne.

Merci encore à ceux qui ont participé, en espérant avoir fait un peu avancer ce drible contre Bill.

Au plaisir,

PS. En 32, cela ne marche pas. Il faut alors garder l'autre code (Cf Premier Post)
 

Pièces jointes

  • EBOUEUR.xlsm
    32.9 KB · Affichages: 0
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour
chez moi 2013 32 bits VBA7 - 2016 64 bits VBA7 - 2007 VBA6 32 bits ça fonctionne
VB:
Private Type RECHERCHE
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type

#If VBA7 Then32/64 en vba7 c'est pareil
    Private Declare PtrSafe Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As RECHERCHE) As Long
#Else'sinon vba6
    Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As RECHERCHE) As Long
#End If

Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
' Remplacé par (+&H10) pour éviter le message de confirmation.
'Private Const FOF_ALLOWUNDO = &H40 Or &H10
Sub test()
    POUBELLE "C:\Users\patricktoulon\Desktop\toto.txt"
End Sub
Public Function POUBELLE(Fic As String) As Boolean
    Dim FICHIER_A_VIRER As RECHERCHE
    Dim RETOUR As Long
    With FICHIER_A_VIRER
        .wFunc = FO_DELETE
        .pFrom = Fic 'Fichier sélectionné
        .fFlags = FOF_ALLOWUNDO
    End With
    RETOUR = SHFileOperation(FICHIER_A_VIRER)
    ' A VOIR:
    'CONFIRMATION_SUPPRESSION = SHFileOperation(FICHIER_A_VIRER)
    'CONFIRMATION_SUPPRESSION = 0 => Suppression effectuée, 'CONFIRMATION_SUPPRESSION = 1223 => Opération abandonnée
End Function

Sub VIA_CORBEILLE()
    Dim REBUS As String
    For i = 1 To BOITE.ListView1.ListItems.Count
        If BOITE.ListView1.ListItems(i).Checked = True Then
            REBUS = REBUS & BOITE.ListView1.ListItems(i).Text & Chr(0)
        End If
    Next i
    REBUS = REBUS & Chr(0)
    POUBELLE (REBUS)
End Sub
 

AR MOR

XLDnaute Nouveau
Bonjour
chez moi 2013 32 bits VBA7 - 2016 64 bits VBA7 - 2007 VBA6 32 bits ça fonctionne
VB:
Private Type RECHERCHE
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
End Type

#If VBA7 Then32/64 en vba7 c'est pareil
    Private Declare PtrSafe Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As RECHERCHE) As Long
#Else'sinon vba6
    Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As RECHERCHE) As Long
#End If

Private Const FO_DELETE = &H3
Private Const FOF_ALLOWUNDO = &H40
' Remplacé par (+&H10) pour éviter le message de confirmation.
'Private Const FOF_ALLOWUNDO = &H40 Or &H10
Sub test()
    POUBELLE "C:\Users\patricktoulon\Desktop\toto.txt"
End Sub
Public Function POUBELLE(Fic As String) As Boolean
    Dim FICHIER_A_VIRER As RECHERCHE
    Dim RETOUR As Long
    With FICHIER_A_VIRER
        .wFunc = FO_DELETE
        .pFrom = Fic 'Fichier sélectionné
        .fFlags = FOF_ALLOWUNDO
    End With
    RETOUR = SHFileOperation(FICHIER_A_VIRER)
    ' A VOIR:
    'CONFIRMATION_SUPPRESSION = SHFileOperation(FICHIER_A_VIRER)
    'CONFIRMATION_SUPPRESSION = 0 => Suppression effectuée, 'CONFIRMATION_SUPPRESSION = 1223 => Opération abandonnée
End Function

Sub VIA_CORBEILLE()
    Dim REBUS As String
    For i = 1 To BOITE.ListView1.ListItems.Count
        If BOITE.ListView1.ListItems(i).Checked = True Then
            REBUS = REBUS & BOITE.ListView1.ListItems(i).Text & Chr(0)
        End If
    Next i
    REBUS = REBUS & Chr(0)
    POUBELLE (REBUS)
End Sub
Merci Patricktoulon pour ton regard,

Allez à Toulon, c’est pour moi too long, mais je suis resté accro de LA CRAU,

(Pas kronenbourg), mais de là où vivait du coté des moutons de Carquerane,

la plus belles de mes compagnes.

Je vais regarder et tester ce que tu as fait de mon code initial.

Pour l’instant ton « POUBELLE "C:\Users\patricktoulon\Desktop\toto.txt" m’étonne,

car tu gardes la boucle sur la ListView.

Bonne soirée à toi et à ceux qui suivent.
 

patricktoulon

XLDnaute Barbatruc
re
a ben c'est pas loin de chez moi ;10 bornes a tout casser
je connais bien

la fonction poubelle doit recevoir
soit le string du chemin du fichier
soit les string de plusieurs chemin de fichier séparés par un car(0)
les fonctions fonctionnent très bien je les ai testés bien évidemment