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 :

Insértion automatique de checkboxes - Vérifier si une cellule n'est pas liée à une checkbox avant de l'insérer


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Insértion automatique de checkboxes - Vérifier si une cellule n'est pas liée à une checkbox avant de l'insérer
    Bonjour,

    A l'aide du code suivant j'arrive à insérer automatiquement des checkboxes (O/N) dans toutes les lignes existantes de la colonne N :
    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
     
    Sub AjoutCheckBox()
    Dim cell As Range
    Dim i As Integer
    Dim j As Integer
     
    i = ActiveSheet.UsedRange.Rows.Count 'nombre de lignes existantes
     
    j = 3' ma première ligne à considérer est la 3éme
    For Each cell In Range("N" & j & ":N" & i)
        With ActiveSheet.CheckBoxes.Add(cell.Left, _
           cell.Top, cell.Width, cell.Height)
           .LinkedCell = cell.Offset(, 1)
           .Name = "CheckBox_N_" & j
           .Caption = "O/N"
        End With
        j = j + 1
    Next
    Le problème est qu'à chaque exécution, des nouvelles checkboxes s'insèrent par dessus celles créées par les exécutions précédentes. J'aimerais donc être capable d'insérer des nouvelles checkboxes seulement dans les cellules n'en contenant pas pour ne pas écraser les anciennes. Voici le scénario classique :
    1- Je crée 3 nouvelles lignes avec des données dans les autres colonnes (la colonne N est vide)
    2- J’exécute ma Macro, les 3 checkbox s'insèrent automatiquement dans les lignes 3 à 6 (vu que ma première ligne de données est la 3éme)
    3- J'insère une nouvelle ligne (manuellement, à l'aide des menus excel)
    4- Je ré-exécute ma macro => Seulement une nouvelle checkbox s’insère dans la colonne 7N.
    5- Ainsi de suite

    Merci d'avance de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Petite question...
    Combien peut-il y avoir de checkbox dans ta feuille ?

    Une solution parmi d'autres...

    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
    Sub AjoutCheckBox()
        Dim cell As Range
        Dim i As Integer
        Dim j As Integer
     
        i = 8       'ActiveSheet.UsedRange.Rows.Count 'nombre de lignes existantes
     
        j = 3 ' ma première ligne à considérer est la 3éme
        For Each cell In Range("N" & j & ":N" & i)
            If Not CheckboxExiste("CheckBox_N_" & j) Then
                With ActiveSheet.CheckBoxes.Add(cell.Left, _
                   cell.Top, cell.Width, cell.Height)
                   .LinkedCell = cell.Offset(, 1)
                   .Name = "CheckBox_N_" & j
                   .Caption = "O/N"
                End With
            End If
            j = j + 1
        Next
    End Sub
     
    Function CheckboxExiste(Nom As String) As Boolean
        On Error GoTo Erreur
        If ActiveSheet.Shapes(Nom).AlternativeText <> "" Then CheckboxExiste = True
     
    Erreur:
     
    End Function
    MPi²

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    j'ai eu la même idée que Parmi dans le cas de Shapes mais j'ai dû partir dîner …

    Nommer la case à cocher avec l'adresse de la cellule liée.
    Avant de créer une nouvelle case à cocher, vérifier l'existence via l'adresse de la cellule liée …

    Au passage, ma fonction de vérification est un poil plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function ExistShape(S) As Boolean
             On Error Resume Next
             ExistShape = IsObject(ActiveSheet.Shapes(S))
    End Function
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de vos réponses. Les deux solutions de Parmi et de Marc-L marchent parfaitement .

    Pour répondre à la question de Parmi; la feuille de calcul peut contenir autant de checkboxes que de lignes (une checkbox par ligne). Ce nombre n'est pas défini à l'avance. A chaque ajout de ligne ma macro doit s'occuper d'ajouter la checkbox ou il faut

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Marc-L, bonne idée ton IsObject

    Elmiz, le nombre pourrait influer sur le rendement du fichier.
    Si on parle de quelques dizaines de checkbox, ça peut aller, mais s'il y en a des centaines, voire des milliers, je pense que tu vas devoir revoir ton analyse... Ça risque de ramer pas mal...
    MPi²

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/11/2014, 19h39
  2. Réponses: 6
    Dernier message: 09/01/2008, 11h56
  3. Réponses: 3
    Dernier message: 06/12/2007, 11h09
  4. Réponses: 3
    Dernier message: 16/10/2007, 16h25
  5. Sélection de texte à l'intérieur d'une cellule. C'est [PAS] possible.
    Par Blackfox dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/08/2007, 14h01

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