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 :

se positionner sur un autre fichier excel [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut se positionner sur un autre fichier excel
    Bonjour,
    j'ai développé une macro excel spécifique ( que nous appelerons Macro) qui lit un autre classeur excel ( incident ) qui contient des enregistrements à traiter.

    L'un de mes tests utilisateurs est le suivant :
    1) le fichier Incident est déjà ouvert dans un "espace" excel
    2) ouverture de la macro dans un autre "espace" excel différent de celui du fichier incident

    Je cherche à vérifier si le fichier sélectionné est déjà ouvert et si oui, me positionner dessus pour effectuer d'autres contrôles. Ci-joint un extrait du programme

    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
    40
    41
    42
    43
    44
     
    StrExtractBO = strRepertoire & "\" & StrFichierRO
    .....
    ' contrôle si fichier déjà ouvert sinon ouverture du fichier
     
       If VerifOuvertureClasseur(StrExtractBO) Then
            MsgBox ("Classeur déjà ouvert")
     
           => quelles instructions mettre ???  ...Activate
     
        Else
            Workbooks.Open filename:=StrExtractBO
        End If
     
        ' vérification s'il s'agit bien d'un fichier incident RO
     
        BadRO = 0 ' fichier incident RO OK
        If WsExist("Informations générales") = False Then BadRO = 1
     
    .....
    Function VerifOuvertureClasseur(Fichier As String) As Boolean
        Dim x As Integer
     
        On Error Resume Next
        x = FreeFile()
     
        Open Fichier For Input Lock Read As #x
        Close x
     
        If Err.Number = 0 Then VerifOuvertureClasseur = False
        If Err.Number = 70 Then VerifOuvertureClasseur = True
     
        On Error GoTo 0
    End Function
    .......
     
    ' Test de l'existence d'une feuille
    Function WsExist(nom$) As Boolean
     
        On Error Resume Next
     
        WsExist = Sheets(nom).Index
     
    End Function
    Je n'arrive pas à trouver l'instruction qui me permet de me positionner sur l'autre fichier excel ( workbooks?, windows ? ) pour effectuer les contrôles suivants. Je tombe toujours en erreur d'indice.

    en vous remerciant par avance pour votre aide

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim Wbk As Workbook
     
     
    StrExtractBO = strRepertoire & "\" & StrFichierRO
     
    If VerifOuvertureClasseur(StrExtractBO) Then
        MsgBox "Classeur déjà ouvert"
        Set Wbk = GetObject(StrExtractBO)
    Else
        Set Wbk = Workbooks.Open(StrExtractBO)
    End If
     
    'Exemple on écrit RRRR dans la première feuille du fichier
    Wbk.Worksheets(1).Range("A1").Value = "RRRR"
     
    'Wbk contient le fichier incident
    'Wbk.close 'Ferme le fichier incident
    'Set Wbk=nothing
    End Sub
     
    Function VerifOuvertureClasseur(ByVal Fichier As String) As Boolean
    Dim x As Integer
     
    x = FreeFile()
    On Error Resume Next
    Open Fichier For Input Lock Read As #x
    VerifOuvertureClasseur = Err.Number = 70
    Close x
    On Error GoTo 0
    End Function

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour

    merci beaucoup à mercatog pour cette réponse.
    J'ai donc essayé en ajoutant le code et en testant la mise à jour "AAA" dans la 1ère cellule du fichier déjà ouvert dans un environnement excel différent de celui de la macro.
    A première vue, il n'a rien écrit dans la cellule du 1er onglet du fichier ouvert.

    Je souhaite d'ailleurs vérifier que le 1er onglet du fichier excel ouvert porte bien le nom "informations générales". Or mon test ne fonctionne pas.

    Comment cela se fait ?
    Merci beaucoup par avance pour vos réponses

    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
     
    Dim Wbk As Workbook
     
     
    StrExtractBO = strRepertoire & "\" & StrFichierRO
     
    If VerifOuvertureClasseur(StrExtractBO) Then
        MsgBox "Classeur déjà ouvert"
        Set Wbk = GetObject(StrExtractBO)
    Else
        Set Wbk = Workbooks.Open(StrExtractBO)
    End If
     
    'Exemple on écrit RRRR dans la première feuille du fichier
    Wbk.Worksheets(1).Range("A1").Value = "RRRR"
     
    'Wbk contient le fichier incident
    'Wbk.close 'Ferme le fichier incident
    'Set Wbk=nothing
     
    ' vérification s'il s'agit bien d'un fichier incident RO
     
        BadRO = 0 ' fichier incident RO OK
        If WsExist("Informations générales") = False Then BadRO = 1
     
     
     
    End Sub
     
    Function VerifOuvertureClasseur(ByVal Fichier As String) As Boolean
    Dim x As Integer
     
    x = FreeFile()
    On Error Resume Next
    Open Fichier For Input Lock Read As #x
    VerifOuvertureClasseur = Err.Number = 70
    Close x
    On Error GoTo 0
    End Function

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    J'ai testé le code sur un fichier ouvert dans une autre instance Excel sur un même poste de travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Wbk As Workbook
    Dim BadRo As Byte
     
    StrExtractBO = strRepertoire & "\" & StrFichierRO
     
    If VerifOuvertureClasseur(StrExtractBO) Then
        MsgBox "Classeur déjà ouvert"
        Set Wbk = GetObject(StrExtractBO)
    Else
        Set Wbk = Workbooks.Open(StrExtractBO)
    End If
     
    'On teste si la première feuille est nommée Informations générales
    If Wbk.Worksheets(1).Name = "Informations générales" Then BadRo = 1

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    bonjour,
    merci beaucoup à mercatog
    cela marche maintenant.

    Malheureusement dans ma macro, dans d'autres sous routines, j'utilisais les fonctions windows().activate et Sheets("Informations générales").Visible = true pour travailler dans un onglet du fichier.

    Depuis l'utilisation de la fonction getobject dans le menu de départ, il semble que cela génère un code erreur ("l'indice n'appartient pas à la sélection" sur la fonction Sheets.

    Par ailleurs , mon ancienne fonction "EstOuvert" d'ouverture de fichier ne fonctionne plus

    Dois-je tout revoir le code ?

    Exemple de partie de code plus loin

    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
    Sub ToAccessRO()
    '
    On Error GoTo exit_ToAccessRO
     
        If Not EstOuvert(StrFichierRO) Then
          MsgBox "Le fichier incident RO n'est pas ouvert. Utiliser la fonction < Recherche fichier incident > la prochaine fois"
          closeRO = 1
        Else
     
          ' si contenu variable globale vide
          If StrFichierRO = "" Then
          ' récupération nom du fichier des incidents RO
            Sheets("base").Visible = True
            Sheets("base").Select
            Range("A4").Select
            StrFichierRO = Range("A4")
            Sheets("base").Visible = False
            Sheets("Feuil1").Select
          End If
     
         Windows(StrFichierRO).Activate
         Sheets("Informations générales").Select  '<= erreur sur la commande  
       End If
    .......
     
    .......
    Function EstOuvert(Classeur$) As Boolean
      On Error Resume Next
      EstOuvert = Not Workbooks(Classeur) Is Nothing
      Err.Clear
    End Function

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    a paritr du moment où les fichiers sont ouverts, pourquoi les mettre au premier plan pour travailler dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Sheets("base").Visible = True
    StrFichierRO = workbooks(nom_du_fichier_avec_extension).Sheets("base").Range("A4")
    'Sheets("base").Visible = False

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    @marcelisa2
    Mets tes codes en entier pour pouvoir te guider

    @casefayere
    Le fichier en question est ouvert dans une autre instance d'excel (d'ailleurs je ne vois pas l'utilité de travailler avec plusieurs instances ou je ne sais pas)

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Rebonjour,

    @casefayere
    merci

    @mercatog
    tu trouveras ci-joint le code plus complet.
    L'objectif principal de la macro est de générer des Graphiques standards pour des utilisateurs n'ayant pas l'habitude d'excel. Il s'agit donc d'avoir une macro indépendante du fichier incident des utilisateurs qui effectue des ajouts d'onglets pour générer ces graphes et des statistiques. Je dois donc prévoir tous les cas de cinématique. En autre, que l'utilisateur a déjà ouvert don fichier. Puis ensuite relance la macro pour générer ses graphiques.

    Code :
    dans une fenêtre listant tous les fichier xlsx présent dans le répertoire de la macro, l'utilisteur choisit un fichier et appuie sur un bouton qui pointe sur la sous routine suivante:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    ' lancer le traitement de chargement du fichier ( et traduction eventuellement )
    Private Sub validez_Click()
     
        If ListBox1.ListIndex = -1 Then
            Exit Sub
        End If
     
        ' Sauvegarde du fichier incidents RO à manipuler
        Sheets("base").Visible = True
        Sheets("base").Select
     
        ' fichier incident RO déjà traduit
        If Range("A4") = ListBox1.List(ListBox1.ListIndex) And newrecherche = 1 Then
            MsgBox "Le fichier a déjà été traité et est ouvert. Choisissez un nouveau fichier incident RO ou appuyez à nouveau sur Ok"
            newrecherche = 0
            Exit Sub
        Else
            Range("A4") = ListBox1.List(ListBox1.ListIndex)
        End If
     
        Application.Visible = True
     
        ActiveWindow.SelectedSheets.Visible = False
     
        ' Positionnement
        Sheets("base").Visible = False
        Sheets("Feuil1").Select
        Unload SelFichier
     
        ' Ouverture du fichier
        Call Fichiers
     
        ' message si fichier incident non RO
        If BadRO = 1 Then
           Call ToAccessIN
           MsgBox "ce n'est pas un fichier incident RO. Veuillez utiliser la fonction <Sélection Repertoire> à nouveau"
           BadRO = 0
           SelFichier.Show
           Exit Sub
        End If
     
        ' recupération de la valeur du dernier process
        Call Dernierprocess
     
        ' import fichier et traduction en français demandés
        If valprocess <> 0 Then
     
            ' accès au fichier des incidents RO
            Call ToAccessRO
     
            ' Import Référentiel
            Call Import
     
            ' Traduction à réaliser
            Call traduction
        Else
     
            ' accès au fichier des incidents RO
            Call ToAccessRO
     
            ' suppression des 3 premières lignes sur les 3 onglets infos géné, effets et causes
            Call sanstraduction
     
            ' traitement terminé
            Call ToAccessIN
            Sheets("Feuil1").Select
     
            MsgBox "Phases d'import et de traduction décochées"
            ' Branchement sur Ecran de Choix Stat / Graphes / Recherche
            Menu.Show
        End If
    les traitements sont :
    1) transférer l'onglet référentiel de la macro vers le nouveau fichier incident
    2) effectuer la traduction anglais - français basée sur le référentiel transféré

    Routine fichier
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    Sub Fichiers()
     
       On Error GoTo Err_Fichiers
     
       ' récupération valeur traitement fichier
       Sheets("base").Visible = True
       Sheets("base").Select
     
       ' affichage de l'onglet base et sélecton de la cellule du chemin du répertoire commune
       Range("A2").Select
     
       ' récupération du chemin du répertoire commun ainsi que du nom du fichier
       strRepertoire = Range("A2")
     
       ' récupération du nom du fichier des incidents RO extraits de BO
       Range("A4").Select
       StrFichierRO = Range("A4")
     
       ' récupération du nom de la macro Reporting
       Range("A6").Select
       StrFichierIN = Range("A6")
     
       Sheets("base").Visible = False
       Sheets("Feuil1").Select
     
      ' Vérification du nom du chemin du répertoire
       If Dir(strRepertoire, vbDirectory) = "" Then
           MsgBox "Le Répertoire du fichier BO est introuvable. Veuillez contacter l'administrateur .", vbExclamation
           Call ToAccessIN
           Menu.Show
           Exit Sub
       End If
     
       StrExtractBO = strRepertoire & "\" & StrFichierRO
     
     
       ' Vérifier que le répertoire contient le fichier extraction BO incident
       If Dir(StrExtractBO, vbDirectory) = "" Then
           MsgBox "Il n'y a aucun fichier BO présent dans le répertoire " & StrExtractBO & ". Veuillez contacter l'administrateur .", vbExclamation
           Call ToAccessIN
           Menu.Show
           Exit Sub
       End If
     
       ' contrôle si fichier déjà ouvert sinon ouverture du fichier
     
       If VerifOuvertureClasseur(StrExtractBO) Then
            MsgBox ("Classeur déjà ouvert")
            Set Wbk = GetObject(StrExtractBO)
        Else
            Set Wbk = Workbooks.Open(StrExtractBO)
        End If
     
        ' vérification s'il s'agit bien d'un fichier incident RO
     
        BadRO = 0 ' fichier incident RO OK
     
        If Wbk.Worksheets(2).Name <> "Informations générales" Then BadRO = 1
     
    Exit_Fichiers:
        Exit Sub
     
    Err_Fichiers:
        MsgBox "erreur programme : " & Err.Description & " contacter l'administrateur."
        MsgBox "module : Fichiers "
        Resume Exit_Fichiers
     
    End Sub
    la routine d'accès au fichier incident RO ( à revoir )
    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
     
    Sub ToAccessRO()
    '
    On Error GoTo exit_ToAccessRO
     
        If Not EstOuvert(StrFichierRO) Then
          MsgBox "Le fichier incident RO n'est pas ouvert. Utiliser la fonction < Recherche fichier incident > la prochaine fois"
          closeRO = 1
        Else
     
          ' si contenu variable globale vide
          If StrFichierRO = "" Then
          ' récupération nom du fichier des incidents RO
            Sheets("base").Visible = True
            Sheets("base").Select
            Range("A4").Select
            StrFichierRO = Range("A4")
            Sheets("base").Visible = False
            Sheets("Feuil1").Select
          End If
     
         Windows(StrFichierRO).Activate
     
        End If
     
    exit_ToAccessRO:
    Exit Sub
     
    err_ToAccessRO:
        MsgBox "erreur programme : " & Err.Description & " contacter l'administrateur."
        MsgBox "module : ToAccessRO "
        Resume exit_ToAccessRO
     
    End Sub
    accès routine macro
    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
     
    Sub ToAccessIN()
    '
    On Error GoTo exit_ToAccessIN
     
      ' si contenu variable globale vide
      If StrFichierIN = "" Then
          ' récupération valeur du fichier Macro
          Sheets("base").Visible = True
          Sheets("base").Select
          Range("A6").Select
          StrFichierIN = Range("A6")
          Sheets("base").Visible = False
          Sheets("Feuil1").Select
      End If
      ' activation du fichier
      Windows(StrFichierIN).Activate
     
    exit_ToAccessIN:
    Exit Sub
     
    err_ToAccessIN:
        MsgBox "erreur programme : " & Err.Description & " contacter l'administrateur."
        MsgBox "module : ToAccessIN "
        Resume exit_ToAccessIN
     
    End Sub
    merci à tous

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bon, je reformule ma demande (je voulais le code en entier où ça pose problème).

    Néanmoins, j'ai des remarques pour t'aider

    1. Évite les Select/ Activate

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          If StrFichierRO = "" Then
          ' récupération nom du fichier des incidents RO
            Sheets("base").Visible = True
            Sheets("base").Select
            Range("A4").Select
            StrFichierRO = Range("A4")
            Sheets("base").Visible = False
            Sheets("Feuil1").Select
          End If
    à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If StrFichierRO = "" Then StrFichierRO = Sheets("base").Range("A4").Value
    Remarque la différence d'écriture et de performances!

    Je récupère directement la valeur de A4 de la feuille base directement sans sélection préalable et sans rendre la feuille visible.


    2. a. Quand tu travailles sur une seule feuille et est la feuille active, tu peux écrire l'exemple précédent comme ceci (personnellement je déconseille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If StrFichierRO = "" Then StrFichierRO = Range("A4").Value
    2.b. Quand tu travailles sur plusieurs feuilles d'un même classeur, tu dois indiquer la feuille à laquelle se rapporte la cellule ou la plage de cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If StrFichierRO = "" Then StrFichierRO =  Worksheets("Base").Range("A4").Value
    Je suis dans ce cas certain que dans StrFichierRO j'ai le contenu de la cellule A4 de la feuille Base quelque soit la feuille active et même si elle est cachée ou visible.

    2. c. Quand tu travailles sur plusieurs classeurs, tu dois indiquer outre la feuille à laquelle se rapporte la cellule ou la plage de cellules, le classeur auquel se rapporte la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Wbk As Workbook
     
    Set Wbk=Workbooks.open("C:\Users\user\Desktop\TOTO.xls")
    If StrFichierRO = "" Then StrFichierRO =  Wbk.Worksheets("Base").Range("A4").Value
    Set Wbk=Nothing
    Je suis dans ce cas certain que dans StrFichierRO j'ai le contenu de la cellule A4 de la feuille Base du classeur TOTO quelque soit le classeur ou la feuille actifs.

    Moralité, dans ton code, tu avais une variable objet nommée Wbk contenant le classeur cible (soit par GetObject soit par Workbooks.open), il ne reste qu'à préfixer les feuilles et les cellules ou plages correctement comme expliqué ci-haut.

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    j'ai bien avancé grâce aux différents conseils de mercatog.
    Il me reste un point que je n'arrive pas à réaliser.
    Au moment où l'utilisateur souhaite accéder au fichier excel ouvert dans une autre instance, je souhaite :

    • afficher le fichier excel déjà ouvert dans l'autre instance

    • le positionner sur le 1er onglet "information générales" en cellule B2


    Quelle instruction dois je utiliser ? ( wbk est la variable utilisée avec l'instruction getobject )

    Merci

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Ma grande question est:
    Pourquoi (et comment fais-tu pour) ouvrir ton application dans une autre instance que celle où pourrait être ouvert le classeur à traiter?

    Si un classeur est ouvert, le fait d'ouvrir un autre classeur (par un raccourci) ouvrira ce dernier dans la même instance que celui déjà ouvert.

    Il sera dès lors plus facile de vérifier si le classeur à traiter fait partie de la collection des classeurs ouverts.

    Pour info, il semble que nous travaillons dans le même domaine (gestion des incidents) et je parierais que tu es dans le financier...

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    bonjour AlainTech,
    oui, je travaille également sur des incidents. ma problématique est que je dois tester tous les cas possibles que l'utilisateur peut faire avec son fichier incident et la macro de l'autre.

    Il est tout à fait possible qu'il ouvre d'abord le fichier excel dans une instance (pour la regarder) et ensuite il ouvre une autre instance pour lancer la macro excel. exemple : ouvre un fichier excel - une fois réalisé, ouvre via démarrer une autre instance excel

    C'est pourquoi, je dois pouvoir lui proposer d'accéder au fichier déjà ouvert d'une autre instance.

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ton application a-t-elle besoin de visualiser le classeur source?

    Si non, je te conseille vivement de travailler par la méthode ADO.
    Elle permet de travailler sur n'importe quel classeur organisé en base de données, qu'il soit ouvert ou fermé.

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Oui, mon classeur doit pouvoir visualiser le classeur source et présenter le 1er onglet à l'utilisateur final pour qu'il puisse retravailler dedans.

    Je ne connais pas méthode ADO.

    Merci

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    je n'ai pas encore trouvé le moyen de faire afficher à l'utilisateur le 1er onglet de son fichier dans une autre instance que celle où se trouve ma macro excel.

    mon besoin est, lorsqu'il appuie sur un bouton issu de ma macro dans une instance excel:

    * afficher à l'utilisateur le fichier excel déjà ouvert dans l'autre instance
    * le positionner sur le 1er onglet "information générales" en cellule B2

    Quelle instruction dois je utiliser ? ( wbk est la variable utilisée avec l'instruction getobject )

    Merci pour vos retours

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    concernant mon soucis d'essayer d'afficher l'onglet d'une feuille excel dans une autre instance que celle de ma macro, j'ai essayé plusieurs options sans succès.

    Dans le code suivant, je teste le cas 99. les autres cas n'ont pas été encore adaptés et ne fonctionnent que lorque nous sommes dans la même instance :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    Sub ToFileRO()
    '
     
     On Error GoTo Err_ToFileRO
     
        ' acces au fichier des incidents RO
        Call ToAccessRO
     
        'si fichier incident bien présent
        If closeRO = 0 Then
     
          'recherche du dernier traitement dans l'onglet base de l'outil
          Call Dernierprocess
     
          'positionnement sur l'un des onglets du fichier incident en fonction de la
          valeur du dernier traitement
     
          ' acces au fichier des incidents RO
          Call ToAccessRO
     
          Select Case valprocess
            Case 1
            ' sinon, si demande simple de retour dans le fichier
              Sheets("Informations générales").Select
              Range("B2").Select
            Case 2
              If emptyGr = 0 Then
               ' si processus Graphes réalisé, se positionner sur le 1er onglet graphe
               généré
                 Sheets("Evenement").Select
                 Range("A1").Select
              Else
               ' graphes vides finalement donc se positionner sur l'onglet informations générales
                 Sheets("Informations générales").Select
                 Range("B2").Select
              End If
            Case 3
            ' si processus Statistique réalisé, se positionner sur l'onglet statistique généré
              Sheets("Statistique").Select
              Range("A1").Select
            Case 99
            ' si rien n'a été reéalisé
              MsgBox Wbk.Sheets("Informations générales").Range("B2") ' test affichage du champ => résultat correct
              Wbk.Sheets("Informations générales").Range("B2").Select  
    ' <= je souhaite ici aller dans l'onglet du fichier incident 
    'se trouvant dans l'autre instance excel et le faire afficher à l'utilisateur 
    '( alors qu'au démarrage il est dans l'onglet de la macro 
    'dans la 1ère instance ) => 
    'cette instruction ne fonctionne pas. Merci pour vos retours
           End Select
     
         End If
     
     
     
    Exit_ToFileRO:
        Exit Sub
     
    Err_ToFileRO:
        MsgBox "erreur programme : " & Err.Number & " Detail: " & Err.Description & " contacter l'administrateur."
        MsgBox "module : ToFileRO "
        Resume Exit_ToFileRO
     
    End Sub
    .....................
    Sub ToAccessRO()
    '
    On Error GoTo exit_ToAccessRO
     
        If Not VerifOuvertureClasseur(StrExtractBO) Then
          MsgBox "Le fichier incident RO n'est pas ouvert. Utiliser la fonction < Recherche fichier incident > la prochaine fois"
          closeRO = 1
        Else
     
          ' si contenu variable globale vide
          If StrFichierRO = "" Then StrFichierRO = wbk.WorksSheets("Base").Range("A4").Value
     
        Wbk = GetObject(StrExtractRO)
     
        ' Windows(StrFichierRO).Activate
     
        End If
     
    exit_ToAccessRO:
    Exit Sub
     
    err_ToAccessRO:
        MsgBox "erreur programme : " & Err.Description & " contacter l'administrateur."
        MsgBox "module : ToAccessRO "
        Resume exit_ToAccessRO
     
    End Sub

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    toujours par rapport à mon problème d'afficher le 1er onglet d'un fichier excel se trouvant dand une autre instance que celle où se situe ma macro, je n'ai trouvé comme solution que de :

    • fermer le fichier excel de l'autre instance

    • et le réouvrir


    y a t-il d'autres solutions plus simple? En vous remerciant par avance pour votre aide

    voici la dernière version du 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
     
    Case 99
            ' si rien n'a été réalisé
              'test d'accès
              MsgBox Wbk.Sheets("Informations générales").Range("B2")
              'Désactive les évènements
              Application.EnableEvents = False
              Application.DisplayAlerts = False
              Wbk.Close savechanges:=False
              'Ouvre le classeur
              Set Wbk = Workbooks.Open(StrExtractBO)
              'réactiver les évènements
              Application.EnableEvents = True
              Wbk.Worksheets("Informations générales").Select

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

Discussions similaires

  1. [XL-2010] Appliquer Macro sur un autre fichier Excel
    Par Rageo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/05/2014, 23h26
  2. Copier un onglet sur un autre fichier excel
    Par dimitri70 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/10/2013, 12h22
  3. Copier onglet sur un autre fichier excel
    Par dimitri70 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/09/2013, 17h42
  4. [Toutes versions] Formule pour recuperer une valeur sur un autre fichier Excel
    Par bonilla dans le forum Excel
    Réponses: 2
    Dernier message: 26/06/2012, 12h19
  5. [VBA-E] Pointer sur un autre fichier Excel
    Par Yop dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/12/2006, 20h43

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