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 :

Copier cellule avec fonction si feuille existe


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 Copier cellule avec fonction si feuille existe
    Bonsoir à Tous,

    Je suis entrain de créer un macro qui doit me copier d'un feuille vers une autre si cette feuille nommée Gr.XX existe et je bloque... Si quelqu'un peut m'aider sur le sujet. Et si quelqu'un a une idée pour simplifier mon code, je suis preneur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function FeuilleExiste(stFeuille) As Boolean
     On Error Resume Next
     FeuilleExiste = Not (stFeuille Is Nothing)
    End Function
    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
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    Sub CopierNomséquipesdansGroupes()
     
    Dim MaFeuille As Worksheet
    For Each MaFeuille In Worksheets
    MaFeuille.Unprotect Password:="50points"
    Next
     
    'Copie des équipes du groupe A
     
        If FeuilleExiste("Gr.A") Then
        Plage = Sheets("Tirage Groupes").Range("F4", Sheets("Tirage Groupes").Range("F4").End(xlDown))
        Sheets("Gr.A").Select
        Range("C4").Select
        For Each Cellule In Plage
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe B
     
        If FeuilleExiste("Gr.B") Then
        Plage1 = Sheets("Tirage Groupes").Range("H4", Sheets("Tirage Groupes").Range("H4").End(xlDown))
        Sheets("Gr.B").Select
        Range("C4").Select
        For Each Cellule In Plage1
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe C
        Plage2 = Sheets("Tirage Groupes").Range("J4", Sheets("Tirage Groupes").Range("J4").End(xlDown))
        If FeuilleExiste("Gr.C") Then
        Sheets("Gr.C").Select
        Range("C4").Select
        For Each Cellule In Plage2
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe D
        Plage3 = Sheets("Tirage Groupes").Range("L4", Sheets("Tirage Groupes").Range("L4").End(xlDown))
        If FeuilleExiste("Gr.D") Then
        Sheets("Gr.D").Select
        Range("C4").Select
        For Each Cellule In Plage3
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe E
        Plage4 = Sheets("Tirage Groupes").Range("N4", Sheets("Tirage Groupes").Range("N4").End(xlDown))
        If FeuilleExiste("Gr.E") Then
        Sheets("Gr.E").Select
        Range("C4").Select
        For Each Cellule In Plage4
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe F
        Plage5 = Sheets("Tirage Groupes").Range("P4", Sheets("Tirage Groupes").Range("P4").End(xlDown))
        If FeuilleExiste("Gr.F") Then
        Sheets("Gr.F").Select
        Range("C4").Select
        For Each Cellule In Plage5
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe G
        Plage6 = Sheets("Tirage Groupes").Range("R4", Sheets("Tirage Groupes").Range("R4").End(xlDown))
        If FeuilleExiste("Gr.G") Then
        Sheets("Gr.G").Select
        Range("C4").Select
        For Each Cellule In Plage6
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe H
        Plage7 = Sheets("Tirage Groupes").Range("T4", Sheets("Tirage Groupes").Range("T4").End(xlDown))
        If FeuilleExiste("Gr.H") Then
        Sheets("Gr.H").Select
        Range("C4").Select
        For Each Cellule In Plage7
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe I
        Plage8 = Sheets("Tirage Groupes").Range("V4", Sheets("Tirage Groupes").Range("V4").End(xlDown))
        If FeuilleExiste("Gr.I") Then
        Sheets("Gr.I").Select
        Range("C4").Select
        For Each Cellule In Plage8
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe J
        Plage9 = Sheets("Tirage Groupes").Range("X4", Sheets("Tirage Groupes").Range("X4").End(xlDown))
        If FeuilleExiste("Gr.J") Then
        Sheets("Gr.J").Select
        Range("C4").Select
        For Each Cellule In Plage9
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe K
        Plage10 = Sheets("Tirage Groupes").Range("Z4", Sheets("Tirage Groupes").Range("Z4").End(xlDown))
        If FeuilleExiste("Gr.K") Then
        Sheets("Gr.K").Select
        Range("C4").Select
        For Each Cellule In Plage10
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
     
    'Copie des équipes du groupe L
        Plage11 = Sheets("Tirage Groupes").Range("AB4", Sheets("Tirage Groupes").Range("AB4").End(xlDown))
        If FeuilleExiste("Gr.L") Then
        Sheets("Gr.L").Select
        Range("C4").Select
        For Each Cellule In Plage11
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe M
        Plage12 = Sheets("Tirage Groupes").Range("AD4", Sheets("Tirage Groupes").Range("AD4").End(xlDown))
        If FeuilleExiste("Gr.M") Then
        Sheets("Gr.M").Select
        Range("C4").Select
        For Each Cellule In Plage12
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
    'Copie des équipes du groupe N
        Plage13 = Sheets("Tirage Groupes").Range("AF4", Sheets("Tirage Groupes").Range("AF4").End(xlDown))
        If FeuilleExiste("Gr.N") Then
        Sheets("Gr.N").Select
        Range("C4").Select
        For Each Cellule In Plage13
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
        Else
        Exit Sub
      End If
     
     
    For Each MaFeuille In Worksheets
    MaFeuille.Protect Password:="50points"
    Next
     
    End Sub
    Merci d'avance

  2. #2
    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
    Bonjour,
    Je viens de trouver une solution pour le premier problème. En fait j'ai divisé en 2 macros :
    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
    Sub CopierGrA()
     
    Dim MaFeuille As Worksheet
    For Each MaFeuille In Worksheets
    MaFeuille.Unprotect Password:="50points"
    Next
     
    'Copie des équipes du groupe A
        Plage = Sheets("Tirage Groupes").Range("F4", Sheets("Tirage Groupes").Range("F4").End(xlDown))
        Sheets("Gr.A").Select
        Range("C4").Select
        For Each Cellule In Plage
            ActiveCell = Cellule
            ActiveCell.Offset(1, 0).Select
        Next
     
    End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CopierNomsequipes()
    If Feuille_Existe("Gr.A") Then
    Call CopierGrA
    Else: Exit Sub
    End If
    End Sub
    Par contre, si quelqu'un sait comment simplifier mon code, je suis toujours preneur...

    Merci d'avance

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Es-tu certain que la fonction qui contrôle l'existence d'une feuille fonctionne ?
    Personnellement j'ai des doutes.
    Voir dans cette discussion une procédure qui teste l'existence de la feuille.
    Une remarque sur ton code.
    Tu utilises Activate, Select et Selection ce qui est parfaitement inutile et ralenti la procédure.
    Tu sembles vouloir copier la plage d'une feuille vers une autre à partir d'une cellule. Après avoir défini, feuilles et plages, l'instruction tient en une ligne.
    Voici un petit exemple de la copie de la plage A20:A34 de la feuille [Fiche-B] vers la feuille [Export] à partir de la cellule A23
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim maPlage As Range, shtExport As Worksheet
     Set maPlage = ThisWorkbook.Worksheets("Fiche-B").Range("A20:A34")
     Set shtExport = ThisWorkbook.Worksheets("Export")
     maPlage.Copy shtExport.Cells(23, 1)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    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
    Bonjour Philippe,

    Effectivement le code du contrôle d'existence de feuille n'était pas bon...
    Voici celui que j'utilisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Feuille_Existe(ByVal Nom_Feuille As String) As Boolean
    Dim Feuille As Excel.Worksheet
      On Error GoTo Feuille_Absente_Error
        Set Feuille = ActiveWorkbook.Worksheets(Nom_Feuille)
      On Error GoTo 0
      Feuille_Existe = True
    Exit Function
     
    Feuille_Absente_Error:
      Feuille_Existe = False
    End Function
    Merci pour tes réponses, je vais essayer de simplifier avec ton code et te tiens au courant.

    Philippe,

    J'ai donc testé ton code et il ne fonctionne pas car je pense que les cellules de destination sont fusionnées.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Proscrire la fusion des cellules dans une table de données. Cela perturbe entre autres les tris, les filtres etc...
    Ma procédure comme toutes celles que je dépose ici a été testée et fonctionne.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Valeur cellule avec fonction =SI
    Par teddy72000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2011, 20h51
  2. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  3. Pb pour copier cellules avec fonctions
    Par chisutufu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/09/2009, 11h40
  4. VBA - Copier cellules avec formules
    Par Alecine dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2008, 14h41
  5. Copie de Feuille_Renommer avec "bis" si feuille existe déjà
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/01/2008, 11h57

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