Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 [Résolu] Macro création Boutons radio

maxx-lamenace

XLDnaute Nouveau
Bonjour à tous !

Je cherche à écrire une macro me permettant de réaliser un truc un peu complexe (je précise que je suis nul en VBA, je m'en sers que pour des choses basiques). Et là je patauge vraiment dans la semoule.
J'ai besoin de créer 3 groupes de 3 boutons chacun par ligne. Exemple :

Col.D Col.E Col.F Col.G Col.H Col.I Col.J Col.K Col.L
Button 1-Button2-Button3 [group1] ; Button4-Button5-Button6 [group2] ; Button7-Button8-Button9 [group3]

Chaque bouton doit être lié à la cellule qui le contient. Donc dans l'exemple : Bouton1 lié à D1, Bouton2 lié à E1, etc.

Le problème est que j'ai besoin de faire ça pour plus de 100 lignes...
La cerise sur le gâteau serait de pouvoir activer certains de ces boutons sous condition. Exemple :
- Boutons du groupe 2 actifs uniquement si l'un des boutons du groupe 1 est coché (peu importe lequel) ;
- Boutons du groupe 3 actifs uniquement si le bouton 6 [groupe 2] est coché.

Je ne sais même pas si ce que je cherche à faire est possible...
J'ai essayé de travailler avec ce code trouvé sur un autre forum :

Code:
Sub fill_range_with_optionbuttons5()    Dim rownr As Long, i As Integer
    Dim counter As Long
    Dim rng As Range
    Dim txt(4) As String
    Dim nm(4) As String
     'replace each occurence of 22 by 800
    Set rng = Range("E1:G20") 'changed to d22
    txt(1) = ""
    txt(2) = ""
    txt(3) = "" 'added
    txt(4) = "" 'added
    nm(1) = "RRR" 'single R or V impossible "R1" is invalid name (= cellreference)
    nm(2) = "VVV"
    nm(3) = "zzz" 'added
    nm(4) = "***" 'added
    Application.ScreenUpdating = False
    Rows("1:20").RowHeight = 18
    For rownr = 1 To 20
        counter = 0
        For i = 1 To 4 'change here
            counter = counter + 1
            Set rng = Cells(rownr, i)
            ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=False, _
            DisplayAsIcon:=False, Left:=rng.Left, Top:=rng.Top, Width:=rng.Width, Height:=rng.Height).Name = nm(i) & rownr
            With ActiveSheet.Shapes(nm(i) & rownr).OLEFormat.Object.Object
                .Caption = txt(i)


'.LinkedCell = ColLetter(i) & CStr(rownr)
                 'Cells(rownr, 3) = False
                .GroupName = "grp" & rownr
            End With
        Next i
    Next rownr
    Application.ScreenUpdating = True
End Sub

... sans succès, j'arrive pas à l'adapter à mes besoins.

Toute aide serait la bienvenue, j'ai besoin de ça pour le travail et je suis vraiment pas assez calé en programmation VBA...

Merci par avance !
 
C

Compte Supprimé 979

Guest
Salut Maxx-lamenace

Voici le code corrigé pour ce que tu veux
VB:
Sub Fill_Range_With_OptionButtons()
  Dim RowNr As Long, ColNr As Long
  Dim sName As String, Inc As Integer, Grp As Integer
  Dim Rng As Range, Shp As Shape
  '
  Application.ScreenUpdating = False
  ' Effacer les OptionButton existants
  For Each Shp In ActiveSheet.Shapes
    Shp.Delete
  Next
  ' Hauteur de ligne
  Rows("1:100").RowHeight = 18
  ' Pour 10 lignes
  For RowNr = 1 To 10
    ' Initialiser l'incrément de groupe et le numéro du groupe
    Inc = 1: Grp = 1
    ' Pour 9 colonnes
    For ColNr = 1 To 9
      ' Définir la cellule
      Set Rng = Cells(RowNr, 3 + ColNr)
      ' Nom de l'option button
      sName = "Ob" & Format(RowNr, "000") & Format(ColNr, "00")
      ActiveSheet.OLEObjects.Add(ClassType:="Forms.OptionButton.1", Link:=True, _
                                 DisplayAsIcon:=False, Left:=Rng.Left, Top:=Rng.Top, Width:=Rng.Width, Height:=Rng.Height).Name = sName
      '
      With ActiveSheet.Shapes(sName).OLEFormat.Object.Object
        .Caption = sName
        .GroupName = "grp" & Format(RowNr, "000") & Grp
      End With
      ' Lier l'option button a sa cellule
      ActiveSheet.Shapes(sName).OLEFormat.Object.LinkedCell = ActiveSheet.Name & "!" & Cells(RowNr, 3 + ColNr).Address
      Rng.Value = False
      ' Incrémenter le numéro de l'option button
      Inc = Inc + 1
      ' Vérifier l'incrément
      If Inc > 3 Then
        Grp = Grp + 1: Inc = 1
      End If
    Next ColNr
  Next RowNr
  Application.ScreenUpdating = True
End Sub

En revanche sur 100 lignes, j'ai peur que ce soit très lourd
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Maxx-lamenace, BrunoM45, grisan29,

Un autre essai avec une tentative de respecter les deux conditions désirées. J'ai pris des checkbox car j'ai repris un code ancien.
 

Pièces jointes

  • maxx-lamenace- creation CheckBox- v1.xlsm
    29.5 KB · Affichages: 51

maxx-lamenace

XLDnaute Nouveau
bonsoir Maxx-lamenace
où as tu trouvé comment écrire résoulu dans le titre comme tu l'as fait
Tu vas tout en haut, juste en dessous du nom du post, tu as un petit menu déroulant "Outils".

Bonjour Maxx-lamenace, BrunoM45, grisan29,

Un autre essai avec une tentative de respecter les deux conditions désirées. J'ai pris des checkbox car j'ai repris un code ancien.

Ton code est top mapomme, malheureusement je ne peux pas utiliser de checkbox pour ce fichier, il me faut absolument des boutons radio.
Mais je pensais à un truc : ce serait peut-être plus simple d'associer la condition au contenu de la cellule liée.

En gros, sur une ligne on a :
Bouton 1 à 9 liés à A1 --> I1
Donc si :
- C1 = "FAUX", boutons 4 à 9 désactivés. Si "VRAI", ils sont activés.
- F1 = "FAUX", boutons 7 à 9 désactivés. Si "VRAI", ils sont activés.

Donc en gros pour que les boutons 7 à 9 soient activés, il faut à la fois que C1 = "VRAI" et F1 = "VRAI".
Pour les boutons 4 à 6, il suffit que C1 = "VRAI".

Et dans une macro de créer une boucle pour chaque ligne en suivant l'incrément de la macro de Bruno :
Ligne 1 = Ob00101 (bouton 1 ligne 1), Ob00102, .... Ob00109 // cellules liées : A1 --> I1
Ligne 2 = Ob00201, ... Ob00209 // cellules liées : A2 --> I2
Etc.

Mais bien sûr je suis incapable d'écrire ça en VBA (j'essaye d'apprendre en ce moment, mais j'en suis qu'aux bases pour l'instant !)

En tout cas merci pour votre aide à tous
 

Si...

XLDnaute Barbatruc
Salut

Faut-il vraiment tous ces boutons ?

Voici 2 exemples sans , mais, avec la possibilité de n’avoir pas d’option sélectionnée.

Nota : les lignes seront créées au fur et à mesure des besoins !
 

Pièces jointes

  • Faux boutons d\'option groupés V1.xlsm
    51.9 KB · Affichages: 52
  • Faux boutons d\'option groupés V2.xlsm
    48.9 KB · Affichages: 46

maxx-lamenace

XLDnaute Nouveau
Salut

Faut-il vraiment tous ces boutons ?

Voici 2 exemples sans , mais, avec la possibilité de n’avoir pas d’option sélectionnée.

Nota : les lignes seront créées au fur et à mesure des besoins !

Salut, tes fichiers sont super.
Non pas d'obligation que ce soit des boutons, j'y suis même très réticent vu le nombre de lignes mais parfois les gens qui demandent le fichier n'ont pas la question de la performance en tête

A tout hasard, sur ton fichier, est-il possible d'insérer une colonne vide entre les tableaux ç2 et ç3 ?
Si je le fais sans toucher au code, de manière prévisible, ça rajoute automatiquement un bouton dans cette colonne.

Merci encore
 

Si...

XLDnaute Barbatruc
Re

J’ai fait cela assez rapidement. D’ailleurs en donnant plusieurs fichiers j’ai oublié d’enlever des lignes inutiles. On pourrait continuer à utiliser les tableaux pour éviter des adresses fixes.

Pour le fichier V2 voilà une image afin de préciser les données fixes de la macro.

 

Discussions similaires

Réponses
4
Affichages
451
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…