Test ouverture fichier

Résolu
Bonjour,
J'ai testé plusieurs macro pour ceci mais je n'y arrive pas.
En fait je voudrais que la macro m'active mon fichier si il est déja ouvert ou bien qu'il l'ouvre si celui ci est fermé.
Cela fonctionne lorsque celui ci est fermé mais pas quand il est déja ouvert.

Sub testouverture()

estouvert = False
For Each fich In Workbooks
If fich.Name = "monfichier.xls" Then estouvert = True

Next

If estouvert = True Then Workbooks "monfichier.xls".Activate

If estouvert = False Then Workbooks.Open "monfichier.xls"

End Sub

Je me suis inspiré du premier exemple (j'ai tout essayé mais à chaque fois j'ai le même résultat).

http://jacxl.free.fr/cours_xl/cours_xl_jac.html#fichouv

Merci à vous pour votre aide.
Bonne soirée

PS : j'ai un problème d'affichage avec votre site depuis une semaine c'est du à quoi (ABP ?)

6 réponses

  1. Bonjour,
    Concerne :
    Par contre avec :
    Workbooks(Range("'Sources'!B4")).Activate

    ça ne fonctionne pas
    (j'ai bien dans ma cellule B4 monfichier.xlsx)

    Cela ne peut pas fonctionné, Il manque le non de la feuille..
    Comme ceci peut-être :
    Workbooks(Sheets("Sources"). Range("$B$4")).Activate

    1. effectivement j'ai pas repris le nom de la feuille....
      Merci à vous bonne soirée
  2. ps
    Pour faire résumé lorsque je met le chemin du fichier dans une cellule ça fonctionne, par contre quand je me le nom du fichier ou bien le nom de la feuille ça ne marche pas.... j'ai essayé toutes les combines mais ça ne veut pas marcher....surement un problème de syntaxe.....
    1. Bonjour Le Pingou,

      Tout fonctionne maintenant je vous remercie.

      Juste une dernière question.

      Je renvoie à une cellule le chemin ou bien le nom du fichier.
      Le renvoie fonctionne pour le chemin de fichier mais lorsque je met simplement le nom cela ne fonctionne pas.
      Lorsque je me met le nom du fichier en dur dans la macro ça fonctionne.

      exemple :

      Workbooks("monfichier.xlsx").Activate

      ça fonctionne

      Par contre avec :

      Workbooks(Range("'Sources'!B4")).Activate

      ça ne fonctionne pas
      (j'ai bien dans ma cellule B4 monfichier.xlsx)

      J'ai un message d'erreur de type '1004' "La méthode 'Range' de l'objet' Global a échoué"

      Auriez vous une réponse ?
      Merci et joyeuses fêtes.
      1. Contributeur
        Bonsoir,

        à tout hasard essaie avec :
        Workbooks(Range("'Sources'!B4").value).Activate
        J'ai l'impression que c'est le fait que tu lui passes un range et non un string qui ne lui plait pas.
        Par contre pour ouvrir le fichier il faudra toujours au total chemin+nom du fichier. comme te l'as dit le pingou. Remarque à laquelle tu n'as même pas répondu ok, ce qui fait qu'on ne sait pas si tu en tiens compte ou pas...

        eric
      2. Merci eriiic,
        Je ne connaissais pas cette variante d'écriture.
        Tous mes voeux pour 214.
        Le Pingou
      3. Contributeur
        Salut le pingou,

        Il faut parfois se méfier des propriétés par défaut, qui n'est pas toujours celle qu'on attend, selon le contexte.
        Tous mes voeux pour 2014 également, surtout de santé.
        Bon we
        eric
      4. Bonjour Eric,
        Merci pour l'info ça à l'air de fonctionner.
        Pour le chemin et le nom du fichier j'ai bien pris cela en compte, ça fonctionne également.
    2. Bonjour,
      Juste au passage, cette partie de votre code n'est pas correct:
      Workbooks.Open (Range("'Sources'!B5")) ' mettre le chemin complet du fichier: c:\mon fichier.xls

      Je vous ai indiquez ceci pour le classeur non ouvert:
       Workbooks.Open "c:\le chemin\monfichier.xls" ' nécessaire d'avoir le lecteur +le chemin

      Note: on ne c'est pas quelles données vous copiez et ou vous les collez...!

      Joyeux Noël
      1. Bonsoir,
        J'ai un soucis pour la suite....lorsque la macro copie les données.
        ça s'arrête sur "ActiveSheet.Paste"
        Auriez vous une idée, ça fonctionne aléatoirement.
        Le code en entier ci dessous :


        Sub testouveture_maj

        ThisWorkbook.Activate
        Sheets("feuilacopier").Select
        Range("A1").Select
        Selection.CurrentRegion.Select
        Selection.Copy

        estouvert = False
        For Each fich In Workbooks
        If fich.Name = (Range("'Sources'!B3")) Then estouvert = True ' mettre le nom du fichier: mon fichier.xls

        Next

        If estouvert = True Then

        Workbooks(Range("'Sources'!B4")).Activate ' mettre le nom du fichier avec guillemets: "mon fichier.xls"

        ActiveWorkbook.Save
        Sheets(1).Select
        Range("A1").Select
        Selection.CurrentRegion.Select
        nbl = Selection.Rows.Count
        Cells(nbl + 1, 1).Select '
        ActiveSheet.Paste

        Else
        Workbooks.Open (Range("'Sources'!B5")) ' mettre le chemin complet du fichier: c:\mon fichier.xls

        Sheets(1).Select
        Range("A1").Select
        Selection.CurrentRegion.Select
        nbl = Selection.Rows.Count
        Cells(nbl + 1, 1).Select '
        ActiveSheet.Paste

        End If

        ThisWorkbook.Activate

        End Sub
        Merci
        1. Bonjour.
          Remplacer vos deux lignes :
          If estouvert = True Then Workbooks "monfichier.xls".Activate 
          If estouvert = False Then Workbooks.Open "monfichier.xls"
          Par celles-ci :
          If estouvert = True Then
          Workbooks "monfichier.xls".Activate
          Else
          Workbooks.Open "c:\le chemin\monfichier.xls" ` nécessaire d'avoir le lecteur +le chemin
          End If


          Salutations.
          Le Pingou
          1. Bonjour,
            Merci beaucoup ça marche.
            Petite précision.
            Pour ceux qui mettent les liens dans les cellules il faut mettre le nom du fichier tout simplement, ensuite le nom du ficher avec les guillemets, puis le chemin complet du fichier.
            Voir le code complet ci dessous :

            Sub testouverture()

                estouvert = False
            For Each fich In Workbooks
            If fich.Name = (Range("'Sources'!B3")) Then estouvert = True ' mettre le nom du fichier: mon fichier.xls

            Next

            If estouvert = True Then
            Workbooks(Range("'Sources'!B4")).Activate ' mettre le nom du fichier avec guillemets: "mon fichier.xls"
            Else
            Workbooks.Open (Range("'Sources'!B5")) ' mettre le chemin complet du fichier: c:\mon fichier.xls
            End If

            End Sub