vba Erreur 1004 la méthode select de la classe worksheet a échoué

Noow

XLDnaute Nouveau
Bonjour à tous

Je suis nouvelle ici et je fais appel à votre aide car je bloque depuis plusieurs jours : mon code permet d'aller ouvrir un lien hypertexte or lorque je lance l'application la macro me dit "erreur 1004 la méthode select de la classe worksheet a échoué" à la ligne "Selection.Hyperlinks(1).Follow NewWindow:=True, AddHistory:=True
"
Et lorsque je met "Fin", le fichier s'ouvre quand même

Je ne comprend pas

Pouvez vous m'éclairer ?
Merci d'avance



Voici mon bout de code :

Sub semaine()

Sheets("IHM").Select

colonne = InputBox(prompt:="Veuillez sélectionner la colonne qui correspond à la semaine que vous voulez visualiser", Title:="Semaine ?")

Dim Cible As String

Cible = Range(colonne & 5)
'Vérifie si la cellule contient un lien hypertexte

Range(colonne & 5).Select
If ActiveCell.Hyperlinks.Count = 0 Then
MsgBox "Pas de lien !"
Exit Sub

Else
'Extrait l'adresse du lien
Cible = ActiveCell.Hyperlinks(1).Address

End If
'Vérifie si le fichier existe.
'Si oui exécute l'ouverture du fichier sur lequel pointe le lien

If Cible <> "" And Dir(Cible) <> "" Then
Selection.Hyperlinks(1).Follow NewWindow:=True, AddHistory:=True

Exit Sub
' Si non ouverture du MsgBox fichier introuvable
Else
MsgBox "Fichier introuvable"

Exit Sub
End If

End Sub
 

stefan373

XLDnaute Occasionnel
Re : vba Erreur 1004 la méthode select de la classe worksheet a échoué

Bonjour Noow et le forum,

Pour commencer, bien venu sur ce forum génial. :p
Voilà après plusieurs jours de recherche :confused:, voici un code qui fonctionne. :)

Code:
Dim Cible As String
Dim lig As Byte
'Le type 1 signifie que la valeur entrée dans l'imput box est un chiffre
colonne = Application.InputBox(prompt:="Veuillez sélectionner la colonne qui correspond à la semaine que vous voulez visualiser", Title:="Semaine ?", Type:=1)
lig = 5
'Signale que l'on travail sur la feuille IHM
'Avec la commande Range, on définit la colonne puis la ligne et avec la commande Cells, c'est l'inverse
With Sheets("IHM")
.Cells(lig, colonne).Select
End With

'Vérifie si la cellule contient un lien hypertexte
If ActiveCell.Hyperlinks.Count = 0 Then
    MsgBox "Pas de lien !"
    Exit Sub
Else
'Extrait l'adresse du lien
    Cible = ActiveCell.Hyperlinks(1).Address
End If
    'Vérifie si le fichier existe
    'Si oui exécute l'ouverture du fichier sur lequel pointe le lien
    If Cible <> "" And Dir(Cible) <> "" Then
        ActiveWorkbook.FollowHyperlink Address:=Sheets("IHM").Cells(lig, colonne), NewWindow:=True
    Exit Sub
    'Si non ouverture du MsgBox fichier introuvable
    Else
        MsgBox "Fichier introuvable"
        Exit Sub
    End If

Mais attention, car la variable Cible ne fonctionne qu'avec des fichiers et pas des adresses internet. :)
A + Stéfan
 

kjin

XLDnaute Barbatruc
Re : vba Erreur 1004 la méthode select de la classe worksheet a échoué

Bonsoir,
Cible est une variable String et ne peut pas dans ce cas contenir un lien....
Une variante
Code:
Sub semaine()
Dim Choix As Range, Cible As Range
With Sheets("IHM")
    .Activate
    On Error Resume Next
    Set Choix = Application.InputBox("Veuillez sélectionner la " & _
        "colonne qui correspond à la semaine que vous voulez visualiser", _
            Title:="Semaine ?", Type:=8)
    If Not Choix Is Nothing Then
        On Error GoTo 0
        If Choix.Columns.Count > 1 Then Exit Sub
        Set Cible = .Cells(5, Choix.Column)
        If Cible.Hyperlinks.Count = 0 Then
            MsgBox "pas de lien !"
            Exit Sub
        End If
        If Dir(Cible.Hyperlinks(1).Address) = "" Then
            MsgBox "Fichier introuvable !"
            Exit Sub
        End If
        Cible.Hyperlinks(1).Follow NewWindow:=True, AddHistory:=True
    End If
End With
End Sub
La méthode impose de sélectionner une cellule sur la feuille (type 8) comme le message de la boite le propose et récupérer le n° de colonne
Par contre qq chose m'intrigue, car à sélectionner une cellule pourquoi ne pas simplement clicker sur le lien hypertexte !?
A+
kjin
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : vba Erreur 1004 la méthode select de la classe worksheet a échoué

salut

Si... ta cellule est dans une feuille précise, pourquoi pas une évènementielle écrite dans le module de celle-ci ,
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
  If R.Count > 1 Then Exit Sub 'plus d'une cellule
  If R.Row > 1 Then Exit Sub   'hors ligne 1
  Dim C As Range
  Set C = Cells(5, R.Column)
  If C.Hyperlinks.Count = 0 Then
    MsgBox "pas de lien !"
  Else
    If Dir(C.Hyperlinks(1).Address) = "" Then
      MsgBox "Fichier introuvable !"
    Else
      C.Hyperlinks(1).Follow 1, 1
    End If
  End If
End Sub

Un clic sur la première ligne et ... (même si ta cellule est cachée, sa ligne n'est pas à l'écran...)
Attention au blocage lorsqu'on refuse le fichier : Avis de sécurité --> Fin
 

Noow

XLDnaute Nouveau
Re : vba Erreur 1004 la méthode select de la classe worksheet a échoué

Bonjour à tous,

Déjà un grand merci d'avoir pris de votre temps pour vous penchez sur mon problème ! =D

J'ai essayé chacunes de vos propositions :

* - stefan373 : ta macro me demande un numéro de colonne, or dans mon fichier les semaines ne sont pas numérotées J'ai transformé la colonne en nombre, pour pouvoir la rentrer en lettre d'abord, avec :

On Error Resume Next
Do
colonne = InputBox(prompt:="Veuillez sélectionner la colonne qui correspond à la semaine que vous voulez visualiser", Title:="Semaine ?")
NumeroColonne = Range(colonne & 1).Column
Loop While Err.Number <> 0

Et ensuite remplacé colonne par numerocolonne dans le reste de ta macro, mais le problème est encore là : la macro m'indique une erreur sur la ligne "ActiveWorkbook.FollowHyperlink Address:=Sheets("IHM").Cells(lig, numerocolonne), NewWindow:=True" et si je met FIN le fichier s'ouvre quand même ..

*- kjin : ta méthode de séléction serait parfaite !
Mais elle m'indique une erreur à "If Not Choix Is Nothing Then", ensuite si je met CONTINUER il y a une erreur à "Cible.Hyperlinks(1).Follow NewWindow:=True, AddHistory:=True" et là encore le problème, si je met FIN le fichier s'ouvre

Pour répondre à la question "Par contre qq chose m'intrigue, car à sélectionner une cellule pourquoi ne pas simplement clicker sur le lien hypertexte !?", c'est parce que j'aimerai insérer ce bout de code dans une boucle afin que la macro ouvre des fichiers les uns à la suite des autres (fichiers dont les liens hypertextes sont dans des cellules d'une même colonne mais sur des lignes différentes)

*- Si... : je ne vois pas trop où insérer ton code =/

J'espère avoir été claire (je n'en suis pas convaincue)

EN tous cas merci beaucoup !
 

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 340
Membres
103 192
dernier inscrit
Corpdacier