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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 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
    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 confirmé
    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
    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 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
    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 confirmé
    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
    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 confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    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
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Expert éminent 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
    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)

+ 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, 22h26
  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, 11h22
  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, 16h42
  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, 11h19
  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, 19h43

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