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 :

VBA copier/coller optionbutton / erreur de compilation


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut VBA copier/coller optionbutton / erreur de compilation
    Bonjour,

    je bloque sur une macro et je ne trouve pas de réponse sur les différents forum
    je souhaite coder une macro qui me colle des optionbutton sur une ligne en fonction du remplissage de la première cellule de la ligne
    pour le moment, j'ai codé le fait de copier/coller des optionbutton

    lorsque je lance ma macro une fois, pas de problème
    par contre, lorsque je relance ma macro, j'ai le message d'erreur suivant que je ne comprend pas :

    "Erreur de compilation!
    Bibliothèque d'objet incorrecte ou contenant des références à des définitions d'objets introuvables"


    d'avance merci pour votre aide


    ci dessous mon 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
    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
    Public j As Long
     
    Public Sub ajout_OptionButton()
     
    Static i As Integer
    'Static j As Integer
    Static k As Integer
    'For j = 4 To 5          'ligne 4 et 5
    'j = 4
    For i = 1 To 2          'optionbutton1 et optionbutton2
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 3).Select 'i + 3 car optionbutton1 en colonne 4, optionbutton en colone 5
    '    ActiveSheet.Paste
    '    Set shp = ActiveSheet.Shapes(Selection.Name)
        Sheets("test").Paste
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "pre_" & k + 1
            .Name = "pre_" & k + 1
            .Object.GroupName = "pre_" & k + 1
        End With
     
    Next
    For i = 3 To 4
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 3).Select
        'ActiveSheet.Paste
        'Set shp = ActiveSheet.Shapes(Selection.Name)
        Sheets("test").Paste
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "lis_" & k + 1
            .Name = "lis_" & k + 1
            .Object.GroupName = "lis_" & k + 1
        End With
    Next
     
    For i = 5 To 6
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 4).Select
    '    ActiveSheet.Paste
    '    Set shp = ActiveSheet.Shapes(Selection.Name)
        Sheets("test").Paste
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "pat_" & k + 1
            .Name = "pat_" & k + 1
            .Object.GroupName = "pat_" & k + 1
        End With
    Next
     
    For i = 7 To 8
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 5).Select
        'ActiveSheet.Paste
        Sheets("test").Paste
        'Set shp = ActiveSheet.Shapes(Selection.Name)
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "tem_" & k + 1
            .Name = "tem_" & k + 1
            .Object.GroupName = "tem_" & k + 1
        End With
    Next
     
    For i = 9 To 10
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 6).Select
        Sheets("test").Paste
        'ActiveSheet.Paste
        'Set shp = ActiveSheet.Shapes(Selection.Name)
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "med_" & k + 1
            .Name = "med_" & k + 1
            .Object.GroupName = "med_" & k + 1
        End With
    Next
     
    For i = 11 To 12
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 6).Select
        'ActiveSheet.Paste
        Sheets("test").Paste
        'Set shp = ActiveSheet.Shapes(Selection.Name)
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "con_" & k + 1
            .Name = "con_" & k + 1
            .Object.GroupName = "con_" & k + 1
        End With
    Next
     
    For i = 13 To 15
    'ActiveSheet.Shapes("OptionButton" & i).Select
    Sheets("test").Shapes("OptionButton" & i).Select
        Selection.Copy
        Cells(j + 4, i + 6).Select
        'ActiveSheet.Paste
        Sheets("test").Paste
    '    Set shp = ActiveSheet.Shapes(Selection.Name)
        Set shp = Sheets("test").Shapes(Selection.Name)
        With shp.OLEFormat.Object
            .Object.Caption = "cor_" & k + 1
            .Name = "cor_" & k + 1
            .Object.GroupName = "cor_" & k + 1
        End With
    Next
     
    k = j - 3   'à la première boucle k = 1
    'MsgBox j
    'MsgBox k
    'Next
    j = j + 1
    MsgBox j
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est parce que vous créez des objets qui portent le même nom. Il faut incrémenter K.

    Le code suivant crée autant d'options boutons que vous souhaitez :

    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
    Sub Ajout_OptionButton_Test()
     
    Dim j As Integer
     
    Static I As Integer
    Static K As Integer
     
    Dim Shp As Object
     
        MsgBox Sheets("test").Shapes.Count
     
        K = Sheets("test").Shapes.Count + 1
        For I = 1 To 2          'optionbutton1 et optionbutton2
            With Sheets("test")
                  .Shapes("OptionButton" & I).Select
                  Selection.Copy
                  .Cells(j + 4, I + 3).Select 'i + 3 car optionbutton1 en colonne 4, optionbutton en colone 5
                  .Paste
                  Set Shp = .Shapes(Selection.Name)
                  With Shp.OLEFormat.Object
                       .Object.Caption = "pre_" & K + 1
                       .Name = "pre_" & K + 1
                       .Object.GroupName = "pre_" & K + 1
                  End With
                  K = K + 1
                  Set Shp = Nothing
            End With
        Next
     
    End Sub
    Cordialement.

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    Bonjour Eric

    merci pour votre réponse

    effectivement, je renommais mes objets alors que c'était inutile pour ce que je souhaite
    tout ce que je veux c'est renommer les groupname pour que les optionbutton collés ne soient pas liés aux optionbutton copiés

    malgré cela le code n'effectue pas encore ce que je souhaite
    tout se passe comme si les valeurs de j et k que je souhaite incrémenter de 1 à chaque appel de la procédure étaient ré-initialisées à 0 et ce malgré les avoir déclarées en static

    je vous joins le fichier test sur lequel j'ai essayé de mettre des explications sur ce que je souhaite (module 2 et onglet test)

    d'avance merci pour votre aide

    Jérôme

    essai.xlsm

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Essayez avec ce code modifié
    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
    Sub Ajout_OptionButton_Test()
    Dim i As Integer
    Dim Shp As Object
    Dim Lig&
    '---
    Application.ScreenUpdating = False
     
    With Sheets("test")
     
      '################################################################
      '### On recherche la dernière cellule renseignée en colonne D
      '### et on ajoute 1 pour obtenir la ligne libre suivante.
      '### J'ai arbitrairement renseigné la cellule avec un *
      '### mais on peut mettre un espace ou un caractère blanc Chr(160)
      '### pour éviter que cela soit visible à l'utilisateur.
      .Range("D3") = "*"
      Lig& = .[d65536].End(xlUp).Row + 1
      .Range("d" & Lig& & "") = "*"
      '################################################################
     
      For i = 1 To 2          'optionbutton1 et optionbutton2
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 3).Select 'i + 3 car optionbutton1 en colonne 4, optionbutton en colone 5
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "pre_" & Lig&
        Set Shp = Nothing
      Next
     
      For i = 3 To 4
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 3).Select
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "lis_" & Lig&
        Set Shp = Nothing
      Next
     
      For i = 5 To 6
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 4).Select
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "pat_" & Lig&
        Set Shp = Nothing
      Next
     
      For i = 7 To 8
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 5).Select
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "tem_" & Lig&
        Set Shp = Nothing
      Next
     
      For i = 9 To 10
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 6).Select
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "med_" & Lig&
        Set Shp = Nothing
      Next
     
      For i = 11 To 12
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 6).Select
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "con_" & Lig&
        Set Shp = Nothing
      Next
     
      For i = 13 To 15
        .Shapes("OptionButton" & i).Copy
        .Cells(Lig&, i + 6).Select
        .Paste
        Set Shp = .Shapes(Selection.Name)
        Shp.OLEFormat.Object.Object.GroupName = "cor_" & Lig&
        Set Shp = Nothing
      Next
     
      .Cells(Lig&, 1).Select
     
    End With
     
    Application.ScreenUpdating = True
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une autre solution possible dans le fichier joint.

    Question :

    Comment allez-vous exploiter cette feuille ? Cela va être très difficile et les temps de réponse vont devenir très longs.

    N'auriez-vous pas intérêt à utiliser un onglet selon le modèle "Solution EK" ?
    Dans cet onglet, chaque cellule, pour les colonnes correspondant à vos groupes, est une liste de validation "Oui", "Non" ou "Na" pour la colonne "Mis en conformité". Vous pourrez utiliser les filtres et exploiter correctement votre tableau.

    Cordialement.

Discussions similaires

  1. Débutant en VBA - Copier coller selon conditions
    Par anthony787 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2010, 16h29
  2. [XL-2003] Bug VBA Copier/coller
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/04/2010, 13h13
  3. [XL-2007] VBA copier/coller image
    Par kaena dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/04/2009, 11h38
  4. code VBA copier coller
    Par AVNAIM dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 01/06/2008, 12h22

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