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 :

Copie d'une valeur String vers une cellule: erreur 1004 quand ma String est une URL


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut Copie d'une valeur String vers une cellule: erreur 1004 quand ma String est une URL
    Bonjour à tous,
    j'aimerais affecter à une cellule une formule contenant un lien hypertexte (voir mon post http://www.developpez.net/forums/sho...d.php?t=430040 sur les liens dans un classeur partagé).

    Ma macro: ouvre une boîte de dialogue, je sélectionne un fichier Word et j'aimerais insérer dans mon fichier EXCEL le nom du fichier + l'hyperlien pointant vers lui.

    Je me heurte à une erreur d'exécution 1004, que j'aimerais esquiver de la manière suivante:
    récupérer dans une variable String la formule contenant mon lien (de la forme =Lien_Hypertexte ("chemin";"nom du lien").
    J'arrive bien à affecter cette valeur à mon String, mais dès que je veux recopier ça dans une cellule j'ai à nouveau l'erreur 1004! (je travaille sur un classeur non partagé pour le moment).
    J'aimerais bien savoir d'ou vient cette erreur?

    Voici 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
    34
    35
    36
    37
    38
    39
    Sub InsererDemande()
     
    'nécessite d'activer la référence Microsoft Word xx.x Object Library
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim Fichier As Variant
    Dim Pos, DerniereLigne As Integer
    Dim NomFichier, chemin, nomFichierSansExtension, Lien As String
     
     
    'affichage boite de dialogue pour choisir un document Word
    Fichier = Application.GetOpenFilename("Text Files (*.doc*), *.doc*")
    If Fichier = False Then Exit Sub
     
     
     
    'le document Word est supposé fermé avant le lancement de la macro
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False 'pour que word reste masqué pendant l'opération
    Set WordDoc = WordApp.Documents.Open(Fichier) 'ouverture du fichier Word
    WordDoc.Unprotect
     
        NomFichier = WordDoc
     
            Pos = InStr(1, NomFichier, ".", 1)
            nomFichierSansExtension = Left(NomFichier, Pos - 1)
            chemin = WordDoc.Path & "\" & WordDoc
     
    'Identification de la première ligne vide pour y recopier les données
    DerniereLigne = Range("A65535").End(xlUp).Row + 1
     
    Lien = "=LIEN_HYPERTEXTE(" + "'" + "'" + WordDoc.Path + "\" + WordDoc + "'" 
    Cells(DerniereLigne, 1) = "=LIEN_HYPERTEXTE(" + "'" + "'" + WordDoc.Path + "\" + WordDoc + "'" + "'" + ";" + "'" + "'" + nomFichierSansExtension + "'" + "'" + ")"
     
     
    WordDoc.Close False 'ferme le document Word sans sauvegarde
    WordApp.Quit 'ferme l'application Word
     
    End Sub
    Si je mets un msgbox de test "Msgbox Lien" juste après l'affectation de valeur à ma variable Lien j'ai le bon texte qui s'affiche (texte correspondant à la formule que je dois affecter à ma cellule).Hors si je rentre la formule en manuel ça marche très bien, mais par macro j'ai l'erreur 1004 à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(DerniereLigne, 1)=Lien
    (comme je l'ai dit la valeur de ma variable Lien est après test par msgbox EXACTEMENT celle qu'il faut;quand je recopie le texte qu'elle m'affiche à la main ma cellule l'accepte et mon lien fonctionne,mais jamais par macro juste en manuel).
    Merci de votre attention et de vos remarques,
    M

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Le problème se situe dans la création de la chaine à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Lien = "=LIEN_HYPERTEXTE(" + "'" + "'" + WordDoc.Path + "\" + WordDoc + "'"
    Tu utilises l'apostrophe doublée au lieu du guillemet, et tu ne fermes pas la parenthèse de fin de fonction.

    De plus, il est préférable d'utiliser l'opérateur de concaténation & plutôt que l'opérateur d'addition +.

    Utilise plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Lien = "=LIEN_HYPERTEXTE(""" & WordDoc.Path & "\" & WordDoc & """)"
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Déjà, si tu veux placer dans Excel un lien hypertexte avec un document Word, tu n'es pas obligé d'ouvrir le Doc Word. Suffit que tu le sélectionnes dans la boîte de dialogue pour avoir le nom et le path.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test
    Dim FL As Worksheet, DerniereLigne as long
    Set FL = ActiveSheet
        fileToOpen = Application.GetOpenFilename("Text Files (*.Doc), *.Doc")
        DerniereLigne = FL.Range("A65535").End(xlUp).Row + 1
        FL.Hyperlinks.Add FL.Range("A1").Offset(DerniereLigne, 0), fileToOpen
    End sub
    Tu peux tester pour nous ?
    A+

  4. #4
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bonjour

    Le problème se situe dans la création de la chaine à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Lien = "=LIEN_HYPERTEXTE(" + "'" + "'" + WordDoc.Path + "\" + WordDoc + "'"
    Tu utilises l'apostrophe doublée au lieu du guillemet, et tu ne fermes pas la parenthèse de fin de fonction.

    De plus, il est préférable d'utiliser l'opérateur de concaténation & plutôt que l'opérateur d'addition +.

    Utilise plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Lien = "=LIEN_HYPERTEXTE(""" & WordDoc.Path & "\" & WordDoc & """)"
    Désolé erreur de copier/coller j'ai bien refermé ma parenthèse (comme je le dit ma syntaxe est correcte puisque je récupère dans ma msgbox de test exactement le même texte qui foncionne lorsque je l'entre en manuel,donc pourquoi une erreur lorsque je fais pas macro?).

    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lien = "=LIEN_HYPERTEXTE(" + "'" + "'" + WordDoc.Path + "\" + WordDoc + "'" + "'" + ";" + "'" + "'" + nomFichierSansExtension + "'" + "'" + ")"
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(DerniereLigne, 1) = Lien
    .

    Tu me dis d'utiliser plutôt & que +, mais j'ai un souci de syntaxe: tu as oublié la partie: Lien_Hypertexte( chemin; Nom Lien) dans ton exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lien = "=LIEN_HYPERTEXTE(""" & WordDoc.Path & "\" & WordDoc & """)"
    ; il me manque donc le morceau de fin par rapport au lien que je veux créer mais je n'arrive pas à appliquer ta syntaxe pourrais-tu m'aider stp?

  5. #5
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Déjà, si tu veux placer dans Excel un lien hypertexte avec un document Word, tu n'es pas obligé d'ouvrir le Doc Word. Suffit que tu le sélectionnes dans la boîte de dialogue pour avoir le nom et le path.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test
    Dim FL As Worksheet, DerniereLigne as long
    Set FL = ActiveSheet
        fileToOpen = Application.GetOpenFilename("Text Files (*.Doc), *.Doc")
        DerniereLigne = FL.Range("A65535").End(xlUp).Row + 1
        FL.Hyperlinks.Add FL.Range("A1").Offset(DerniereLigne, 0), fileToOpen
    End sub
    Tu peux tester pour nous ?
    A+
    Merci pour ton exemple mais ma macro ne fait pas uniquement cela (j'ai enlevé la partie qui fonctionne pour qu'on se concentre uniquement sur mon problème de lien): à savoir que par ma macro j'ouvre un formulaire standard Word, et je récupère certains champs (nom du demandeur,date) que je liste dans une mini base de données Excel pour effectuer un suivi de ces demandes qui ont été faites par formulaire.Je suis donc bien obligé d'ouvrir le Word.

    Pour mon besoin de lien: sur chaque ligne je désire en fait créer un raccourci automatique vers le formulaire d'origine,et donc récupérer le chemin afin de l'inscrire sur mon fichier Excel: ce fichier Excel étant partagé et Excel n'acceptant pas l'insertion de lien hypertexte en mode partagé,je suis obligé de passer par l'insertion d'une formule lien hypertexte car celle-ci fonctionne lorsqu'on l'applique en manuel (même en mode partagé);par contre comme vous avez pu voir j'ai quelques difficultés à l'insérer en mode automatique.
    Merci pour votre aide en tout cas,
    Bon appétit ,
    M

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ah ben si tu dis pas tout...
    As-tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim FL1 As Worksheet
    Set FL1 = ActiveSheet
        fileToOpen = Application.GetOpenFilename("Text Files (*.Doc), *.Doc")
        DerniereLigne = FL1.Range("A65535").End(xlUp).Row + 1
        FL1.Range("A1").Offset(DerniereLigne, 0).FormulaLocal = _
                     "=LIEN_HYPERTEXTE(""" & fileToOpen & """;"""")"
    End Sub
    A+

  7. #7
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Ah ben si tu dis pas tout...
    As-tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim FL1 As Worksheet
    Set FL1 = ActiveSheet
        fileToOpen = Application.GetOpenFilename("Text Files (*.Doc), *.Doc")
        DerniereLigne = FL1.Range("A65535").End(xlUp).Row + 1
        FL1.Range("A1").Offset(DerniereLigne, 0).FormulaLocal = _
                     "=LIEN_HYPERTEXTE(""" & fileToOpen & """;"""")"
    End Sub
    A+
    Il ne se passe rien (désolé je débute: ça correspond à quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Offset(DerniereLigne, 0).
    ).

    Pour mon lien hypertexte: il faut qu'il ait impérativement le nom du fichier en plus de pointer vers lui.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Il ne se passe rien (désolé je débute: ça correspond à quoi
    C'est une impression fausse ! Fais un clic sur la dernière ligne ou celle d'en dessous, tu verras que ton lien s'y trouve bien mais est "transparent"
    FL1.Range("A1").Offset(DerniereLigne, 0) désigne la dernière ligne + 1 de la colonne A.

    NB - Pour entrer dans la cellule sans ouvrir le lien, utilise les flêches de direction, pas la souris
    Tu dis

    Edit
    Tu peux voir ton champ en faisant dans Excel -> Outils -> Options -> Affichage -> Formules
    Juste pour voir

  9. #9
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    C'est une impression fausse ! Fais un clic sur la dernière ligne ou celle d'en dessous, tu verras que ton lien s'y trouve bien mais est "transparent"
    FL1.Range("A1").Offset(DerniereLigne, 0) désigne la dernière ligne + 1 de la colonne A.

    NB - Pour entrer dans la cellule sans ouvrir le lien, utilise les flêches de direction, pas la souris
    Tu dis

    Edit
    Tu peux voir ton champ en faisant dans Excel -> Outils -> Options -> Affichage -> Formules
    Juste pour voir
    Autant pour moi: ça fonctionne,même en mode partagé.
    Par contre le lien est bien transparent comme tu dis, mais comment puis-je écrire du texte dans ma cellule (pour nommer le lien) sans effacer les infos?
    Si j'écris du texte dans la cellule après y avoir inséré le lien,le texte a bien la mise en forme d'un lien hypertexte (texte souligné) mais le lien ne pointe plus vers mon fichier.
    Merci d'avance,
    M

  10. #10
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Ok j'ai trouvé la bonne syntaxte;
    par rapport à ma macro ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cells(DerniereLigne, 1).FormulaLocal = _
                     "=LIEN_HYPERTEXTE(""" & Fichier & """;""" & nomFichierSansExtension & """)"
    Comme quoi on peut mettre des liens hypertexte même en mode partagé!
    Grand merci pour ton aide.
    Bonne après-midi ,
    M

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    http://www.developpez.net/forums/sho...9&postcount=13

    est ce qu'on peut m'expliquer pourquoi il y a deux fils de discussion pour un meme sujet ?

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par SilkyRoad Voir le message
    http://www.developpez.net/forums/sho...9&postcount=13
    est ce qu'on peut m'expliquer pourquoi il y a deux fils de discussion pour un meme sujet ?
    Bonjour Michel,
    On peut suggérer une raison à cette question : Les guillemets dans l'utilisation de variables dans la formule... (?)
    Mais peut-on m'expliquer pourquoi il y a deux discussions sur le même sujet ?
    Bonne journée

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 28/04/2015, 10h30
  2. Réponses: 1
    Dernier message: 22/02/2015, 23h38
  3. attribuer une valeur au champ d'un objet passé dans un string
    Par bab_dev dans le forum Ruby on Rails
    Réponses: 7
    Dernier message: 01/02/2008, 13h29
  4. Requête sélection ID quand un champ a une valeur
    Par thegreatbato dans le forum SQL
    Réponses: 3
    Dernier message: 20/11/2007, 14h23
  5. Réponses: 1
    Dernier message: 19/02/2007, 15h05

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