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

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    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 éminent
    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
    Points : 6 871
    Points
    6 871
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    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 éminent
    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
    Points : 6 871
    Points
    6 871
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    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 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    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

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    ça ouvre bien le fichier mais la maccro ne s’exécute pas :

    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
    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
     
        Set Cls_1 = Workbooks.Open(sChemin)
        Set Cls_2 = ActiveWorkbook
     
     
     
    'Matching
     
        'Morgan Stanley
     
        Set Cls_1 = Workbooks.Open(sChemin)
     
    lignemax1 = Range("a7").End(xlDown).Row
     
    For p = 7 To lignemax1
     
    Set Cls_1 = Workbooks.Open(sChemin)
     
        Sens1 = Cells(p, 2)
            If Sens1 = "Buy" Then
                Sens1 = "B"
            ElseIf Sens1 = "Sell" Then
                Sens1 = "S"
            End If
     
        prix_exec1 = CDbl(Cells(p, 10).Value)
        commission1 = CDbl(Cells(p, 12).Value)
        quantite1 = CDbl(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 CDbl(Cells(i, 7).Value) = prix_exec1 Or Round(CDbl(Cells(i, 20).Value), 2) = prix_exec1 Then
                If Round(CDbl(Cells(i, 11).Value), 2) = commission1 Then
                    If CDbl(Cells(i, 4).Value) = quantite1 Then
     
                       Cells(i, 12).Value = "JM"
     
                    End If
                End If
            End If
        End If
     
        Next i
     
     
    Next p
     
     
     
    End Sub

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Pas bonjour non plus !

    ça ouvre bien le fichier mais la maccro ne s’exécute pas
    Si ça ouvre bien le fichier c'est qu'elle s'exécute je dirais...
    Que ça ne fasse pas ce que tu as prévu c'est autre chose.

    Moi je mettrais Set Cls_2 = ActiveWorkbook après l'ouverture du fichier concerné en toute logique.

    eric

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,

    Citation Envoyé par eriiic Voir le message
    Moi je mettrais Set Cls_2 = ActiveWorkbook après l'ouverture du fichier concerné en toute logique.
    tant que c'est possible évitez ActiveWorkBook :

    ayms75 tu oublie de préciser la feuille devant tes cells , range ...!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set Cls_1 = Workbooks.Open(sChemin)
    Dim sh as worksheet
     
    set sh = Cls_1.worksheets("feuil1")  ' AINSI la variable sh pointe sur la feuil1 du casseur ouvert...
    ....
     
       Sens1 = sh.Cells(p, 2) 'PENSE ensuite à préciser la feuille concernée pour tous tes objets cells, range ...;

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    tant que c'est possible évitez ActiveWorkBook
    Tu peux développer stp ?
    J'ai l'impression qu'il y a des surprises cachées que j'ignore.
    (dans le contexte le fichier vient d'être ouvert en vba)

    eric

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    oui Eric,

    en plus mon code n'est pas parlant .... la fonction Open de Workbooks renvoi un objet classeur et donc tu peu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim wk As Workbook
        Set wk = Workbooks.Open("C:\users\MesClasseurs\MonClasseur.xlsm")
        MsgBox "le classeur  : " & wk.Name & " est ouvert"
    pas besoin de jouer avec le classeur actif pour obtenir une référence au classeur ouvert...

    voir Comment travailler sur deux classeurs ?

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Oui, j'avais vu que tu l'ouvrais directement dans une variable, et je suis d'accord que c'est mieux.
    Mais pour activeworkbook, peut-il y avoir d'autres surprises ou pb qu'un autre classeur soit activé par l'utilisateur ?
    eric

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    désolé Eric toujours pareil, ça ouvre le fichier, mais la maccro qui consiste à écrire "JM" quand ça match ne s’exécute pas alors que quand je le fais avec des feuilles ça marche.
    pareil bbil ça met erreur

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Sans les 2 fichiers (réduits) on risque de parler dans le vent un moment.
    eric

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par ayms75 Voir le message
    désolé Eric toujours pareil, ça ouvre le fichier, mais la maccro qui consiste à écrire "JM" quand ça match ne s’exécute pas alors que quand je le fais avec des feuilles ça marche.
    pareil bbil ça met erreur
    tu de nous montrer ton code une fois modifié ... pour le moment le code tu nous montre n'est pas fonctionnel tu utilise Cells sans le précéder de la feuille concernée !!!!

  16. #16
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Comme te le dit bbil, il est impératif de savoir à quelle feuille de quel classeur dépendent les "Range" et Cells ?
    Ton code avec les précisions en commentaires :
    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
     
    Option Explicit '<-- à mettre impérativement afin de limiter le risque d'erreur
     
    Sub import()
     
        Dim Cls_1 As Workbook
        Dim Cls_2 As Workbook
        Dim sChemin
        Dim Sens1 As String
        Dim prix_exec1 As Double
        Dim commission1 As Double
        Dim quantite1 As Double
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        sChemin = Application.GetOpenFilename
     
        If sChemin = False Then Exit Sub
     
        Set Cls_2 = ThisWorkbook 'ici, le classeur contenant cette procédure
        Set Cls_1 = Workbooks.Open(sChemin)
     
        'ici, c'est sur quelle feuille de quel classeur ?
        lignemax1 = Range("a7").End(xlDown).Row
     
        For p = 7 To lignemax1
     
            'S ou B
            Sens1 = Left(Cells(p, 2), 1) 'de même, sur quelle feuille de quel classeur ?
     
            'si ce sont des valeurs numériques dans Excel, pas besoin de convertisseur !
            'et bien sûr, on ne sait toujours pas sur quelle feuille de quel classeur ?
            prix_exec1 = CDbl(Cells(p, 10).Value)
            commission1 = CDbl(Cells(p, 12).Value)
            quantite1 = CDbl(Cells(p, 9).Value)
     
            lignemax2 = Range("b5").End(xlDown).Row 'idem !
     
            For i = 5 To lignemax2
     
               If Cells(i, 3).Value = Sens1 Then
     
                   If CDbl(Cells(i, 7).Value) = prix_exec1 Or Round(CDbl(Cells(i, 20).Value), 2) = prix_exec1 Then
     
                       If Round(CDbl(Cells(i, 11).Value), 2) = commission1 Then
     
                           If CDbl(Cells(i, 4).Value) = quantite1 Then
     
                              Cells(i, 12).Value = "JM"
     
                           End If
     
                       End If
     
                   End If
     
               End If
     
            Next i
     
        Next p
     
    End Sub
    Quand j'ai donné comme exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set Cls_2 = ActiveWorkbook 'le classeur actif par exemple !
    c'est justement pour l'exemple de ce qui peut être fait pour l'affectation à une variable objet WorkBook !
    Quand bbil dit :
    tant que c'est possible évitez ActiveWorkBook
    C'est parce qu'on n'est jamais sûr du classeur actif au moment de l'exécution du code, lui préférer "ThisWorkbook" si le classeur cible est celui contenant la procédure, bien qu'avec "Application.Run" ça peut donner des surprises aussi !

    Hervé.

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Bbil ça me met erreur d’exécution 9, voici le code :
    Hervé je te met le code avec les feuilles qui marche en dessous

    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
    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
     
        Set Cls_1 = Workbooks.Open(sChemin)
        Set Cls_2 = ActiveWorkbook
     
        Dim sh As Worksheet
     
     
     
    'Matching
     
        'Morgan Stanley
     
        Set sh = Cls_1.Worksheets("feuil1")
     
    lignemax1 = sh.Range("a7").End(xlDown).Row
     
    For p = 7 To lignemax1
     
    Set Cls_1 = Workbooks.Open(sChemin)
     
        Sens1 = sh.Cells(p, 2)
            If Sens1 = "Buy" Then
                Sens1 = "B"
            ElseIf Sens1 = "Sell" Then
                Sens1 = "S"
            End If
     
        prix_exec1 = CDbl(sh.Cells(p, 10).Value)
        commission1 = CDbl(sh.Cells(p, 12).Value)
        quantite1 = CDbl(sh.Cells(p, 9).Value)
     
     
        'Main courante
     
        Set Cls_2 = ActiveWorkbook
     
    Set sh = Cls_2.Worksheets("feuil1")
        lignemax2 = Range("b5").End(xlDown).Row
     
        For i = 5 To lignemax2
     
        If sh.Cells(i, 3).Value = Sens1 Then
            If CDbl(sh.Cells(i, 7).Value) = prix_exec1 Or Round(CDbl(Cells(i, 20).Value), 2) = prix_exec1 Then
                If Round(CDbl(sh.Cells(i, 11).Value), 2) = commission1 Then
                    If CDbl(sh.Cells(i, 4).Value) = quantite1 Then
     
                       sh.Cells(i, 12).Value = "JM"
     
                    End If
                End If
            End If
        End If
     
        Next i
     
     
    Next p
     
     
     
    End Sub


    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
    Sub Match()
     
     
     
    'Matching
     
        'Morgan Stanley
     
        Sheets(2).Activate
     
    lignemax1 = Range("a7").End(xlDown).Row
     
    For p = 7 To lignemax1
     
    Sheets(2).Activate
     
        Sens1 = Cells(p, 2)
            If Sens1 = "Buy" Then
                Sens1 = "B"
            ElseIf Sens1 = "Sell" Then
                Sens1 = "S"
            End If
     
        prix_exec1 = CDbl(Cells(p, 10).Value)
        commission1 = CDbl(Cells(p, 12).Value)
        quantite1 = CDbl(Cells(p, 9).Value)
     
     
        'Main courante
     
        Sheets(1).Activate
     
        lignemax2 = Range("b5").End(xlDown).Row
     
        For i = 5 To lignemax2
     
        If Cells(i, 3).Value = Sens1 Then
            If CDbl(Cells(i, 7).Value) = prix_exec1 Or Round(CDbl(Cells(i, 20).Value), 2) = prix_exec1 Then
                If Round(CDbl(Cells(i, 11).Value), 2) = commission1 Then
                    If CDbl(Cells(i, 4).Value) = quantite1 Then
     
                       Cells(i, 12).Value = "JM"
     
                    End If
                End If
            End If
        End If
     
        Next i
     
     
    Next p
     
     
     
    End Sub

  18. #18
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Alors ça, c'est à éviter autant que possible car ça fait scintiller l'écran et ralentir le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sheets(2).Activate
    ...
    Sheets(1).Activate
    ...
    Là, je pense qu'il va falloir que tu expose ta problématique clairement car sinon, on ne s'en sortira pas. Dis nous précisément à quel classeur appartient quelle feuille et à quelle feuille appartiennent les Cells et Range !

    Hervé.

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Morgan stanley = classeur qu'il faut ouvrir feuille 1
    lignemax1 = Range("a7").End(xlDown).Row à quantite1 = CDbl(sh.Cells(p, 9).Value)

    Main courante = classeur où il faut mettre JM feuille 1
    de lignemax2 = Range("b5").End(xlDown).Row à Next i

    j'ai fait comme ça car je débute, mais le but est de remplacer les sheets par les classeur

  20. #20
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    j'ai fait comme ça car je débute, mais le but est de remplacer les sheets par les classeur
    Donc, en partant de l'exemple des feuilles :
    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
     
    Sub Match()
     
        Dim Fe_Morgan_Stanley As Worksheet
        Dim Fe_Main_Courante As Worksheet
        Dim prix_exec1 As Double
        Dim commission1 As Double
        Dim quantite1 As Double
     
        Set Fe_Main_Courante = Sheets(1)
        Set Fe_Morgan_Stanley = Sheets(2)
     
        For p = 7 To Fe_Morgan_Stanley.Range("a7").End(xlDown).Row
     
            With Fe_Morgan_Stanley
     
                Sens1 = Left(.Cells(p, 2), 1)
     
                prix_exec1 = CDbl(.Cells(p, 10).Value)
                commission1 = CDbl(.Cells(p, 12).Value)
                quantite1 = CDbl(.Cells(p, 9).Value)
     
            End With
     
            'Main courante
            For I = 5 To Fe_Main_Courante.Range("b5").End(xlDown).Row
     
               With Fe_Main_Courante
     
                   If .Cells(I, 3).Value = Sens1 Then
     
                       If CDbl(.Cells(I, 7).Value) = prix_exec1 Or Round(CDbl(.Cells(I, 20).Value), 2) = prix_exec1 Then
     
                           If Round(CDbl(.Cells(I, 11).Value), 2) = commission1 Then
     
                                If CDbl(.Cells(I, 4).Value) = quantite1 Then
     
                                    .Cells(I, 12).Value = "JM"
     
                                End If
     
                            End If
     
                        End If
     
                    End If
     
                End With
     
            Next I
     
        Next p
     
    End Sub
    Hervé.

Discussions similaires

  1. [AC-2003] fichiers residuels dans vba
    Par caro2552 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/02/2009, 00h00
  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, 11h02
  3. Réponses: 28
    Dernier message: 22/05/2006, 17h25
  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, 18h57
  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, 13h21

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