IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Drag and drop


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 61
    Points
    61
    Par défaut Drag and drop
    Bonjour

    j'ai essaye de faire un glissé / déposé

    Objectif: récupérer le chemin complet d'un ficher pour un traitement ultérieur

    aujourd'hui je me sers d'une listview,
    cela fonction bien depuis l'exploreur Windows
    mais pour Outlook, rien de va plus
    j' ai un message d'erreur

    Nom : CapScre_01.jpg
Affichages : 823
Taille : 20,3 Ko

    je désirais réaliser un glisser / déposer
    A partir d'une pièce joint dans mon email et glisser / déposer un email entier

    Voici ce que j'ai fait aujourd'hui comme code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim Long_Chaine As Long
        Dim PosCar_1 As Long     'Defini la position du dernier "\"
        Dim NomFile As String
        StrPath = Data.Files(1)
        Long_Chaine = Len(StrPath)
        For PosCar_1 = (Long_Chaine) To 1 Step -1
            If Mid(StrPath, PosCar_1, 1) = "\" Then GoTo Suite
        Next
    Suite:
        NomFile = Right(StrPath, (Long_Chaine - PosCar_1))
        With ListView1  
            .ListItems.Add , , NomFile
            .ListItems(.ListItems.Count).ListSubItems.Add , , StrPath
            .Refresh
        End With
    End Sub
    Devellopeur logiciel d'imagerie medicale

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    As-tu au moins regardé en mode debug la valeur de NomFile lorsque erreur ?
    Fais-le et indique-la nous, s'il te plait

    Par ailleurs :
    Regarde s'il te plait dans ton aide VBA ce que retourne la fonction InstrRev.
    Son utilisation devrait te permettre d'éviter, à la fois :
    et ta boucle for to next et cette vilaine méthode Goto.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 61
    Points
    61
    Par défaut
    Bonsoir unparia
    Je t'avoue je n'ai pas regardé la valeur en mode debug de NomFile
    je le fais demain matin en arrivant au bureau
    Par contre j'ai regardé la fonction InstrRev, j'ai modifier le code tu me diras ce que tu en penses

    En attendant merci de tes conseils

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim PosCar_1 As Long     'Defini la position du premier "\" dans le mode InstrRev
        Dim NomFile As String
        StrPath = Data.Files(1)
        PosCar_1 = InStrRev(StrPath, "\", , vbTextCompare) + 1
        NomFile = Mid(Chaine, PosCar_1, Len(StrPath))
        With ListView1
            .ListItems.Add , , NomFile
            .ListItems(.ListItems.Count).ListSubItems.Add , , StrPath
            .Refresh
        End With
    End Sub
    Devellopeur logiciel d'imagerie medicale

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    L'extraction de Nomfile dans la chaine traitée ira sans doute beaucoup mieux si, dans cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFile = Mid(Chaine, PosCar_1, Len(StrPath))
    tu remplaces Chaine, par la chaine traitée, à savoir StrPath, non ?

    Je saisis cette occasion pour te rappeler que l'utilisation de la fonction Mid, sans le second argument (de longueur) signifie : tout à partir de la position poscar_1 et donc --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFile = Mid(StrPath, PosCar_1)
    suffit parfaitement

    Pour le reste : je vais attendre que tu vérifies Nomfile en mode debug si erreur.

    EDIT : Et on traitera la listview de toutes manières, mais, après l'avoir traitée (juste pour que tout soit clair) : j'emploierai toute mon énergie pour te dissuader d'utiliser ce contrôle activex qui n'est pas un composant natif de VBA/Excel et t'inviter à utiliser de préférence le contrôle Listbox qui, lui, est natif de VBA/Excel.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    J'ai effectué les modifications du code
    j'ai fait le test en debug

    a partir d'un fichier dans l'exploreur ca fonctionne bien
    le data.files contient le nom du fichier le chemin absolus

    l'erreur surviens a partir de la ligne ( Quand je drop depuis un fichier en PJ dans un email

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrPath = Data.Files(1)
    Devellopeur logiciel d'imagerie medicale

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Mais c'est là totalement autre chose : le contenu même de ta variable Data !
    Et ce contenu, ce n'est pas du tout dans le code montré, qu'il a été défini, mais dans l'évènement OLEStartDrag de ta listview !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour !

    Citation Envoyé par mlww Voir le message
    mais pour Outlook, rien de va plus
    Et sur le forum Outlook, ils en disent quoi ?! …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 61
    Points
    61
    Par défaut
    Ben peut-être le mon problème,
    j'ai rien dans l'évènement OLEStartDrag de ta listview

    et dans UserForm Initialize j'ai ListView1.OLEDropMode = ccOLEDropManual
    Devellopeur logiciel d'imagerie medicale

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Points : 378
    Points
    378
    Par défaut
    Bonjour,

    trouver sur msdn :

    Le format spécifié ne correspond pas au format des données (Erreur 461)
    office 365 dev account|Dernière mise à jour: 29/09/2017|1 Contributeur

    Le format de Presse-papiers spécifié n'est pas compatible avec la méthode exécutée. Les causes et solutions de cette erreur sont les suivantes :

    Vous avez essayé d’utiliser la méthode GetText ou SetText avec un format Clipboard autre que vbCFText ou vbCFLink. Avant d’utiliser ces méthodes, utilisez la méthode GetFormat pour tester si le contenu actuel du Presse-papiers correspond au format indiqué.

    Vous avez essayé d’utiliser la méthode GetData ou la méthode SetData avec un format Clipboard autre que vbCFBitmap, vbCFDIBou vbCFMetafile. Avant d’utiliser ces méthodes, utilisez la méthode GetFormat pour vérifier si le contenu actuel de l’objet Clipboard correspond au format graphique indiqué.
    note que cela peut être lié au fait que beaucoup de mails contiennent une signature qui contient une image ce qui fait que tout n'est pas que du texte... mais ce n'est que mon avis et je ne connais pas grands chose au sujet.


    il te faudra probablement faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub txtTarget_OLEDragDrop(Data As _
          VB.DataObject, Effect As Long, Button As _
          Integer, Shift As Integer, X As Single, _
          Y As Single)
       If Data.GetFormat(vbCFText) Then
          StrPath = Data.GetData(vbCFText)
       End If
    End Sub
    à priori le problème peut être anticipé en informant la source de la compatibilité du format ou non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub txtTarget_OLEDragOver(Data As VB.DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
       If Data.GetFormat(vbCFText) Then
          Effect = vbDropEffectMove And Effect
       Else
          Effect = vbDropEffectNone
       End If
    End Sub
    A toi de voir car tout est ici : msdn

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Phil Free
    Le code que tu as "trouvé" s'applique à une listview sur VB5 ou VB6.
    Le type utilisé sous VBA n'est pas le type VB.DataObject
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    j' ai regardé dans le forum Outlook,
    je n'ai rien trouvé..

    Citation Envoyé par Marc-L Voir le message
    Bonjour !

    Et sur le forum Outlook, ils en disent quoi ?! …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    Devellopeur logiciel d'imagerie medicale

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. "Drag and drop" avec directinput
    Par batosai dans le forum DirectX
    Réponses: 1
    Dernier message: 16/06/2004, 16h48
  3. [VB.NET] Microsoft TreeView drag and drop ?
    Par bigtoof dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/05/2004, 14h50
  4. [JSP][DRAG AND DROP]
    Par hamed dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 23/01/2004, 17h36
  5. drag and drop
    Par jujuesteban dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/06/2003, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo