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 :

Message box en fonction de l'état d'un lien [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut Message box en fonction de l'état d'un lien
    Bonjour à tous !

    Je vous expose ma problématique.

    La cellule A1 de mon tableur contient un lien hypertexte qui change dynamiquement en fonction d'autres cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LIEN_HYPERTEXTE(B1;C1)
    B1 renvois vers une formule contenant le lien vers le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ="C:\"&C40&" "&C41&" ("&C42&") "&C43&".pdf"
    (Les cellules C40-41-42-43 proviennent d'une combobox.)

    C1 rappel juste le nom d'une autre cellule.

    Jusque la tout fonctionne parfaitement.

    Je souhaiterais que lorsque que l'utilisateur clique sur le lien de A1, et que le fichier est introuvable dans le répertoire, une message box s'ouvre avec un choix oui / non.
    Bien sur si le fichier existe il faudra qu'il s'ouvre.

    J'ai effectué pas mal de recherches mais j'ai beaucoup de mal à adapter correctement les fonctions que je trouve, quelqu'un pourrait il m'aider ?

    Merci d'avance et bonne journée.

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function FileExists(ByVal Name As String) As Boolean
      FileExists = False
      If StrComp(Name, vbNullString, vbTextCompare) = 1 Then
         If StrComp(Dir$(Name), vbNullString, vbTextCompare) = 1 Then FileExists = True
      End If
      Exit Function
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      If not FileExists("C:\"&C40&" "&C41&" ("&C42&") "&C43&".pdf") then
         If MsgBox("Fichier introuvable" & Chr(10) & "Voulez-vous abandonner l'exécution" , vbYesNo, "ATTENTION") = vbNo Then
              '  Traitement
         Enf If
      End If

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Bonjour defluc et merci pour ton aide,

    J'ai intégré tes codes dans VB mais je pense mal m'y prendre, dans quels types d’événements dois-je les placer ?

    Peux-tu m'expliquer les étapes du code ? Je ne comprends pas très bien ce qu'il fait

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    La fonction vérifie si le fichier existe.

    Le code qui suit est à placer dans l'évènement Worksheet_Change de la feuille.
    Il faut adapter le code suivant ton objectif en prévoyant que le code ne s'exécute que si un changement se fait dans une cellule d'adresse donnée.

  5. #5
    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 defluc,

    tes lignes n°2 & 6 sont inutiles (FileExists est déjà à False par défaut) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function FileExists(ByVal Name As String) As Boolean
      If StrComp(Name, vbNullString, vbTextCompare) = 1 Then _
         If StrComp(Dir$(Name), vbNullString, vbTextCompare) = 1 Then FileExists = True
    End Function
    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)

  6. #6
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je l'utilise les yeux fermés depuis tant d'années que je ne m'en étais pas rendu compte.

    Merci à toi pour ton attention. Deux lignes de gagnées c'est toujours ça

  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


    S'il n'y as pas de joker dans le nom recherché, Dir(Name) > "" me suffit pour vérifier si un fichier existe …
    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 régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Voici ce que j'ai collé dans VB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function FileExists(ByVal Name As String) As Boolean
      If StrComp(Name, vbNullString, vbTextCompare) = 1 Then _
         If StrComp(Dir$(Name), vbNullString, vbTextCompare) = 1 Then FileExists = True
    End Function
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     If not FileExists("C:\"&B3&".pdf") then
         If MsgBox("Fichier introuvable" & Chr(10) & "Voulez-vous abandonner l'exécution" , vbYesNo, "ATTENTION") = vbNo Then
              '  Traitement
         Enf If
      End If
    End Sub
    Il ne se passe rien lors d'un changement sur la page, et la fonction IF est en rouge dans le code, je pense faire erreur quelque part.

    Je ne vois pas comment le code peut comprendre que le lien est sur A1 ? :/

    J'ai pris en compte les précisions de Marc.

  9. #9
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Remplaces la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not FileExists("C:\"&B3&".pdf") then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Not FileExists("C:\" & B3 & ".pdf") Then

  10. #10
    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 Heu … Si B3 est une cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not FileExists("C:\" & [B3].Text & ".pdf") Then
    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    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)

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Ok ça fonctionne, mais j'ai du utiliser un bouton de commande. De plus j'ai aussi indiqué la cellule B1 directement avec ActiveSheet.Range car elle contient le chemin complet vers le fichier, voila ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function FileExists(ByVal Name As String) As Boolean
      If StrComp(Name, vbNullString, vbTextCompare) = 1 Then _
         If StrComp(Dir$(Name), vbNullString, vbTextCompare) = 1 Then FileExists = True
    End Function
    Private Sub CommandButton1_Click()
    If Not FileExists("" & ActiveSheet.Range("B1") & "") Then
         If MsgBox("Fichier introuvable" & Chr(10) & "Voulez-vous abandonner l'exécution" , vbYesNo, "ATTENTION") = vbNo Then
    'Traitement'
         End If
      End If
    End Sub
    Maintenant je ne vois pas comment activer cette msg box en cliquant sur le lien de A1 ? :/

    Je viens de voir la correction de Marc, encore plus simple. Merci à vous deux, ça avance bien !

  12. #12
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function FileExists(ByVal Name As String) As Boolean
      If StrComp(Name, vbNullString, vbTextCompare) = 1 Then _
         If StrComp(Dir$(Name), vbNullString, vbTextCompare) = 1 Then FileExists = True
    End Function
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    If Not FileExists("C:\" & [B3].Text & ".pdf") Then
         If MsgBox("Fichier introuvable" & Chr(10) & "Voulez-vous abandonner l'exécution", vbYesNo, "ATTENTION") = vbNo Then
    'Traitement'
         End If
      End If
    End Sub

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Navré mais ça ne fonctionne pas.
    J'ai essayé de simplifier un tout petit peu, mais ça ne donne rien de plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function FileExists(ByVal Name As String) As Boolean
      If StrComp(Name, vbNullString, vbTextCompare) = 1 Then _
         If StrComp(Dir$(Name), vbNullString, vbTextCompare) = 1 Then FileExists = True
    End Function
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    If Not FileExists("" & [B1] & "") Then
         If MsgBox("Fichier introuvable" & Chr(10) & "Voulez-vous abandonner l'exécution", vbYesNo, "ATTENTION") = vbNo Then
    'Traitement'
         End If
    End If

  14. #14
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Qu'est-ce qui ne fonctionne pas ?
    Si tu as placé le code dans la feuille, en cliquant sur A1, il se déclenche, sinon il y a sortie de la procédure.

    On peut le voir en exécution pas à pas avec un point d'arrêt sur la première ligne de la procédure.

    Ou alors, j'ai mal compris le problème.

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    En cliquant sur le lien de la cellule A1, soit le fichier s'ouvre s'il existe, soit excel m'indique que le fichier est introuvable, mais la msgbox ne s'ouvre jamais.

    J'ai vu que tu avais ajouté cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Address <> "$A$1" Then Exit Sub
    Si je la "traduis", je dirais que tu souhaites comparer deux adresses entre elles, l'adresse "cible", et l'adresse de A1, deux interrogations à ce sujet :

    Comment excel peut il comprendre qu'on souhaite lui faire prendre en compte l'adresse de A1 et non son contenu ? Ne faudrait il pas le préciser ? (un peu dans cette logique $A$1.Address)

    De plus, à quel moment du code défini t on l'adresse cible ?

    Merci encore pour ton aide précieuse

  16. #16
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Soit je m'exprime mal, soit il y a un problème de compréhension.

    Copie le code ci-après dans Microsoft Excel Objets - Feuil2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Address = "$A$1" Then
        MsgBox "Vous avez cliqué dans la cellule " & Target.Address
                                 Else
        MsgBox "Vous n'avez pas cliqué dans la cellule $A$1 mais dans la cellule " & Target.Address
      End If
    End Sub
    Puis, rends-toi dans la Feuille 2 et clique dans la cellule A1 puis sur n'importe quelle autre.
    Cela devrait t'aider à comprendre.
    C'est pour cela que j'avais suggéré
    On peut le voir en exécution pas à pas avec un point d'arrêt sur la première ligne de la procédure.
    Courage, tu vas y arriver.

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Rassure-toi, tu t'exprimes bien

    J'ai fais exactement ce que tu m'as dit sans avoir de doute, et je t'assure qu'il ne se passe rien de rien. :/

  18. #18
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bon, là il y a un problème.

    Assures-toi que le code est bien dans la feuille dans laquelle tu as cliqué.
    Mets un point d'arrêt sur la première instruction après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Retourne dans la feuille et clique dans une cellule.

    Si vba ne s'ouvre pas en s'arrêtant sur le point d'arrêt, fermes ton classeur, réouvres le et réessaie.

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par defluc Voir le message
    fermes ton classeur, réouvres le et réessaie.
    J'ai commencé par ça et ça fonctionne ! Ne me demande pas pourquoi ça à planté mais il y a de quoi tomber fou ! ^^

    Je retest ton code et je te donne le résultat !

    Merci !

  20. #20
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Ça fonctionne ! Merci beaucoup defluc pour ta patience !

    Je continue et je mettrais résolu lorsque tout sera fini, j'en profiterais aussi pour te montrer le reste du code au cas ou il y aurait mieux à faire !

    Merci encore et bonne journée !

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

Discussions similaires

  1. fonction message box dans crystal report ?
    Par CyberMen dans le forum Débuter
    Réponses: 2
    Dernier message: 27/06/2008, 16h47
  2. [C/C++] afficher des doubles dans une message box
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2005, 14h55
  3. afficher une "message box"
    Par requiemforadream dans le forum ASP
    Réponses: 2
    Dernier message: 19/04/2005, 16h11
  4. Message box
    Par jagboys dans le forum ASP
    Réponses: 21
    Dernier message: 10/12/2004, 22h11
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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