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 :

Fichier actif dans vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Par défaut Fichier actif dans vba
    Bonjour à tous, ce forum est très utile, je vous remercie,

    J'ai un petit problème, je dois effectuer une macro qui concerne 2 fichiers, d'abord j'ouvre un fichier et dans la macro il en appelle un autre, mon code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    sChemin = Application.GetOpenFilename
     
    Workbooks.Open Filename:=sChemin
    Ensuite je dois commencer à programmer mais je sais pas comment rendre actif les fichiers, j'en est déjà fait entre 2 onglets : Sheets (3).activate mais je ne sais pas avec 2 fichiers.

    Merci de votre aide

    j'ai oublié de préciser, sachant que 1 fichier aura un nom différent tout les jours

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu n'es pas obligé d'activer les classeurs si tu veux manipuler les valeurs, je te conseille d'utiliser des variables WorkBook pour passer de l'un à l'autre :
    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
     
    Sub Test()
     
        Dim Cls_1 As Workbook
        Dim Cls_2 As Workbook
        Dim sChemin
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        sChemin = Application.GetOpenFilename
     
        If sChemin = False Then Exit Sub
     
        Set Cls_1 = Workbooks.Open(sChemin)
        Set Cls_2 = ActiveWorkbook 'le classeur actif par exemple !
     
        '...
     
    End Sub
    Hervé.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Par défaut
    ça à l'air parfait ça, merci et donc je fais mon code en dessous le set qui correspond au fichier

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Oui, quand tu veux récupérer une valeur dans une cellule d'une certaine feuille tu peux utiliser une variable qui fait référence à la feuille et aussi si tu veux une variable qui fait référence à cette cellule et ceci donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Fe_1 = Cls_1.Worksheets("Feuil1") 'pour la feuille
    Set Cel = Fe_1.Range("A1") 'pour la cellule
    une fois ces références faites, il ne te sera plus nécessaire de faire référence au classeur et à la feuille si tu ne vise que la cellule car le compilateur sait exactement à quel objet (ici, une cellule) est rattaché cette variable.
    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
     
    Sub Test()
     
        Dim Cls_1 As Workbook
        Dim Cls_2 As Workbook
        Dim Fe_1 As Worksheet
        Dim Fe_2 As Worksheet
        Dim Plage As Range
        Dim Cel As Range
     
        Dim sChemin
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        sChemin = Application.GetOpenFilename
     
        If sChemin = False Then Exit Sub
     
        Set Cls_1 = Workbooks.Open(sChemin)
        Set Cls_2 = ActiveWorkbook 'le classeur actif par exemple !
     
        'une fois ceci fait, il n'est plus nécessaire de faire référence au classeur Cls_1
        'le compilateur sait exactement sur quelle feuille il doit travailler...
        Set Fe_1 = Cls_1.Worksheets("Feuil1")
     
        'pour une cellule :
        MsgBox Fe_1.Cells(1, 1).Value
        'ou encore :
        MsgBox Fe_1.Range("A1").Value
        'et encore avec la variable :
        Set Cel = Fe_1.Range("A1")
        MsgBox Cel.Value
     
        'pour une plage :
        Set Plage = Fe_1.Range("A1:D10")
        MsgBox Plage.Address(0, 0)
     
        '...
     
    End Sub
    Hervé.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Par défaut
    Hervé j'ai tenté un truc mais ça marche pas, c'était notamment pour matcher 2 fichiers, voici le 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
    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
    Sub import()
     
    'ouverture du fichier
     
    Dim Cls_1 As Workbook
        Dim Cls_2 As Workbook
        Dim sChemin
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        sChemin = Application.GetOpenFilename
     
        If sChemin = False Then Exit Sub
     
     
    'Matching
     
        'Morgan Stanley
     
        Set Cls_1 = Workbooks.Open(sChemin)
     
    lignemax1 = Range("a7").End(xlDown).Row
     
    For p = 7 To lignemax1
     
        sens1 = Cells(p, 2)
            If sens1 = "buy" Then
                sens1 = "b"
            ElseIf sens1 = "sell" Then
                sens1 = "s"
            End If
     
        prix_exec1 = Cells(p, 10).Value
        commission1 = Cells(p, 12).Value
        quantite1 = Cells(p, 9).Value
     
     
        'Main courante
     
        Set Cls_2 = ActiveWorkbook
     
    lignemax2 = Range("b5").End(xlDown).Row
     
        For i = 5 To lignemax2
     
        If Cells(i, 3).Value = sens1 Then
            If Cells(i, 7).Value = prix_exec1 Then
                If Cells(i, 11).Value = commission1 Then
                    If Cells(i, 4).Value = quantite1 Then
     
                       Cells(i, 14).Value = "JM"
     
                    End If
                End If
            End If
        End If
     
        Next i
     
    Next p
     
    End Sub

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Quand tu demandes soit plus précis que ça marche pas qui ne veut rien dire.

    Lorsque tu ouvres un classeur il est actif.
    Donc Cls_2=Cls_1

    Essaie en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cls_2 = ActiveWorkbook
    au début de ta macro avant d'ouvrir l'autre (enfin si c'est celui là que tu veux).

    Et si c'est celui qui contient cette macro tu peux aussi mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cls_2 = ThisWorkbook
    eric

Discussions similaires

  1. [AC-2003] fichiers residuels dans vba
    Par caro2552 dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/02/2009, 23h00
  2. [VBA-Excel] Ouvrir un lot de fichier txt dans Excel
    Par Trollakuir dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/06/2006, 10h02
  3. Réponses: 28
    Dernier message: 22/05/2006, 16h25
  4. [VBA-A] Importation de fichiers Excel dans Access
    Par elkhy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/05/2006, 17h57
  5. [VBA-A]Travailler dans un fichier Excel dans Access
    Par pilou0013 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/05/2006, 12h21

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