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 :

Utiliser un objet "wsExcel" ( worksheet) selon le choix d'un "Select Case"


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Points : 0
    Points
    0
    Par défaut Utiliser un objet "wsExcel" ( worksheet) selon le choix d'un "Select Case"
    Bonjour tout le monde :
    En fait , je suis un peu débutant en VBA et j'ai besoin de votre aide . Il y a 3 jours , j'ai poster un truc pareil à celui là .
    Dans un classeur1 ( où le code existe) , dans la feuille "marketing" j'ai un tableau qui commence à partir de la ligne 6 qui contient 5 colonnes ( date , maturité , taux 1 , taux 2 , taux3 ) , et dans un classeur2 j'ai plusieurs feuilles , chacune correspond à une maturité ( "52 W" , "2 ans" , "10 ans" , .... ) .
    ce que je veux c'est que lorsque je saisi une date et une maturité et un taux 1 dans le tableau de la feuille "marketing" du classeur1 , le programme active (choisit) la feuille dans le classeur2 qui correspond à la maturité saisie dans la feuille "marketing" du classeur1 ,et il me cherche un taux2 et un taux3 qui correspondent à une date et un taux1 que j'ai saisie dans la feuille "marketing" du classeur1.

    Je suis encore entrain de faire la code, j'ai définis des variables "wsExcel" et "wbExcel" comme étant respectivement un worksheet et un workbook ( voir le code) et aussi une variable "lo" pour déterminer la position à partir de laquelle je remplie mon tableau du classeur1 .
    la valeur de cellule b1 dans le classeur2 change selon la maturité ( feuilles classeur2 ) .

    Mon problème c'est que dans la dernière ligne je veux normalement écrire un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsExcel.Range("b1").Value = d
    ( wsExcel doit correspondre à une feuille de maturité ) mais la cellule b1 existe dans toutes les feuilles du classeur2 , et le choix de la feuille change selon ce qu'on a choisit dans maturité dans le classeur 1 , c'est dire je veux la valeur de la cellule b1 mais selon le résultat de "Select Case " . comment attribuer à la cellule b1 l'objet " worksheet" selon notre choix de la feuille maturité ? Aidez moi Svp et merci .
    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
    Dim d As Date
    Dim s As String
    Dim lo As Integer
    lo = Range(Range("a6"), Range("a6").End(xlDown)).Count
    lo = lo + 6
    s = Range("C", lo).Value
    Dim wbExcel As Excel.Workbook 'Classeur Excel
    Dim wsExcel As Excel.Worksheet 'Feuille Excel
    'Coorespond au classeur2
    Set wbExcel = Workbooks("classeur2")
     
     
    Select Case s
    Case Is = "52s"
        wbExcel.Worksheets("52 W").Activate
    Case Is = "2A"
        wbExcel.Worksheets("2 ans").Activate
    Case Is = "5A"
        wbExcel.Worksheets("5 ans").Activate
    Case Is = "10A"
      wbExcel.Worksheets("10 ans").Activate
    Case Is = "15A"
        wbExcel.Worksheets("15 ans").Activate
    Case Is = "20A"
       Worksheets("20 ans").Activate
    Case Is = "30A"
        wbExcel.Worksheets("30 ans").Activate
    End Select
    d = Range("A", lo).Value
     
    Range("b1").Value = d

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 127
    Points : 9 956
    Points
    9 956
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quelque chose comme ça ?
    il manque la référence à une feuille dans ton code, il faut compléter

    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
    Sub hi()
    Dim s As String
    Dim lo As Integer
    Dim Wb As Workbook
    Dim Sh As Worksheet
     
    Set Wb = Workbooks("classeur2")
     
    ' quelle feuille ??
    lo = Cells(6, 1).End(xlDown).Row + 6
    s = Cells(lo, 3).Value
    If s = "" Then Exit Sub
     
    If s = "52s" Then
        s = "52 W"
    Else
        s = Mid(s, 1, Len(s) - 1) & " ans"
    End If
     
    On Error Resume Next
    Set Sh = Wb.Worksheets(s)
    Sh.Cells(1, 2) = Sh.Cells(lo, 1)
    On Error GoTo 0
     
    End Sub

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Bonsoir ,

    En fait , j'ai pas bcp compris ce que vous avez publier . vous trouverez en pièces jointes les fichiers . Si vous pouvez maintenant relire mon poste pour bien comprendre mon objectif

    merci

    Classeur1.xlsxClasseur2.xlsx .

  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
    Bonjour,

    Regarde si l'adaptation de ton code te convient (je n'ai rien testé) :
    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
     
    Sub Test()
     
        Dim wbExcel As Workbook 'Classeur Excel
        Dim wsExcel As Worksheet 'Feuille Excel
        Dim s As String
        Dim lo As Integer
     
        lo = ThisWorkbook.ActiveSheet.Range(Range("a6"), Range("a6").End(xlDown)).Count
        lo = lo + 6
        s = ThisWorkbook.ActiveSheet.Range("C", lo).Value
     
        'Correspond au classeur2 (qui doit être ouvert !)
        Set wbExcel = Workbooks("classeur2")
     
        Select Case s
     
            Case "52s"
                Set wsExcel = wbExcel.Worksheets("52 W")
            Case "2A"
                Set wsExcel = wbExcel.Worksheets("2 ans")
            Case "5A"
                Set wsExcel = wbExcel.Worksheets("5 ans")
            Case "10A"
                Set wsExcel = wbExcel.Worksheets("10 ans")
            Case "15A"
                Set wsExcel = wbExcel.Worksheets("15 ans")
            Case "20A"
                Set wsExcel = wbExcel.Worksheets("20 ans")
            Case "30A"
                Set wsExcel = wbExcel.Worksheets("30 ans")
     
        End Select
     
        wsExcel.Range("b1").Value = ThisWorkbook.ActiveSheet.Range("A", lo).Value
     
    End Sub
    Hervé.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Bonjour tout le monde ,

    Voici le code que j'ai fait , je sais pas pourquoi ça marche pas .

    J'espère que la logique de mon programme est comprise .

    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
    Sub Test()
     
    Dim wbExcel As Workbook 'Classeur Excel
    Dim wsExcel As Worksheet 'Feuille Excel
    Dim s As String
    Dim lo As Integer
     ' pour qu'il commence de remplir le tableau du classeur2 à partir de la cellule vide de la colonne F 
        lo = ThisWorkbook.ActiveSheet.Range(Range("f6"), Range("f6").End(xlDown)).Count
        lo = lo + 6
        s = ThisWorkbook.ActiveSheet.Range("C", lo).Value
     
        'Correspond au classeur2 (qui doit être ouvert !)
        Set wbExcel = Workbooks("classeur2.xls")
     
        Select Case s
     
            Case "52s"
                Set wsExcel = wbExcel.Worksheets("52 W")
            Case "2A"
                Set wsExcel = wbExcel.Worksheets("2 ans")
            Case "5A"
                Set wsExcel = wbExcel.Worksheets("5 ans")
            Case "10A"
                Set wsExcel = wbExcel.Worksheets("10 ans")
            Case "15A"
                Set wsExcel = wbExcel.Worksheets("15 ans")
            Case "20A"
                Set wsExcel = wbExcel.Worksheets("20 ans")
            Case "30A"
                Set wsExcel = wbExcel.Worksheets("30 ans")
     
        End Select
     
     wsExcel.Range("b1").Value= ThisWorkbook.ActiveSheet.Range("A",lo).Value
     ' Cette étape c'est pour la recherche du taux2 et taux3 dans classeur2
    Dim l As Integer
    l = wsExcel.Range(wsExcel.Range("a14"), wsExcel.Range("a14").End(xlDown)).Count
    Dim aa As Double
    Dim bb As Double
    Dim a As Integer
    Dim b As Integer
    Dim cost As Boolean
    cost = False
    Dim r As String
    r = Range("H", lo)
    If Mid(r, Len(r), 1) = "%" Then
    r = Mid(r, 1, Len(r) - 1) ' Ici c'est seulement pour ajuster l'écriture du taux 1 dans classeur1
    r = r / 100
    End If
     
    ' Copier les taux2 et taux3 qque j'ai trouvé dans le tableau du classeur1
    Dim i  As Integer
    For i = 1 To l
    If wsExcel.Range("a" & 13 + i).Value = r Then
    aa = wsExcel.Range("c" & 13 + i).Value
    bb = wsExcel.Range("d" & 13 + i).Value
     
    cost = True
    i = l + 1
    End If
    Next
    If cost = False Then
    MsgBox ("Verifier le taux1 que vous avez saisit")
    Else
    wsExcel.Range("f" & lo).Value = aa
    wsExcel.Range("g" & lo).Value = bb
    End If
    End Sub
    J'ai déja mis les deux fichiers en jointure dans le message qui précède . Merci

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Bonjour tout le monde ,

    Svp est ce que quelqu'un peut tester le dernier code que j'ai fait , je sais pas ce qui ne marche pas .

    J'ai déjà envoyé les deux fichier en jointure .

    Merci.

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 127
    Points : 9 956
    Points
    9 956
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    on t'as proposé des codes, et à part dire que tu ne les as pas compris, tu ne dis pas s'ils fonctionnent ou doivent être ajustés !
    (en tout cas pour ma proposition)

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Bonjour tout le monde

    En fait , Le code que je vous ai proposé au début , c'était qu'une partie de mon code global que j'ai ensuite publié dans ma dernière discussion . En fait j'ai intégré ce que vous avez proposé dans mon programme global . mais ça ne marche pas . alors je me demande ce qui ne marche pas dans la suite de mon code .
    Ce que je veux faire c'est :
    Dans un classeur1 ( où le code existe) , dans la feuille "marketing" j'ai un tableau qui commence à partir de la ligne 6 qui contient 5 colonnes ( date , maturité , taux 1 , taux 2 , taux3 ) , et dans un classeur2 j'ai plusieurs feuilles , chacune correspond à une maturité ( "52 W" , "2 ans" , "10 ans" , .... ) .
    ce que je veux c'est que lorsque je saisi une date et une maturité et un taux 1 dans le tableau de la feuille "marketing" du classeur1 , le programme active (choisit) la feuille dans le classeur2 qui correspond à la maturité saisie dans la feuille "marketing" du classeur1 ,et il me cherche un taux2 et un taux3 qui correspondent à une date et un taux1 que j'ai saisie dans la feuille "marketing" du classeur1.

    Voila mon code en totalité , ce que vous m'avez proposé est la première partie du code il faut lire la suite .

    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
    Sub Test()
     
    Dim wbExcel As Workbook 'Classeur Excel
    Dim wsExcel As Worksheet 'Feuille Excel
    Dim s As String
    Dim lo As Integer
     ' pour qu'il commence de remplir le tableau du classeur2 à partir de la cellule vide de la colonne F 
        lo = ThisWorkbook.ActiveSheet.Range(Range("f6"), Range("f6").End(xlDown)).Count
        lo = lo + 6
        s = ThisWorkbook.ActiveSheet.Range("C", lo).Value
     
        'Correspond au classeur2 (qui doit être ouvert !)
        Set wbExcel = Workbooks("classeur2.xls")
     
        Select Case s
     
            Case "52s"
                Set wsExcel = wbExcel.Worksheets("52 W")
            Case "2A"
                Set wsExcel = wbExcel.Worksheets("2 ans")
            Case "5A"
                Set wsExcel = wbExcel.Worksheets("5 ans")
            Case "10A"
                Set wsExcel = wbExcel.Worksheets("10 ans")
            Case "15A"
                Set wsExcel = wbExcel.Worksheets("15 ans")
            Case "20A"
                Set wsExcel = wbExcel.Worksheets("20 ans")
            Case "30A"
                Set wsExcel = wbExcel.Worksheets("30 ans")
     
        End Select
     
     wsExcel.Range("b1").Value= ThisWorkbook.ActiveSheet.Range("A",lo).Value
     ' Cette étape c'est pour la recherche du taux2 et taux3 dans classeur2
    Dim l As Integer
    l = wsExcel.Range(wsExcel.Range("a14"), wsExcel.Range("a14").End(xlDown)).Count
    Dim aa As Double
    Dim bb As Double
    Dim a As Integer
    Dim b As Integer
    Dim cost As Boolean
    cost = False
    Dim r As String
    r = Range("H", lo)
    If Mid(r, Len(r), 1) = "%" Then
    r = Mid(r, 1, Len(r) - 1) ' Ici c'est seulement pour ajuster l'écriture du taux 1 dans classeur1
    r = r / 100
    End If
     
    ' Copier les taux2 et taux3 qque j'ai trouvé dans le tableau du classeur1
    Dim i  As Integer
    For i = 1 To l
    If wsExcel.Range("a" & 13 + i).Value = r Then
    aa = wsExcel.Range("c" & 13 + i).Value
    bb = wsExcel.Range("d" & 13 + i).Value
     
    cost = True
    i = l + 1
    End If
    Next
    If cost = False Then
    MsgBox ("Verifier le taux1 que vous avez saisit")
    Else
    wsExcel.Range("f" & lo).Value = aa
    wsExcel.Range("g" & lo).Value = bb
    End If
    End Sub

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 127
    Points : 9 956
    Points
    9 956
    Billets dans le blog
    5
    Par défaut
    Voici une base stable, et qui fonctionne sur tes 2 fichiers fournis

    je te laisse adapter et ajouter des gestions d'erreurs si tu le souhaites (par exemple : si le taux n'existe pas etc...)

    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
    Option Compare Text
     
    Sub hi()
    Dim WbSource As Workbook
    Dim ShSource As Worksheet
    Dim ShDest As Worksheet
    Dim NomFeuille As String
     
    Set WbSource = Workbooks("Classeur2.xlsx")
    Set ShDest = ThisWorkbook.Worksheets("Marketing")
     
    With ShDest
        ' pour chaque ligne de Marketing
        For i = 6 To .Range("A" & Rows.Count).End(xlUp).Row
     
            ' si Date et Maturité et Taux1 sont remplis
            If .Cells(i, 1) <> "" _
            And .Cells(i, 3) <> "" _
            And .Cells(i, 8) <> "" Then
     
                ' on converti la maturité en nom de feuille du classeur 2
                If .Cells(i, 3) = "52s" Then
                    NomFeuille = "52W"
                Else
                    NomFeuille = Mid(.Cells(i, 3), 1, Len(.Cells(i, 3)) - 1) & " ans"
                End If
     
                ' on tente de trouver la feuille
                On Error Resume Next
                Set ShSource = WbSource.Worksheets(NomFeuille)
                On Error GoTo 0
     
                ' si on trouve la feuille
                If Not ShSource Is Nothing Then
     
                    ' on cherche dans les lignes du tableau des taux
                    For j = 14 To ShSource.Range("A" & Rows.Count).End(xlUp).Row
     
                        ' si on trouve le taux 1
                        If ShSource.Cells(j, 1) = .Cells(i, 8) Then
     
                            ' on écrit taux2 et taux3 dans la feuille Marketing
                            .Cells(i, 6) = ShSource.Cells(j, 3)
                            .Cells(i, 7) = ShSource.Cells(j, 4)
                            Exit For
                        End If
                    Next j
     
                ' si on trouve pas la feuille
                Else
                    ' on met toute la ligne de Marketing en fond jaune
                    .Cells(i, 1).Resize(0, 6).Interior.ColorIndex = vbYellow
                End If
     
                Set ShSource = Nothing
            End If
        Next i
    End With
     
    Set WbSource = Nothing
    Set ShDest = Nothing
     
    MsgBox "Terminé !"
     
    End Sub

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 116
    Points
    1 116
    Par défaut
    Cross posting sauvage !

    Dans combien de forums cette question a-t-elle été posée ?‼

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Points : 0
    Points
    0
    Par défaut
    Bonjour tout le monde ,

    Un ami m'as aidé à régler le problème posé au début de la discussion , qui est de copier les informations à partir d'un fichier "Calcul2" à une autre feuille "Marketing" dans le fichier "Calcul" , à travers le code suivant :

    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 ()
    Dim TD As Variant 'déclare la variable TD (Tableau des Données)
    Dim CL3 As Workbook 'déclare la variable CL3 (CLasseur3)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim D As Date 'déclare la variable D (Date)
    Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim TEST As Boolean 'déclare la variable TEST
    Dim MES As String 'déclare la variable MES (MESage)
     
    ActiveCell.Select 'enlève le focus au bouton
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    TD = Range("A6:A" & Range("A" & Rows.Count).End(xlUp).Row).Resize(, 8) 'définit le tableau de données TD
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set CL3 = Workbooks("Calcul 2.2.xls") 'définit le classeur CL3 (génère une erreur si ce classeur n'est pas ouvert)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        MsgBox "Le classeur " & Chr(34) & "Calcul 2.2.xls" & Chr(34) & " n'est pas ouvert ! Veuillez l'ouvrir." 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
     
    For I = 1 To UBound(TD, 1) 'boucle 1 : sur toutes les lignes I du tableau de données TD
        If TD(I, 5) = "" Then 'condition 1 : si la valeur en colonne 5 (=E) est vide
            TEST = False 'définit la variable TEST
            If IsDate(TD(I, 1)) = False Then 'condition : si la date en ligne I colonne 1 de TD n'est pas valide
                MsgBox "Date non valide !Veuillez recommencer." 'message
                Cells(I + 5, 1).ClearContents 'efface le contenu de la cellule correspondante en colonne A
                Cells(I + 5, 1).Select 'sélectionne la cellule correspondante en colonne A
                Exit Sub 'sort de la procédure
            End If 'fin de la condition
            D = TD(I, 1) 'définit la date D
     
            On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
            Set O2 = CL3.Sheets(TD(I, 3)) 'définit l'onglet O2 (génère une erreur si cet onglet n'existe pas)
            If Err <> 0 Then 'condition 2 : si une erreur a été générée
                Err.Clear 'supprime l'erreur
                MES = IIf(TD(I, 3) = "", "Maturité non renseignée ! Voulez-vous continuer ?", "L'onglet " & _
                   Chr(34) & TD(I, 3) & Chr(34) & " n'existe pas ! Voulez-vous continuer ?") 'définit le message MES
                If MsgBox(MES, vbYesNo, "ATTENTION !") = vbNo Then 'condition 3 : si "Non" au message
                    Cells(I + 5, 3).ClearContents 'efface le contenu de la cellule correspondante en colonne C
                    Cells(I + 5, 3).Select 'sélectionne la cellule correspondante en colonne C
                    Exit Sub 'sort de la procédure
                Else 'sinon (si "Oui" au messsage)
                    GoTo Suite 'va à l'étiquette "Suite"
                End If 'fin de la condition 3
            End If 'fin de la condition 2
            On Error GoTo 0 'annule la gestion des erreurs
     
            TC = O2.Range("A13").CurrentRegion '.Resize(, 4) 'définit le tableau de cellules TC
            O2.Range("B1").Value = D 'renvoie la date D dans la cellue B1 de l'onglet O2
            For J = 2 To UBound(TC, 1) 'boucle 2 : sur toutes les lignes J du tableau de cellules TC (en partant de la seconde)
                'condition 4 : si la valeur du taux 1 (ligne I colonne 8 de TD) est égale à la valeur ligne J colonne 1 de TC
                If CStr(TD(I, 8)) = CStr(TC(J, 1)) Then
                    TEST = True 'définit la variable TEST
                    Cells(I + 5, 6).Value = TC(J, 3) 'récupère en colonne F la valeur ligne J colonne 3 de TC
                    Cells(I + 5, 6).NumberFormat = "0.000%" 'format de la cellule
                    Cells(I + 5, 7).Value = TC(J, 4) 'récupère en colonne G la valeur ligne J colonne 4 de TC
                    Cells(I + 5, 7).NumberFormat = "0.00000000%" 'format de la cellule
                    Erase TC 'efface le tableau de cellules TC
                    Exit For 'sort de la boucle 2
                End If 'fin de la condition 4
            Next J 'prochaine ligne de la boucle 2
            If TEST = False Then 'condition 5 : si TEST est [Faux]
                MsgBox "Aucune valeur correspondant au Taux 1 n'a été trouvée pour la ligne " & I + 5 & " !" 'message
                Cells(I + 5, 8).Interior.ColorIndex = 3 'colore la cellule du Taux 1 de rouge
            End If 'fin de la condition 5
    End If 'fin de la condition 1
    Suite: 'étiquette
    Next I 'prochaine ligne de la boucle 1
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub

    En fait , ce que je veux maintenant , c'est faire une petite rectification , Concernant les taux qui sont copiés dans le fichier "calcul" à partir du fichier "calcul2" , ce sont les taux 2 ( TC(J, 3) ) et taux 3 ( TC(J, 4) ) qui correspondent à un taux 1 (TC(J, 1)) saisi dans la feuille "Marketing" du fichier "calcul", je veux qu'il aurait une exception pour la feuille "52S" du fichier "calcul2" en récupérant le taux 2 et le taux4 ( TC(J, 5)) au lieu du taux3 (TC(J, 4)).

    Merci bcp .

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/05/2008, 02h06
  2. [delphi 5,6,7] utiliser un objet dans une procédure
    Par wizdom dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2006, 15h38
  3. [PDO] Utiliser l'Objet de PHP pour gérer sa base de données
    Par Viau dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/01/2006, 18h16
  4. Utilisation d'objets pour imprimer
    Par alainvh dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/12/2004, 10h25
  5. utilisation d'objets ADO pour CMS sur POSTGRESQL7.3.2
    Par turbok dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/10/2003, 09h29

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