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 :

Fonctions If imbriquées [XL-2007]


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
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Par défaut Fonctions If imbriquées
    Bonjour à Tous,

    Je cherche à imbriquer des fonction If mais je n'arrive pas au résultat désiré. C'est pour cela que je viens vers vous pour m'éclaircir sur le sujet.

    En fait je possède un classeur qui se compose de la manière suivante :
    * 1 feuille "Tirage Groupes" avec en cellule C2 le nombre de groupes et en D2 le nombre d'équipe par groupe
    * des feuilles "modèles" : Gr.de 4, Gr.de 5, Gr.de 6,.... Gr.de 12.

    Je souhaiterais qu'en fonction de la valeur en D2 il me crée le nb de groupes inscrit en C2. C'est à dire : Si D2=4 (équipes/groupe) et C2=10 (groupes), la macro copie 10 fois la feuille modèle Gr.de 4.

    Je possède ce bout de macro qui me crée bien le nb de feuilles désirées et qui me les renomme.
    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
    Sub CreationPage()
     
        Dim Fe As Worksheet
        Dim Cel As Range
        Dim I As Integer
     
        'fige l'écran
        Application.ScreenUpdating = False
     
        'ajoute le nombre de feuilles désirées
        For I = 1 To Worksheets("Tirage Groupes").[C2]
     
            Worksheets("Gr.de 9").Copy , Sheets(Sheets.Count)
     
            Set Fe = ActiveSheet
     
            With Fe
     
                .Name = "Gr." & Chr(64 + I) 'nomme la feuille
     
                .Range("A1") = "Groupe " & Chr(64 + I) 'titre
     
                'évite la 1ère feuille afin de laisser les lettres A
                If I > 1 Then
     
                    'boucle sur les cellules contenant des valeurs constantes
                    For Each Cel In .Cells.SpecialCells(2)
     
                        'contrôle que la valeur après la lettre est une valeur numérique
                        'afin de ne pas modifier les mots comme "TOTAL"
                        If IsNumeric(Mid(Cel.Value, 2, 1)) Then
     
                            Cel.Value = Replace(Cel.Value, "A", Chr(64 + I), , , 0)
     
                        End If
     
                    Next Cel
     
                End If
     
            End With
     
        Next I
     
        'rafraîchi
        Application.ScreenUpdating = True
     
    End Sub
    Voilà où j'en suis
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    Sub CreationPage()
     
        Dim Fe1 As Worksheet
        Dim Fe2 As Worksheet
        Dim Fe3 As Worksheet
        Dim Cel As Range
        Dim I As Integer
     
     
        'ajoute le nombre de feuilles désirées
         'fige l'écran
        Application.ScreenUpdating = False
     
            If [D2].Value = 4 Then
            Worksheets("Gr.de 4").Copy , Sheets(Sheets.Count)
        For I = 1 To Worksheets("Tirage Groupes").[C2]
        Set Fe1 = ActiveSheet
     
            With Fe1
     
                .Name = "Gr." & Chr(64 + I) 'nomme la feuille
     
                .Range("A1") = "Groupe " & Chr(64 + I) 'titre
     
                'évite la 1ère feuille afin de laisser les lettres A
                If I > 1 Then
     
                    'boucle sur les cellules contenant des valeurs constantes
                    For Each Cel In .Cells.SpecialCells(2)
     
                        'contrôle que la valeur après la lettre est une valeur numérique
                        'afin de ne pas modifier les mots comme "TOTAL"
                        If IsNumeric(Mid(Cel.Value, 2, 1)) Then
     
                            Cel.Value = Replace(Cel.Value, "A", Chr(64 + I), , , 0)
     
                        End If
     
                    Next Cel
     
                End If
     
            End With
     
        Next I
     
        'rafraîchi
        Application.ScreenUpdating = True
     
    Elself: [D2].Value = 5
            Worksheets("Gr.de 5").Copy , Sheets(Sheets.Count)
       For I = 1 To Worksheets("Tirage Groupes").[C2]
       Set Fe2 = ActiveSheet
     
            With Fe2
     
                .Name = "Gr." & Chr(64 + I) 'nomme la feuille
     
                .Range("A1") = "Groupe " & Chr(64 + I) 'titre
     
                'évite la 1ère feuille afin de laisser les lettres A
                If I > 1 Then
     
                    'boucle sur les cellules contenant des valeurs constantes
                    For Each Cel In .Cells.SpecialCells(2)
     
                        'contrôle que la valeur après la lettre est une valeur numérique
                        'afin de ne pas modifier les mots comme "TOTAL"
                        If IsNumeric(Mid(Cel.Value, 2, 1)) Then
     
                            Cel.Value = Replace(Cel.Value, "A", Chr(64 + I), , , 0)
     
                        End If
     
                    Next Cel
     
                End If
     
            End With
     
        Next I
     
        'rafraîchi
        Application.ScreenUpdating = True
     
            Else: [D2].Value = 9
            Worksheets("Gr.de 9").Copy , Sheets(Sheets.Count)
            End If
        For I = 1 To Worksheets("Tirage Groupes").[C2]
            Set Fe3 = ActiveSheet
     
            With Fe3
     
                .Name = "Gr." & Chr(64 + I) 'nomme la feuille
     
                .Range("A1") = "Groupe " & Chr(64 + I) 'titre
     
                'évite la 1ère feuille afin de laisser les lettres A
                If I > 1 Then
     
                    'boucle sur les cellules contenant des valeurs constantes
                    For Each Cel In .Cells.SpecialCells(2)
     
                        'contrôle que la valeur après la lettre est une valeur numérique
                        'afin de ne pas modifier les mots comme "TOTAL"
                        If IsNumeric(Mid(Cel.Value, 2, 1)) Then
     
                            Cel.Value = Replace(Cel.Value, "A", Chr(64 + I), , , 0)
     
                        End If
     
                    Next Cel
     
                End If
     
            End With
     
        Next I
     
        'rafraîchi
        Application.ScreenUpdating = True
     
    End Sub
    Comme vous pouvez le voir, je ne sais vraiment comment imbriquer les If "Condition1" Then "instructions" Elself "Condition2" Then "instruction 2"...

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    Voici une façon d'imbriquer des If :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If monBooleén and maVariable = 2 then 'If avec Else
         If Test1 = true then MsgBox "C'est Vrai!" ' If sans Else, contenant une seule instruction donc pouvant se mettre sur une seule ligne sans End If
    else
         if montest = false then 'If sans Else mais avec plusieurs instructions
              MsgBox"C'est faux!!!"
              compteur = compteur + 1
         endif
    endif

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 43
    Par défaut
    Voilà ça y est, j'ai réussi. Effectivement mes If... Then sur la même ligne foutait un peu le bordel avec mes End If.

    Merci Supierre tout de même.

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

Discussions similaires

  1. Fonction ifelse "imbriqué"
    Par marpanh dans le forum R
    Réponses: 6
    Dernier message: 04/02/2011, 11h54
  2. [AC-2007] Fonction vraifaux() imbriqué
    Par Nounours1 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/07/2010, 19h46
  3. [AJAX] Fonctions ajax imbriquées
    Par dubitoph dans le forum AJAX
    Réponses: 1
    Dernier message: 15/10/2009, 15h21
  4. fonction Si imbriqué
    Par mimicrocro dans le forum Excel
    Réponses: 7
    Dernier message: 12/06/2007, 09h59
  5. Fonctions inline imbriquées
    Par pelotudo dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/03/2007, 21h16

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