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

AppleScript Discussion :

Encodage en ISO latin 1 [AppleScript]


Sujet :

AppleScript

  1. #1
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut Encodage en ISO latin 1
    Bonjour,

    PS : bon, j'ai bien l'impression que le maitre des lieux ici c'est @PBELL

    suite à mon post précédent, j'ai fait des recherches sur internet et je me dirige vers ce qui suit pour tenter de trouver une solution :

    J'aimerai avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choose file with prompt  "Sélectionner un ou plusieurs fichiers:"
    1 - récupérer le résultat mais encodé en ISO latin 1 pour Excel Mac 2011
    ou
    2 - que le résultat soit donné en ISO latin 1 si c'est possible
    ou
    - a moins que ce ne soit pas possible mais qu'avec AppleScript on puisse créer un fichier texte du résultat encodé en ISO latin 1

    Parmi toutes ses propositions, qu'est ce qui est possible de faire et comment le faire svp?

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Tout d'abord, je précise qu'il ne peut y avoir un maître des lieux dans un espace collaboratif.

    Pourquoi ISO latin 1 ? Ce codage est de moins en moins utilisé grâce à Unicode.
    En fait, ce que je ne comprends pas dans ta demande, c'est la source du problème.
    Pourrais tu donner un exemple de nom de fichier ou de dossier qui te pose un problème lorsque tu le mets dans Excel 2011 (dans une cellule j'imagine).
    J'ai cette même version d'Excel et je n'ai jamais rencontré de problème de ce type.

    Il est vrai que je n'utilise jamais de caractères spéciaux dans mes noms de fichiers pour éviter des désagréments entre plateformes.

    Cordialement

  3. #3
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,
    Tout d'abord merci de ton intérêt à ma demande.
    Bonjour,
    Tout d'abord, je précise qu'il ne peut y avoir un maître des lieux dans un espace collaboratif.
    Je suis tout à fait d'accord (j'aurais dû mettre un smiley sur ma phrase pour spécifier que c'était sur le ton de l'humour).
    C'est juste qu'en voyant les dates de réponses et les interventions cela donne l'impression qu'il n'y a pas grand monde, et que tu es quasi le seul intervenant.

    Je vais essayé d'être le plus précis possible :
    Mon but est de régler un problème sur la récupération du chemin ayant des accents avec "choose file" dans Excel pour :
    - le résultat dans la fenêtre des variables locales,
    - le résultat dans un MsgBox
    - le résultat dans le Debug.Print
    - et lorsque le résultat est copié dans une cellule (mais là c'est un peu plus vicieux, cf explication plus bas)

    Je vais détailler le résultat de mes tests :

    • exemple pour un chemin récupérer avec "choose file" du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Macintosh HD:Users:TOTO:Desktop:DoublonsOK2:l'indice n'appartient pas à la sélection. Toto.xls"
    Le résultat sera :

    Dans le debug.print, les variables locales et le MsgBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Macintosh HD:Users:TOTO:Desktop:DoublonsOK2:l'indice n'appartient pas a_ la se_lection. Toto.xls"
    - concernant les chemins sans accents, on est d'accord ça ne pose pas de souci ( bien que dans ce cas le problème reste masqué)

    - lorsque ce même chemin est copié dans une cellule, A1 par exemple, il apparaît dans celle-ci correctement,
    mais quand je veux l'afficher dans un MsgBox je me retrouve avec ce même problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Macintosh HD:Users:TOTO:Desktop:DoublonsOK2:l'indice n'appartient pas a_ la se_lection. Toto.xls"
    le fait de copier A1 en A3 de cellule à cellule ou de copier le contenu de la cellule pour le mettre en A3 ne change rien au problème

    à contrario, si j'écris manuellement ce même chemin dans une cellule, en B2 par exemple, il apparaitra correctement dans :
    - le MsgBox
    - le Debug.Print
    - la fenêtre des variables locales

    C'est pour cela que je recherche au niveau de l'encodage dont l'ISO latin 1 me parait être la solution (peut être)
    comme Excel 2011 date, il se peut que lorsque celui-ci récupère les données via une autre application (en l'occurence par le biais de MacScript), l'encodage ne serait pas en UTF8 (à moins que cela soit un bug)
    ???

    voilà

    Edit : à moins que tu entrevois une autre cause à ce problème …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Citation Envoyé par RyuAutodidacte Voir le message
    C'est juste qu'en voyant les dates de réponses et les interventions cela donne l'impression qu'il n'y a pas grand monde, et que tu es quasi le seul intervenant.
    C'est bien avec le même humour que j'avais répondu.. Effectivement cette partie du site semble se vider...

    Merci pour tes explications. Mes essais m'amènent aux mêmes conclusions.
    il est assez surprenant d'ailleurs que Excel soit parfaitement capable d'afficher la cellule avec les accents, mais ne soit pas capable d'utiliser ce qu'il affiche.
    Voici le premier script utilisé pour remplir la cellule Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set MaString to (choose file "selection du fichier") as Unicode texttell application "Microsoft Excel"
    activate
        set value of range ("A1:A1") to MaString
    end tell
    J'ai essayé avec ou sans "unicode" et aussi avec ou sans «class utf8».
    Rien ne change ! Le texte avec accent est toujours correctement affiché mais Excel ne sait l'utiliser.
    Comme toi, le fait de taper le même texte en direct ne pose pas de problème. C'est ce que j'ai appelé ma cellule "témoin".
    j'ai essayé en direct ou via VBA script des copier/coller normaux, en valeur seulement, pour la cellule ou pour la feuille complète sans plus de succès.

    J'ai essayer d'enregistrer le fichier sous différents formats (xls, txt, cdv, windows formatted text, UTF16, tab delimited) puis de lire via textEdit le résultat : peine perdue Excel recode incorrectement toujours la cellule sans toucher à la cellule témoin.


    J'ai fini par changer mon fusil d'épaule !
    J'ai fait un Applescript qui écrit le texte sous forme d'un fichier, puis Excel le relit, en direct ou via vba.

    Nouveau script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set MaString to (choose file "selection du fichier") as Unicode textset F to "ElCapitain:Users:imac27:Desktop:Fichier.txt"
    set FP to (open for access file F with write permission)
    set eof of FPto 0
    write ((ASCII character 239) & (ASCII character 187) & (ASCII character 191)) toFP
    write MaString to FP as «class utf8»
    close access FP
    Celui-ci écrit en UTF8 (en forçant l'entête pour être sûr). J'ai aussi fait une variante qui écrit en Unicode.
    Dans les 2 cas, j'ouvre Excel en direct et demande à ouvrir le fichier enregistré avec ce script.

    J'ai testé en ouvrant le fichier avec différent set de caractères proposé par Excel (lors de la conversion du fichier texte) : la majorité donne des résultats fantaisistes. Seuls quelques uns comme Unicode, Unicode Little Endian ou Unicode 7.0 UTF7 donnent un résultat approximatif, c'est à dire le texte correct mais sans les accents. (c'est lisible au moins, mais ne réponds pas à la question)

    Ce qu'il reste à faire (mais je n'ai plus de courage à cette heure) serait de lire, via VBA, la cellule caractère par caractère pour connaitre les valeurs des caractères et d'effectuer un transcodage sur une routine VBA.


    In finé, je pense que c'est bien Excel qui a un problème de "compatibilité"...avec lui-même !! (ce ne serait pas le première fois)
    Je ne peux essayer avec Excel 2016 que ne j'ai pas.

    Bon, en résumé, je n'ai pas résolu ton problème malgré les 2 heures passées dessus. J'en suis désolé.
    Je crois que le "maitre" vient de prendre une claque

    Cordialement

    PS: je ne mettais pas d'accents sur les fichiers/dossiers depuis 1980 car les systèmes de l'époque ne l'acceptaient pas. J'ai continué depuis par habitue, mais je sais aujourd'hui pourquoi j'ai toujours raison de le faire !

  5. #5
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,
    Merci du temps passé
    juste une dernière chose, j'avais fait un autre test, mais je n'avais pas les éléments sous les yeux
    Avec TextEdit j'ai créé un nouveau doc, que j'ai mis en mode Texte (et pas RTF), j'ai copié la phrase et fait une ligne avec des accents quelconques (cf ci-dessous) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    éààôîï
    Macintosh HD:Users:TOTO:Desktop:DeveloppezCom:l'indice n'appartient pas à la sélection - au 2e passage:FichierMaitre.xlsm1
    j'ai essayé plusieurs formats dont l'utf8, mais le seul qui donné le résultat à l'enregistrez sous c'est Occidental (Windows latin 1)
    donc en testant avec ce code :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub t()
    Workbooks.Open "Macintosh HD:Users:Toto:Desktop:Encodage1 - copie.txt"
    End Sub
    il ouvre un fichier Excel avec le text correct
    ça rempli la cellule A1 et A2
    si je fais un MsgBox dur la cellule A1 ou A2 tout s'affiche correctement

    Je sais que tu m'as dit :
    Pourquoi ISO latin 1 ? Ce codage est de moins en moins utilisé grâce à Unicode.
    et
    J'ai essayer d'enregistrer le fichier sous différents formats (xls, txt, cdv, windows formatted text, UTF16, tab delimited) puis de lire via textEdit le résultat : peine perdue Excel recode incorrectement toujours la cellule sans toucher à la cellule témoin.
    Mais j'ai pas vu de test ISO latin 1.

    Ce que je voyais par rapport à ce que tu as écris (j'ai un niveau assez faible en AppleScript, mais j y travail) c'est un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set MaString to (choose file "selection du fichier") as Unicode text
    mais plutôt avec ISO latin 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set MaString to (choose file "selection du fichier") as ISO latin 1
    le problème c'est que j'ai essayé de différentes manières et écritures et je n'ai pas réussi.
    peux tu m'aider stp ? même si ISO latin 1 est de moins en moins utilisé
    (je dirais cas particulier par rapport à Excel 2011)

    sinon j'ai continué à chercher et j'ai réussi à faire qq ch mais j'ai du prendre un détour (j'aurais préféré le chemin direct) - je suis passé par le presse papier en détour

    1er code à faire dans excel, celui ci n'est pas sans défaut dans le résultat (qq ch que j'ai du mal à expliqué)
    quand on réitère plusieurs fois le code il rajoute dans le résultat des caractère à la fin du string quand il passe à Excel - j'ai peut être une idée mais là aussi j'aurais besoin d'aide
    une Sub + une fonction
    Code vba : 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
    19
    20
    21
    22
    23
    24
    Sub NewTest()
     
        MyPaths = MacScript("set source to choose file with multiple selections allowed" & Chr(13) & _
        "set p to """"" & Chr(13) & _
        "repeat with fileToCopy in source" & Chr(13) & _
        "set p to p & fileToCopy & return" & Chr(13) & _
        "end repeat" & Chr(13) & _
        "set the clipboard to """" & p & """" as Unicode text")
        MyPaths = PresPap
     
        For I = 1 To UBound(Split(MyPaths, vbNewLine))
            Debug.Print Split(MyPaths, vbNewLine)(I - 1)
        Next
     
        PresPap
     
    End Sub
     
    Function PresPap()
    Dim PP As New MSForms.DataObject, Txt As String
    PP.GetFromClipboard
    Txt = PP.GetText()
    PresPap = Txt
    End Function
    alors comme je le disais si tu fais plusieurs fois le code il rajoute des caractères en plus à la fin du résultat
    Mon idée c'est que dans le script j'ai utilisé une boucle (trouvé sur le net) que j'ai pu utilisé correctement - voilà en applescript ce que j'ai fait et que j'ai mis en vba :
    PS : ce code à légèrement été modifié pour le prochain code vba que je vais montré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set source to choose file with multiple selections allowed
    set p to ""
    repeat with fileToCopy in source
        set p to p & fileToCopy & return
    end repeat
    set the clipboard to (count (p)) & "__" & p & "" as Unicode text
    le problème pour moi c'est qu'à la fin de la boucle on se retrouve avec un retour chariot en trop (surtout gênant dans le 1er code vba ci-dessus), j'aimerai pourvoir le supprimer dans le code AppleScript
    (je pense que c'est peut être la raison des ajout de caractères dans le résultat d'excel)

    le code suivant c'est la manière dont j'ai contourné le problème (ajout de caractères dans le résultat sans aucune raison apparente) :
    une Sub + une fonction
    Code vba : 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
    19
    20
    21
    22
    23
    24
    Sub NewTest2()
     
        MyPaths = MacScript("set source to choose file with multiple selections allowed" & Chr(13) & _
        "set p to """"" & Chr(13) & _
        "repeat with fileToCopy in source" & Chr(13) & _
        "set p to p & fileToCopy & return" & Chr(13) & _
        "end repeat" & Chr(13) & _
        "set the clipboard to (count (p)) - 1 & ""__"" & p & """" as Unicode text")
        MyPaths = PresPapier
        MyPaths = Left(Split(MyPaths, "__")(1), Split(MyPaths, "__")(0))
        'MyPaths = Split(MyPaths, vbNewLine)
     
        For I = 1 To UBound(Split(MyPaths, vbNewLine))
            Debug.Print Split(MyPaths, vbNewLine)(I - 1)
        Next
     
    End Sub
     
    Function PresPapier()
    Dim PP As New MSForms.DataObject, Txt As String
    PP.GetFromClipboard
    Txt = PP.GetText()
    PresPapier = Txt
    End Function

    Merci d'avance pour ton aide

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  6. #6
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Applescript ne connait que les classes Unicode et UTF8.
    D’ailleurs, depuis la version 10.5, Applescript est, par défaut, entièrement en Unicode.
    Donc pas de salut de ce côté pour le ISO latin 1 !

    J'ai poursuivi mes investigations, comme passer via un fichier texte dans Applescript et relire ce fichier texte dans Excel (avec tous les formats possibles, y compris le Latin 1) : sans succès.

    Puis, j'ai fini par prendre le problème à l'envers. Si le but est d'avoir un nom de fichier avec son chemin reproduit correctement sur Excel, malgré les accents, pourquoi ne pas directement demander à VBA de le faire ?

    J'ai essayé et ça fonctionne très bien. Voici le code en VBA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    Fichier = Application.GetOpenFilename()
    MsgBox Fichier
    End Sub
    J'ai testé avec le fichier "Sélection" dans le dossier "Choses à faire" et les é et à sont parfaitement reproduits dans la variable Fichier.
    Le résultat est un chemin "Finder" dont les séparateurs de chemin sont les ":", par exemple : Disque:Users:MonUser: Desktop:Chose à faire:Sélection.xsl

    Je ne peux savoir si cette solution est valide pour toi car je n'ai pas la vue d'ensemble de ton programme et des implications éventuelles entre Applescript et VBA.
    Saches qu'il y a des limitations sur Mac avec le GetOpenFileName par rapport à la version Excel.
    Pour les contourner, il faut faire un mélange AS / VBA. Ron de Bruin a publié à ce sujet les scripts adéquats à cette adresse : http://www.rondebruin.nl/mac/mac015.htm

    Je te laisse le soin de tester cette solution afin de vérifier qu'elle ne recrée pas le problème des caractères spéciaux.

    Cordialement

  7. #7
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Hi,
    Je vois que t'a pas essayé mon code VBA NewTest 2 qui contourne le problème

    he oui je suis déjà en train de faire ma propre version car celle de RondeBruin qui est a rallonge et ou l'on se noit dedans me convient pas
    Mes questions sont en rapport avec ce post

    comme tu le dis et ça je le savais que GetOpenFilename est plus que limité

    je retravaillé un peu ma version hier sur le problème - test et tu verras; pour moi le résultat est là et contourne un problème que Ron n'avait pas fait
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub NewTest2()
    Dim PP As New MSForms.DataObject, Txt As String
     
        MyPaths = MacScript("set source to choose file with multiple selections allowed" & Chr(13) & _
        "set p to """"" & Chr(13) & "repeat with fileToCopy in source" & Chr(13) & "set p to p & fileToCopy & return" & Chr(13) & "end repeat" & Chr(13) & _
        "set the clipboard to (count (p)) - 1 & ""__"" & p & """" as Unicode text")
     
        PP.GetFromClipboard: MyPaths = PP.GetText(): MyPaths = Left(Split(MyPaths, "__")(1), Split(MyPaths, "__")(0))
        Paths = Split(MyPaths, vbNewLine)
     
        For Each Chm In Paths
            Debug.Print Chm
        Next
     
    End Sub
    je n'ai plus qu'à ajouté le choix des extensions, multi-sélection et d'un dossier de départ - je vais en faire une fonction avec option

    je te ferais part de la version finalisé si ça te dit

    Merci de ton aide

    PS : j'aurais surement d'autres sujet à ouvrir dans peu de temps concernant AppleScript ;-)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  8. #8
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Oui, effectivement je suis passé sur ton code VBA sans y être entré vraiment. A ce moment j'étais plus focalisé sur une solution AS.
    Désolé.

    Il semble donc que le copier/coller traduise correctement les accents. Excel est vraiment bizarre parfois.

    Quant aux choix des extensions et du dossier du dossier de départ, il faut completer ton premier "set souche to choose file..." avec les paramètres standard du choose file:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set source to choose file with prompt "Sélectionner les fichiers Excel" of type {"XLSX"} default location ("Users:imac27:Desktop" as alias)
    Le paramètre "type" est une liste contenant autant de types de fichier que tu souhaites filtrer.
    Le paramètre "default location" est le dossier qui sera présenté à l'utilisateur (ici le bureau de l'utilisateur imac27)

    Cordialement

  9. #9
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    Merci pour ces infos je les avais déjà glané sur le net (regarde ce post)

    Je crois bien que je vais faire renaitre de ses cendres le forum AppleScript

    là je suis en train de travailler ma function vba et je me retrouve face à un problème parmi les 3 options de ma fonction vba il y a celle de la multi selection de fichiers qui pose souci, je m'explique :

    En VBA j'utilise en option "with multiple selections allowed" donc soit je l'affiche dans mon code ou pas
    En AppleScript j'utilise aussi une boucle pour pré-gérer le résultat final à envoyer.
    je viens de me rendre compte lorsque "with multiple selections allowed" ne doit pas s'afficher, je n'ai plus de résultat à cause de la boucle que j'ai fait
    Donc je me suis dit je vais faire une condition If quand "with multiple selections allowed" n'est pas affiché (c'est en vba que je décide de l'afficher ou pas dans le script), grosso modo c'est qq chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set source to choose file --with multiple selections allowed
    if  not with multiple selections allowed then
    	source as Unicode text
    else
    	set p to ""
    	repeat with fileToCopy in source
    		set p to p & fileToCopy & return
    	end repeat
    	set the clipboard to (count (p)) & "__" & p & "" as Unicode text
    end if
    Bon c'est sur que je m'y suis mal pris et ça ne donne rien, je continue de chercher
    mais si tu as suggestion je suis preneur
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  10. #10
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bon, j'ai réussi à faire qq chose;
    es-t-il possible d'avoir ton avis ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    set source to choose file --with multiple selections allowed
    set p to ""
    repeat with fileToCopy in source
    	set p to p & fileToCopy & return
    end repeat
    if p = "" then
    	set S to source as Unicode text
    	display alert S
    else
    	set toto to (count (p)) & "__" & p & "" as Unicode text
    	display alert toto
    	--set the clipboard to (count (p)) & "__" & p & "" as Unicode text
    end if
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #11
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    En lisant ton code, je ne comprends pas le "if p = ""...".


    Les lignes 1 a 5 sélectionnent un ou plusieurs fichiers et construisent p comme étant une suite de de fichiers suivis d'un return. Cela se termine donc par un return. Je crois comprendre que ce n'est pas ce que tu veux.
    Donc si P est toujours vide à l'issue de la boucle, c'est que rien n'a été sélectionné: donc source est vide aussi, alors pourquoi mettre "set S as source as Unicode" ?

    Par ailleurs, tu ne gères pas le cas où l’utilisateur va annuler au lieu de sélectionner des fichiers.

    Voici le script ci-dessous qui utilise les propriétés des classes text et string. La classe Text permet la conversion de liste en string (ou vice versa) avec insertion de séparateurs appelés "text item delimiters". J'ai utilisé cette propriété avec un délimiteur "return".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set AppleScript'stext item delimiters to return-- défini un return comme délimiteur de texttry
        set source to (choose file with multiple selections allowed)
        set C to ((count of source) as string) & "__"
    on error
        set C to "0__" -- l'utilisateur à annuler sans sélectionner de fichier
        set source to ""
    end try
    set the clipboard to (C & (source as text)) as string

    Le bloc try/end try gère l'annulation par l'utilisateur. Dans ce cas, la variable C contiendra "0__"
    Sinon elle contient le nombre de fichiers choisis suivi de "__"

    La dernière ligne est un raccourci qui combine plusieurs fonctions:
    1) (source as text) converti la liste des alias de fichiers choisis en un texte en insérant un return entre chaque élément de la liste.
    2) le "C &" ajoute bien sûr le nombre de fichiers suivi de "__"
    3) enfin la coercition du résultat en string évite que AS ne l'interprète comme un texte (donc en ajoutant un délimiteur return) ou comme liste.
    4) le tout est copié dans le clipboard.

    Je précise que le résultat est une string (par défaut AS fait de l'Unicode) avec le format : Nbfichier__fichier1 return fichier2 return fichiers3...
    Sans return après le dernier fichier.


    J'espère avoir été clair.

    Cordialement

  12. #12
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,
    le p = "" est en fait là quand j'enlève l'option "with multiple selections allowed"
    car j'ai remarqué que chez moi ça me renvoyer du vide quand je suis dans ce cas même si j'ai bien sélectionné un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set source to choose file --with multiple selections allowed => option sans multi-sélection
    set p to "" 
    repeat with fileToCopy in source
        set p to p & fileToCopy & return
    end repeat
    set the clipboard to (count (p)) & "__" & p & "" as Unicode text
    et dans ce cas là je ne sais pourquoi, mais j'ai aucun chemin de récupérer

    le : est en fait là pour me compter le nombre de caractère dans le résultat, ce qui me permet de pallier à un bug qui peut arriver de temps à autre
    je split dans excel et je Left le résultat, comme cela je me retrouve pas avec des caractères supplémentaires à la fin du résultat
    souviens toi en je me demandais si la cause ne venait pas du retour chariot en trop dans mon résultat mis par la boucle

    je vais regarder ce que tu as fait et essayer de le comprendre
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #13
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour PBELL,

    PS : A nous 2 tu crois que l'on peut faire renaître le forum AppleScript ?

    Ca y est j'ai pu finalisé la fonction GetOpenFilename à ma sauce => Grand à toi

    J'ai commencé, puisque j'avais déjà bien avancé, par régler tous les détails avec mon code modifié avec le If , entre AppleScritp et VBA et une fois finalisé, et que toutes les vérifications étaient OK;

    Je me suis attaqué au code que tu m'as proposé, j'ai du le modifié pour qu'il corresponde exactement à mes exigences, par rapport aux différents tests que j'ai pu faire,
    afin de contourner l'ensemble des bugs possibles

    le délimiteur c'est exactement ce qu'il me fallait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     set AppleScript's text item delimiters to return
    Concernant le chiffre à récupérer, ce n'est pas le nombre de chemins récupéré dont j'ai besoin, mais du nombre de caractères de l'ensemble des chemins (pour pallier à un bug)
    Donc j'ai refait mon code VBA avec ton code AppleScript que j'ai modifié, ce qui donne pour le code AppleScript (dans sa globalité car en VBA il y a des options) :
    PS : en fait l'erreur j'ai décidé de la gérer dans VBA et pas dans AppleScript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set AppleScript's text item delimiters to return
    set source to (choose file with prompt "Sélectionner un ou plusieurs fichiers :" of type {"PNG", "XLS", "PDF"} default location (path to desktop folder) with multiple selections allowed) as text
    set the clipboard to (count (source)) & source as Unicode text
    Le résultat :

    Le 1er code (ce que j'ai fait pour tester et finaliser):
    Code vba : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub TestSelectionFichier()
    On Error Resume Next
        Paths = GetOpenMyFiles(, "Macintosh HD:Users:KAB:Desktop:DeveloppezCom:", True) 'l'indice n'appartient pas à la sélection - au 2e passage:
            If Err.Number = 5 Then MsgBox "Sélection du/des Fichier(s) annulée" ': Exit sub
     
        For Each chm In Paths
            Debug.Print chm
            i = i + 1
            Range("A" & i) = chm
        Next
    On Error GoTo 0
     
    End Sub
     
    '========================================================================================================================
    '========================================================================================================================
    'Auteur:  RyuAutodidacte - Version 1
    'Créé le 25/02/2017 à la sueur de mes neurones  :)
    '
    'Fonction permettant de remplacer GetOpenFileName sur Mac et là, les accents sont pris en compte (bien que déconseillé de nommer des repertoires/fichier avec accents)
    '
    'GetOpenMyFiles(Extension, Dossier de départ, multi-sélection en On/Off)
    '
    '--- Nommage des extensions ==>string entre 2 guillemets - séparation des extensions par une virgule sans espaces : Exemple : "pdf,xls" ou bien "xlsm,txt,pdf,psd"
    '--- Choix du dossier de départ -> string ==> si vide "le bureau" est choisi d'office - sinon mettre un repertoire, ex : ""Macintosh HD:Users:KAB:Desktop:DeveloppezCom:GetOpenMyFiles:"
    '--- Multi-selection de fichier ==> Boolean : par défaut la selection est unique, mettre True pour une sélection multiple
     
    '------>  Merci à PBELL, l'un des seul rescapé du forum AppleScript ;),, heureusement qu'il est toujours présent :D, pour son aide afin que j'y vois plus clair et de sa contribution
    '------>  Merci  à joe.levrai de m'avoir donné la bonne direction à prendre
    '========================================================================================================================
    Function GetOpenMyFiles(Optional MyExt As String, Optional D_Location As String, Optional MultiSelection As Boolean = False) As Variant
    Dim ScExt$, D_Loc$, MultiFiles$, MyPaths As String, PP As New MSForms.DataObject, MyPaths As String, Paths
     
        '----- PARAMETRES : EXTENSIONS--------------------------------------------------------------------------------
        For Each Ext In Split(MyExt, ","): ScExt = ScExt & """" & Ext & """" & " ": Next: ScExt = " of type {" & Replace(Trim(ScExt), " ", ",") & "}": If ScExt = " of type {""""}" Then ScExt = ""
     
        '----- PARMETRES : CHOIX DU DOSSIER PAR DEFAUT------------------------------------------------------------------
        If D_Location = "" Then D_Loc = " default location (path to desktop folder) " Else D_Loc = " default location alias " & Chr(34) & D_Location & Chr(34)
     
        '-----PARMETRES : SELECTION UNIQUE OU MULTIPLE DES FICHIERS-------------------------------------------------------
        If MultiSelection Then MultiFiles = " with multiple selections allowed"
     
        '---- SCRIPT : MACSCRIPT / APPLESCRIPT EN VBA---------------------------------------------------------------------
        MyPaths = MacScript("set source to choose file with prompt ""Sélectionner un ou plusieurs fichiers :""" & ScExt & D_Loc & MultiFiles & Chr(13) & _
                        "set fcopy to """"" & Chr(13) & "repeat with fileToCopy in source" & Chr(13) & "set fcopy to fcopy & fileToCopy & return" & Chr(13) & "end repeat" & Chr(13) & _
                        "If fcopy = """" Then" & Chr(13) & "set Sce to source as text" & Chr(13) & "set the clipboard to (count (Sce)) & ""__"" & Sce as Unicode text" & Chr(13) & _
                        "else" & Chr(13) & "set the clipboard to (count (fcopy)) - 1 & ""__"" & fcopy as Unicode text" & Chr(13) & "end If")
     
        '----- RECUPERATION DES CHEMINS SELECTIONNE DANS LE PRESSE PAPIER ------------------------------------------------
        PP.GetFromClipboard: MyPaths = PP.GetText(): MyPaths = Left(Split(MyPaths, "__")(1), Split(MyPaths, "__")(0))
        Paths = Split(MyPaths, vbNewLine)
     
        GetOpenMyFiles = Paths
    End Function

    Le 2ème code (à partir de ton code que j'ai modifié) :
    Code vba : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub NewOpenGetFiles()
    On Error Resume Next
        Paths = NewOpenGetMyFiles("xls,pdf,xlsm,txt", , True)
            If Err.Number = 5 Then MsgBox "Sélection du/des Fichier(s) annulée" ': Exit sub
     
        For Each chm In Paths
            Debug.Print chm
            'Workbooks.Open chm
        Next
    On Error GoTo 0
    End Sub
     
    '========================================================================================================================
    '========================================================================================================================
    'Auteur:  RyuAutodidacte - Version 2
    'Créé le 26/02/2017 à la sueur de mes neurones  :)
    '
    'Fonction permettant de remplacer GetOpenFileName sur Mac et là, les accents sont pris en compte (bien que déconseillé de nommer des repertoires/fichier avec accents)
    '
    'GetOpenMyFiles(Extension, Dossier de départ, multi-sélection en On/Off)
    '
    '--- Nommage des extensions ==>string entre 2 guillemets - séparation des extensions par une virgule sans espaces : Exemple : "pdf,xls" ou bien "xlsm,txt,pdf,psd"
    '--- Choix du dossier de départ -> string ==> si vide "le bureau" est choisi d'office - sinon mettre un repertoire, ex : ""Macintosh HD:Users:NomUser:Desktop:DeveloppezCom:GetOpenMyFiles:"
    '--- Multi-selection de fichier ==> Boolean : par défaut la selection est unique, mettre True pour une sélection multiple
     
    '------>  Merci à PBELL, l'un des seul rescapé du forum AppleScript ;), heureusement qu'il est toujours présent :D, pour son aide afin que j'y vois plus clair et de sa contribution
    '------>  Merci  à joe.levrai de m'avoir donné la bonne direction à prendre
    '========================================================================================================================
    Function NewOpenGetMyFiles(Optional MyExt As String, Optional D_Location As String, Optional MultiSelection As Boolean = False) As Variant
    Dim ScExt$, D_Loc$, MultiFiles$, MyPaths As String, PP As New MSForms.DataObject, Paths
     
        '----- PARAMETRES : EXTENSIONS--------------------------------------------------------------------------------
        For Each Ext In Split(MyExt, ","): ScExt = ScExt & """" & Ext & """" & " ": Next: ScExt = " of type {" & Replace(Trim(ScExt), " ", ",") & "}": If ScExt = " of type {""""}" Then ScExt = ""
     
        '----- PARMETRES : CHOIX DU DOSSIER PAR DEFAUT------------------------------------------------------------------
        If D_Location = "" Then D_Loc = " default location (path to desktop folder) " Else D_Loc = " default location alias " & Chr(34) & D_Location & Chr(34)
     
        '-----PARMETRES : SELECTION UNIQUE OU MULTIPLE DES FICHIERS-------------------------------------------------------
        If MultiSelection Then MultiFiles = " with multiple selections allowed"
     
        '---- SCRIPT : MACSCRIPT / APPLESCRIPT EN VBA---------------------------------------------------------------------
        MyPaths = MacScript("set AppleScript's text item delimiters to return" & Chr(13) & _
                            "set source to (choose file with prompt ""Sélectionner un ou plusieurs fichiers :""" & ScExt & D_Loc & MultiFiles & ") as text" & Chr(13) & _
                            "set the clipboard to (count (source)) & source as Unicode text")
     
        '----- RECUPERATION DES CHEMINS SELECTIONNE DANS LE PRESSE PAPIER ------------------------------------------------
        PP.GetFromClipboard: MyPaths = PP.GetText(): MyPaths = Mid(MyPaths, InStr(MyPaths, vbNewLine) + 1, Split(MyPaths, vbNewLine)(0))
        Paths = Split(MyPaths, vbNewLine)
     
        NewOpenGetMyFiles = Paths
    End Function

    PS : je préfère le code que j'ai modifié à partir de celui que tu m'as fait

    je veux bien que tu tests et avoir un retour si c'est possible

    encore grand merci

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  14. #14
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Bonsoir,
    J’ai testé ton script et il fonctionne très bien (bravo!), avec juste un commentaire en ce qui concerne le filtre des types.


    Par exemple, si je lance NewOpengetMyFiles avec le paramètre "xlsx,pdf,xlsm,txt »,, dans VBA, le dialogue de sélection ne permet pas de sélectionner un fichier .xlsx.
    Pour mettre ces fichiers Excel «sélectables »il faut que le file type soit « XLSX », en majuscule.

    Il faut bien faire attention de ne pas confondre les types de fichier et leurs extensions. Excepté ce petit détail, j'ai testé et tout est parfait.

    Félicitations

    Cordialement

  15. #15
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    Merci pour le retour

    J'ai bien pris note de ta remarque et vais faire la modification en conséquence avec un Ucase, comme ça il n y aura plus d'erreur possible
    je reposterai le code corrigé (ça peut servir )

    je voulais avoir une vrai fonction qui ne soit pas une usine a gaz (même si ce que fait Ron peut être très bien, mais ça ne me convenait pas , je trouvais ça trop compliqué)

    Encore pour l'aide et les tests

    Ryu

    Edit : voilà la modification
    Code vba : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub NewOpenGetFiles()
    On Error Resume Next
        Paths = NewOpenGetMyFiles("XLS,PDF,XLSM,TXT", , True) '"XLS,PDF,XLSM,TXT" => On définit les types ici pas les extensions - si paramètre non remplit, tous les types son pris en compte
            If Err.Number > 0 Then MsgBox "Sélection du/des Fichier(s) annulée" ': Exit sub
     
        For Each chm In Paths
            Debug.Print chm
            'Workbooks.Open chm
        Next
    On Error GoTo 0
    End Sub
     
    '========================================================================================================================
    '========================================================================================================================
    'Auteur:  RyuAutodidacte - Version 2.01 (Forum developpez.net VBA/AppleScript)
    'Créé le 26/02/2017 à la sueur de mes neurones  :) - modification le 27/02/2017
    '
    'Fonction permettant de remplacer GetOpenFileName sur Mac et là, les accents sont pris en compte (bien que déconseillé de nommer des repertoires/fichier avec accents)
    '
    'GetOpenMyFiles(Extension, Dossier de départ, multi-sélection en On/Off)
    '
    '--- Nommage des extensions ==>string entre 2 guillemets - séparation des types en capital par une virgule sans espaces (afin de définir les extensions) : 
    '---------- Exemple : "PDF,XLS" ou bien "XSLM,TXT,PDF,PSD" => attention on définit les types ici pas les extensions
     
    '--- Choix du dossier de départ -> string ==> si vide "le bureau" est choisi d'office - sinon mettre un repertoire, ex : ""Macintosh HD:Users:NomUser:Desktop:DeveloppezCom:GetOpenMyFiles:"
     
    '--- Multi-selection de fichiers ==> Boolean : par défaut la sélection est unique, mettre True pour une sélection multiple
     
    '------>  Merci à PBELL, l'un des seul rescapé du forum AppleScript ;), heureusement qu'il est toujours présent :D, pour son aide afin que j'y vois plus clair et de sa contribution
    '------>  Merci  à joe.levrai de m'avoir donné la bonne direction à prendre
    '========================================================================================================================
    Function NewOpenGetMyFiles(Optional MyExt As String, Optional D_Location As String, Optional MultiSelection As Boolean = False) As Variant
    Dim ScExt$, D_Loc$, MultiFiles$, MyPaths As String, PP As New MSForms.DataObject, Paths
     
        '----- PARAMETRES : EXTENSIONS--------------------------------------------------------------------------------
        For Each Ext In Split(MyExt, ","): ScExt = ScExt & """" & UCase(Ext) & """" & " ": Next: ScExt = " of type {" & Replace(Trim(ScExt), " ", ", ") & "}": If ScExt = " of type {""""}" Then ScExt = ""
     
        '----- PARMETRES : CHOIX DU DOSSIER PAR DEFAUT------------------------------------------------------------------
        If D_Location = "" Then D_Loc = " default location (path to desktop folder) " Else D_Loc = " default location alias " & Chr(34) & D_Location & Chr(34)
     
        '-----PARMETRES : SELECTION UNIQUE OU MULTIPLE DES FICHIERS-------------------------------------------------------
        If MultiSelection Then MultiFiles = " with multiple selections allowed"
     
        '---- SCRIPT : MACSCRIPT / APPLESCRIPT EN VBA---------------------------------------------------------------------
        MyPaths = MacScript("set AppleScript's text item delimiters to return" & Chr(13) & _
                            "set source to (choose file with prompt ""Sélectionner un ou plusieurs fichiers :""" & ScExt & D_Loc & MultiFiles & ") as text" & Chr(13) & _
                            "set the clipboard to (count (source)) & source as Unicode text")
     
        '----- RECUPERATION DES CHEMINS SELECTIONNE DANS LE PRESSE PAPIER ------------------------------------------------
        PP.GetFromClipboard: MyPaths = PP.GetText(): MyPaths = Mid(MyPaths, InStr(MyPaths, vbNewLine) + 1, Split(MyPaths, vbNewLine)(0))
        Paths = Split(MyPaths, vbNewLine)
     
        NewOpenGetMyFiles = Paths
    End Function
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  16. #16
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut MAJ de codes
    Bonsoir,
    petite amélioration du code (modification lors d'une seule sélection) :
    Code vba : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub NewOpenGetFiles()
    On Error Resume Next
        Paths = NewOpenGetMyFiles("XLS,PDF,XLSM,TXT", , True) '"XLS,PDF,XLSM,TXT" => On définit les types ici pas les extensions - si paramètre non remplit, tous les types son pris en compte
            If Err.Number > 0 Then MsgBox "Sélection du/des Fichier(s) annulée": Exit Sub
     
        If TypeName(Paths) = "String" Then
            Debug.Print TypeName(Paths) & " : " & Paths ' résultat lorsqu'il y a seulement 1 sélection
        Else
            For Each Chm In Paths
                Debug.Print Chm 'Résultat lors d'une multi-sélection
                'Workbooks.Open chm
            Next
        End If
    On Error GoTo 0
    End Sub
     
    '========================================================================================================================
    '========================================================================================================================
    'Auteur:  RyuAutodidacte - Version 2.02 (Forum developpez.net VBA/AppleScript)
    'Créé le 26/02/2017 à la sueur de mes neurones  :) - modification le 01/03/2017
    '
    'Fonction permettant de remplacer GetOpenFileName sur Mac et là, les accents sont pris en compte (bien que déconseillé de nommer des repertoires/fichier avec accents)
    '
    'NewOpenGetMyFiles(Extension, Dossier de départ, multi-sélection en On/Off)
    '
    '--- Nommage des extensions ==>string entre 2 guillemets - séparation des types en capital par une virgule sans espaces (afin de définir les extensions) :
    '---------- Exemple : "PDF,XLS" ou bien "XSLM,TXT,PDF,PSD" => attention on définit les types ici pas les extensions
     
    '--- Choix du dossier de départ -> string ==> si vide "le bureau" est choisi d'office - sinon mettre un repertoire, ex : ""Macintosh HD:Users:NomUser:Desktop:DeveloppezCom:GetOpenMyFiles:"
     
    '--- Multi-selection de fichiers ==> Boolean : par défaut la sélection est unique, mettre True pour une sélection multiple
     
    '------>  Merci à PBELL, l'un des seul rescapé du forum AppleScript ;), heureusement qu'il est toujours présent :D, pour son aide afin que j'y vois plus clair et de sa contribution
    '------>  Merci  à joe.levrai de m'avoir donné la bonne direction à prendre
    '========================================================================================================================
    Function NewOpenGetMyFiles(Optional MyExt As String, Optional D_Location As String, Optional MultiSelection As Boolean = False) As Variant
    Dim ScExt$, D_Loc$, MultiFiles$, MyPaths As String, PP As New MSForms.DataObject, Paths
     
        '----- PARAMETRES : EXTENSIONS--------------------------------------------------------------------------------
        If MyExt = "" Then ScExt = "" Else For Each Ext In Split(MyExt, ","): ScExt = ScExt & """" & UCase(Ext) & """" & " ": Next: ScExt = " of type {" & Replace(Trim(ScExt), " ", ", ") & "}"
     
        '----- PARMETRES : CHOIX DU DOSSIER PAR DEFAUT------------------------------------------------------------------
        If D_Location = "" Then D_Loc = " default location (path to desktop folder) " Else D_Loc = " default location alias " & Chr(34) & D_Location & Chr(34)
     
        '-----PARMETRES : SELECTION UNIQUE OU MULTIPLE DES FICHIERS-------------------------------------------------------
        If MultiSelection Then MultiFiles = " with multiple selections allowed"
     
        '---- SCRIPT : MACSCRIPT / APPLESCRIPT EN VBA---------------------------------------------------------------------
        MyPaths = MacScript("set AppleScript's text item delimiters to return" & Chr(13) & _
                            "set source to (choose file with prompt ""Sélectionner un ou plusieurs fichiers :""" & ScExt & D_Loc & MultiFiles & ") as text" & Chr(13) & _
                            "set the clipboard to (count (source)) & source as Unicode text")
     
        '----- RECUPERATION DES CHEMINS SELECTIONNE DANS LE PRESSE PAPIER ------------------------------------------------
        PP.GetFromClipboard: MyPaths = PP.GetText(): MyPaths = Mid(MyPaths, InStr(MyPaths, vbNewLine) + 1, Split(MyPaths, vbNewLine)(0))
        Paths = Split(MyPaths, vbNewLine)
     
        If UBound(Paths) = 0 Then Chm$ = Paths(0): NewOpenGetMyFiles = Chm Else NewOpenGetMyFiles = Paths
    End Function
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encodage encmap iso-8859-15.enc introuvable
    Par djibril dans le forum Administration système
    Réponses: 0
    Dernier message: 25/08/2011, 09h35
  2. modifier l'encodage en iso
    Par copro dans le forum Apache
    Réponses: 3
    Dernier message: 05/12/2008, 09h55
  3. PHP + encodage grec ISO-8859-7
    Par bubble_gum dans le forum Langage
    Réponses: 1
    Dernier message: 20/10/2006, 14h24
  4. Réponses: 15
    Dernier message: 24/02/2006, 14h17

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