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 :

Distinguer entre les feuilles d'un classeur selon le choix de l'utilisateur


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Par défaut Distinguer entre les feuilles d'un classeur selon le choix de l'utilisateur
    Bonjour tout le monde ,

    je veux faire une rectification à un problème que j'ai déja posté ce problème il y a des mois , et avec l'aide d'un ami j'ai pu résoudre mon problème . Pour vous rappelez le problème que j'ai posté avant est le suivant :

    Dans un classeur "calcul" ( 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 classeur "calcul2" j'ai plusieurs feuilles , chacune correspond à une maturité ( "52S" , "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 fichier "calcul" , le programme active (choisit) la feuille dans le classeur "calcul2" qui correspond à la maturité saisie dans la feuille "marketing" du classeur "calcul" ,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 "calcul".

    Le code est le 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 .

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    contexte du sujet : http://www.developpez.net/forums/d15...d-select-case/


    je passe mon chemin cette fois-ci ... c'est transparent je vous rassure

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 44
    Par défaut
    Bonjour Joe levrai ,

    J'ai pas bien compris . j'ai crée une nouvelle discussion parceke personne ne m'a pas repondu dans l'ancienne car j'ai cru que lorsque c'est résolue , je peux plus continuer dans cette discussion .

    veuilez m'expliquer votre réponse .

    Merci.

Discussions similaires

  1. [XL-2007] Macros VBA sous xls "export data entre les feuilles d'un même classeur"
    Par Cecinerock dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/05/2012, 15h48
  2. Comment parcourir toutes les feuilles d'un classeur excel?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2007, 20h47
  3. [VBA]activer les feuilles d'un classeur Excel
    Par jemigo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/01/2006, 17h58
  4. Action sur toutes les feuilles d'un classeur
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/12/2005, 15h11
  5. [VBA-E] Ordonner les feuilles d'un classeur
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/12/2005, 16h49

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