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 :

Contourner la limite de 256 caractères d'une variable de type "String"


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut Contourner la limite de 256 caractères d'une variable de type "String"
    Bonjour,

    est-ce possible d'utiliser une variable de type "string" de plus de 256 caractère?

    J'essaie de faire un fichier excel qui fusionne plusieurs fichiers excel ensemble, pour ce faire j'utilise PDFTK server
    qui le fait par ligne de commande (CMD) donc dans excel, j'envois la ligne de commande à PDFTK Server par la commande "Shell".
    J'écris la ligne de commande dans un variable et ensuite j'envois la variable dans la commande "Shell".
    Le souci c'est que la commande dans la variable peut avoir plus de 255 caractère.
    Comment je peux contourner ce problème?

    Ex. de ligne de commande que j'envois dans la variable:

    Variable1 de type string

    Variable1 = "PDFTK C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\1.pdf C:\Répertoire\Sous-Répertoire1\Sous Répertoire2\2.pdf
    C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\3.pdf Output C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\Out.pdf"

    Shell (Variable1)

    C'est si que je veux fusionner une grosse quantité de PDF, la "variable1" va excéder 256 Caractères.
    Je sais pas trop comment contourner ce problème, il y a surement une façon simple de le faire mais je vois pas comment.

    Merci

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour
    tu pourrais commencer par utiliser une variable dossier et surtout tester en string si la chaine de commande est respecté ce qui n'est absolument pas le cas a mon avis
    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Variable1 = "PDFTK C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\1.pdf C:\Répertoire\Sous-Répertoire1\Sous Répertoire2\2.pdf
     C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\3.pdf Output C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\Out.pdf"
    après quelque du genre

    dossier ="C:\Répertoire\Sous-Répertoire1\Sous-Répertoire2\"

    puis shell ("PDFTK" & chr(32) & chr(34) & dossier & "1.pdf" & chr(34) & chr(32) & ....on recommence la même chose pour les autre )

    tu n'a qu'a tester en string pour être sur que ta chaine soit correcte dans le debug pourquoi pas par exemple

    debug.print "PDFTK" & chr(32) & chr(34) & dossier & "1.pdf" & chr(34) & chr(32) & ....on recommence la même chose pour les autre , 0 )

    après je reconnais que la retranscription CMD en VBA ou VBS ou VB n'est pas une sinécure

    sinon si tu sais le faire en ligne de commande dans un fichier text(CMD)

    écrit le fichier cmd dynamiquement et lance le avec wscriptshell.run tout simplement

    et je terminerais par dire que 255 n'est pas la limite

    j'utilise des variables string pour récupérer des codes htmls de pages web completes et je n'ai aucun soucis avec ca
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Merci de la réponse mais le problème c'est que le nom et le nombre de fichiers .pdf est variable à chaque fois.

    Voila mon 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Public MyFolder As String
     
    Sub Bouton1_Cliquer()
    Dim DiaFolder As FileDialog
    Dim MyFile As String
    MyFolder = ""
    Sheets("TO").Liste01.Clear
    Set DiaFolder = Application.FileDialog(msoFileDialogFolderPicker)
    DiaFolder.AllowMultiSelect = False
    DiaFolder.Show
        If (DiaFolder.SelectedItems.count = 0) Then
            Exit Sub
        Else
            MyFolder = DiaFolder.SelectedItems(1)
        End If
    MyFile = Dir(MyFolder & "\*.pdf")
    Do While MyFile <> ""
        Sheets("TO").Liste01.AddItem MyFile
        MyFile = Dir
    Loop
    Sheets("TO").Liste01.ListIndex = 0
    End Sub
     
    Sub Bouton2_Cliquer()
    Dim ShlStr As String
    Dim k As Integer
    ShlStr = ""
        For k = 0 To Sheets("TO").Liste01.ListCount - 1
        ShlStr = ShlStr + MyFolder + "\" & Sheets("TO").Liste01.List(k) & " "
        Next
    ShlStr = "Pdftk " + ShlStr + "Output " + MyFolder & "\TO.pdf"
    Shell (ShlStr)
    End Sub
    Le bouton1 permet de choisir un répertoire qui contient plusieurs fichiers .pdf (le nom des fichiers et le nombre est variable à chaque fois) ensuite le répertoire sélectionné est inscrit dans la variable "Myfolder" et le nom des fichiers .pdf sont ajouter dans une listbox. (Liste01)

    Le bouton 2 c'est celui qui fusionne tout les fichiers ajouté dans la listbox.
    Le problème survient avec la variable "Shlstr", la procedure ajoute dans la variable tout le chemin et le nom de chacuns des fichiers de la listbox, si ça dépasse pas 255 caractère tout fonctionne sinon ça ne fontionne pas.

    Merci

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut et
    re
    et alors !!??

    dan sun boucle dir tu remplie ta list box

    dans une seconde boucle sur les selectionnée tu construit ta chaine
    après avec open for ouput tu créé ton fichier cmd puis tu le le lance
    donne moi un code valide pour la ligne de commande en CMD
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Vous avez raison en disant que la limite n'est pas de 255, je me suis rendu compte que mon problème n'est pas une limite de caractère mais le fait que les nom des fichiers et le répertoire ne doit pas contenir d'espace vide.
    Certains fichiers .pdf que je veux fusionner contiennent des espaces. Je peux toujours régler de problème en m'assurant qu'aucuns fichiers ne contiennent d'espace et que le repertoire sélectionné ne contienne pas d'espace non plus
    mais c'est pas très commode.

    Sinon est-ce qu'il y a une façon de pouvoir exécuter la ligne de commande en tenant compte des espaces?


    J'ai aussi un deuxième souci.
    Comment je fait pour récupérer le nom du répertoire sélectionné seulement ? (Sans le chemin)
    Par exemple: je sélectionne ce répertoire: C:\Répertoire01\Répertoire02\Test Je voudrais seulement pouvoir récupérer "Test" ?

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Shell "notpad.exe 'c:\répertoire de test\le ficher de test.txt'"
    RepSelectionné=split("C:\Répertoire01\Répertoire02\Test","\")(ubound(split("C:\Répertoire01\Répertoire02\Test","\")))
    Dernière modification par Invité ; 26/10/2016 à 09h04.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Une autre façon pour le dernier répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Rep = "C:\Répertoire01\Répertoire02\Test"
        MsgBox Right(Rep, Len(Rep) - InStrRev(Rep, "\"))
    S'il y a des espaces, je pense qu'il faut tripler les guillemets (?)
    MPi²

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/01/2008, 17h19
  2. Réponses: 6
    Dernier message: 14/02/2007, 21h08
  3. Des " dans une variable de type String
    Par 4lkaline dans le forum Langage
    Réponses: 6
    Dernier message: 06/11/2006, 14h20
  4. convertir une variable de type String en Number
    Par lilbrother974 dans le forum Flash
    Réponses: 13
    Dernier message: 06/09/2006, 08h28
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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