Petite Modif d'une macro

0

Bonsoir,

Actuellement je sélectionne n'importe qu'elle cellule dans ma page excel, puis je fais insertion case à cocher et j'obtiens une case à cocher, mais pour éviter de placer des cases à cocher n'importe où par mauvaise manipulation, j'aimerais pouvoir me limiter à une colonne C2:C100 par exemple alors si quelqu'un pouvait me modifier mon code vba ça serait le top!

Voir lien

Merci de vous lire

Cordialement


    tontonbox Posté le 1 décembre 2022, 22:23
    par tontonbox
    Répondre
    0

    Bonjour tontonbox,

    je vais te donner 3 réponses différentes, avec 1 fichier Excel
    pour chaque réponse ; voici déjà la 1ère réponse.  :)

    https://www.cjoint.com/c/LLcaIrcYSr0

    * la cellule active est G6 ; clic / bouton bleu ; ça ne fait rien du tout, et c'est normal.

    * sélectionne E5:G8 ; clic / bouton bleu ; rien : ok ; c'est car tu as fait une sélection de
    plus d'une colonne.

    * sélectionne J2:J8 ; clic / bouton bleu ; rien : ok ; ta sélection est bien d'une seule
    colonne, mais cette colonne doit être la colonne C.

    * sélectionne C11:C16 ; clic / bouton bleu ; rien : ok ; ta sélection est bien d'une
    seule colonne, c'est en colonne C, mais ta sélection est de plus de 5 cellules.

    * sans changer la sélection actuelle, fais Maj ↑ ➯ la sélection devient C11:C15 ;
    clic / bouton bleu ➯ ça met 5 cases à cocher.

    * sélectionne C18 ; clic / bouton bleu ➯ ça met 1 case à cocher.

    * sélectionne C21:C22 ; clic / bouton bleu ➯ ça met 2 cases à cocher.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * pour chacune des cases à cocher que tu viens d'insérer, tu peux bien sûr
    cliquer dessus pour alternativement cocher ou décocher ; la couleur de
    remplissage est celle attendue : en vert ou en rouge.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    * un clic / bouton bleu ne fait rien non plus si la sélection commence en C1 ;
    c'est normal, car une case à cocher ne doit pas être mise en C1, pour ne
    pas écraser l'en-tête "PRESENT".

    * rien non plus s'il n'y a pas de sélection de plusieurs cellules, et que la
    cellule active est C1 ; même raison qu'au point ci-dessus.

    -------------------------------------------------------------------------------------------------------------------

    code VBA de Module1 (dont 1ère sub optimisée) :

    Option Explicit

    Sub CheckBox2_Click()
      Dim r As Byte, g As Byte: r = 255: g = 0
      With ActiveSheet.Shapes(Application.Caller)
        If .ControlFormat.Value = 1 Then r = 0: g = 255
        .Fill.ForeColor.RGB = RGB(r, g, 0): .Fill.Visible = -1
      End With
    End Sub

    Sub AjoutCaseàcocher2()
      Dim ChkBx As CheckBox, rngCel As Range: Application.ScreenUpdating = 0
      With Selection
        If .Columns.Count > 1 Then Exit Sub 'sortie si sélection de plus d'une colonne
        If .Column <> 3 Then Exit Sub 'sortie si colonne de la sélection autre que C
        If .Row = 1 Then Exit Sub 'sortie si 1ère ligne de la sélection = ligne 1
        'à ce stade : la sélection est d'une seule colonne ; c'est la colonne C ;
        'la 1ère ligne de la sélection est > 1 => 1ère ligne minimum : ligne 2 ;
        'pour limiter à 5 le nombre de lignes de la sélection :
        If .Rows.Count > 5 Then Exit Sub
        'on peut donc ajouter d'un coup de une à 5 cases à cocher, en colonne C,
        'avec une 1ère ligne autre que ligne 1.
      End With
      For Each rngCel In Selection
        With rngCel.MergeArea.Cells
          If .Resize(1, 1).Address = rngCel.Address Then
            .NumberFormat = ";;;"
            Set ChkBx = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
            With ChkBx
              .Characters.Text = "Cochez si présent": .Value = 0: .OnAction = "CheckBox2_Click"
              With .Border
                .ColorIndex = 24: .Weight = 1: .LineStyle = xlLineStyleNone
              End With
            End With
          End If
        End With
      Next rngCel
    End Sub

    dans la 2ème sub, j'ai mis plusieurs commentaires ; lis-les attentivement ;
    regarde cette instruction : If .Rows.Count > 5 Then Exit Sub ; c'est elle
    qui détermine que la sélection ne doit pas être de plus de 5 cellules ;
    en fait je voulais mettre 10 ; j'ai mis 5 pour faciliter la démo ; à toi de
    mettre la valeur que tu veux ; si tu mets 20, tu pourras insérer d'un
    seul coup jusqu'à 20 cases à cocher maximum.

    rhodo

    rhodo Posté le 2 décembre 2022, 02:20
    par rhodo
    0

    @tontonbox

    voici la 2ème réponse ; fichier n° 2 : https://www.cjoint.com/c/LLcbv1NQWI0

    c'est une façon d'alléger grandement la présentation : inutile de répéter sur
    chaque ligne le texte "Cochez si présent" ; il suffit de mettre l'en-tête de C1.

    pour l'utilisation : les manips sont les mêmes que pour le 1er fichier ;
    relire éventuellement le post précédent.

    bien sûr, j'ai un peu modifié une instruction de la 2ème sub :

    Set ChkBx = ActiveSheet.CheckBoxes.Add(.Left + 34, .Top, 15, .Height)

    à part cette instruction, tout le reste du code VBA est identique
    au code VBA du fichier précédent.

    rhodo

    rhodo Posté le 2 décembre 2022, 02:45
    par rhodo
    0

    @tontonbox

    voici la 3ème réponse ; fichier n° 3 : https://www.cjoint.com/c/LLcbWt7DL80

    * ne cherche pas de code VBA : il n'y en n'a plus, et c'est normal vu que
    c'est un fichier .xlsx, pas .xlsm !  :)

    * tes cases à cocher des fichiers précédents, c'est bien joli, mais ça devient
    lourd quand il y en a plusieurs ! ça allège grandement si au lieu de cases à
    cocher, tu mets dans une cellule simplement un x (lettre X minuscule).

    * note que par défaut (sauf l'en-tête) : la cellule est vide en colonne C, et elle est
    sur fond rouge ➯ absence de la personne.

    * mets un x (lettre X minuscule) dans une des cellules de C2:C8 ➯ un x est présent
    (c'est coché) et le fond de la cellule devient vert (grâce à une MFC) ; rappel :
    MFC = Mise en Forme Conditionnelle.

    * le x est en gras et en blanc ; ça se voit mieux, car y'a un meilleur contraste que
    du texte noir sur fond vert.

    * pour chaque ligne ajoutée au tableau structuré, la cellule de la colonne C est
    automatiquement sur fond rouge.

    * 100 cellules avec un x prennent évidemment moins de place que 100 cellules
    ayant chacune une case à cocher ! c'est dans ce sens où je dis que ça fait
    moins lourd, et la taille du fichier est moindre ; plus il y a de lignes et plus
    la différence est importante ; imagine un tableau de 1 000 personnes ! alors
    s'il y avait 1 000 cases à cocher !  ;)

    * perso, j'utilise des cases à cocher s'il y en a une dizaine, ou peut-être 20
    au maximum, pas plus ; par exemple pour un UserForm qui simulerait un
    formulaire administratif ; de plus, ces cases à cocher seraient pour choisir
    des options de nature différente : si c'est des cases à cocher de la même
    nature, faire avec des x comme dans le présent fichier.

    * bien sûr, comme c'est toi l'utilisateur final, c'est toi qui choisit en dernier
    recours : si vraiment tu préfères tes multiples cases à cocher, même si
    ça prend plus de place, alors ok.  ;)

    rhodo

    rhodo Posté le 2 décembre 2022, 03:17
    par rhodo
    0

    Bonjour

    Ben!! Bravo Rhodo que dire de plus, je suis ébahi par tes propositions, en fait toutes celles proposées sons intéressantes, (elles ont été toutes mis au chaud pour de futurs usages)mais dans l'immédiat après multes essais de tes trois propositions la version 2 me convient le mieux, c'est sûr qu'une MFC est moins gourmande que les cases à cocher, mais dans mon fichier actuel, je préfère les cases à cocher, déjà d'une... c'est plus joli à la vue et d'autre, que ce n'est pas un gros fichier ça me va très bien ainsi. Merci, merci, encore pour ton implication et surtout pour tes performances en Excel que beaucoup de personnes aimeraient posséder entre autre moi 

    Au plaisir

    Cordialement

    tontonbox


    tontonbox Posté le 2 décembre 2022, 14:37
    par tontonbox

    Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
    Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :