macro pour création case à cocher

letroubadour

XLDnaute Occasionnel
bonjour à tous

je cherche à créer une macro pour afficher une case à cocher en fonction d'un critère
dans l'onglet "01" si AG =1, alors création de la case à cocher sous "soir" dans la colonne M, la cellule liée est en AE et suppression de la case à cocher lors de l'appui du bouton "effacer"
cette macro doit se réaliser sur les 12 onglet, "01, 02, ........., 12"

merci

RAPHAEL
 

Pièces jointes

  • dep 2019.xls
    2.2 MB · Affichages: 34

vgendron

XLDnaute Barbatruc
Bonjour
avec tout le code que tu as déjà écrit, tu devrais quand meme etre capable de modifier toi meme et d'ajouter LA ligne qui va bien
pour déplacer à droite.. suffit d'utiliser la bonne mise en forme de la colonne : Aligné à droite
et où sont passées les cases de la colonne G ?
 

Pièces jointes

  • dep 2019 (1).xls
    1.6 MB · Affichages: 13

letroubadour

XLDnaute Occasionnel
bonjour

merci pour ta réponse mais je n'y connais rien en macro
et où sont passées les cases de la colonne G ?
elles ont disparu dans le poste 10 mais ça n'a pas d'importance

il y a quelque chose qui ne va pas, si j'appuie en M8 tout disparait en M8

et je voudrais également que lorsque j'appuie sur le bouton effacer, que les cases en M disparaissent également

merci
 

Pièces jointes

  • frais dep 2019.xls
    1.6 MB · Affichages: 14

vgendron

XLDnaute Barbatruc
Bonjour

il faut etre patient...

1) si je comprend bien, tu n'es pas à l'origine de toutes les macros ==> ca aurait été bien de le préciser dès le départ, ca nous évite de te proposer des choses en pensant que tu les comprends direct: ca nous force aussi à expliquer notre code.
2) il faut que tu comprennes ce qui suit:
les Options Bouttons que ton code place sur Non adm/adm et les tarifs de nuitée; sont des "controles" que tu peux placer n'importe où sur la feuille
et, dans ton cas, leur nom commence toujours par "b" ==> plus facile pour les retrouver et les supprimer (voir ta macro effacerbox)

le controle case a cocher existe également, mais comme dit dans les premiers posts, ca va te faire un fichier excel très lourd

donc au lieu de mettre des controles, j'ai remplacé par un caractère windings dans la cellule souhaitée (comme ce sont de simples caractères, on ne peut les mettre que dans les cellules)
à chaque fois que tu cliques sur une case (en fait, tu cliques juste sur une cellule dont le contenu est un "caractère case") une macro évènementielle est déclenchée
et selon le contenu et la cellule selectionnée, elle remplace le caractère "case" par "case cochée" et vice versa,
elle met aussi VRAI ou FAUX en colonne AE
ou elle efface tout


3) les évènements sont codés directement dans la feuille concernée
feuille_Change
Feuill_SelectionChange
Feuille_activate......

donc, comme tu as 12 feuilles de mois, il faut que le meme code soit écrit dans TOUTES les feuilles

l'évènement appelle à son tour une macro (PutCaseàCocher)
cette macro est elle écrite dans un module standard

4) dans le fichier ci joint:
les "cases à cocher" sont mises en colonne G et M
si la case en colonne M est cochée, alors VRAI en AE, sinon FAUX
si tu effaces une destination, les cases à cocher sont effacées ainsi que la colonne AE
si tu cliques sur le bouton Effacer, TOUTE la feuille est effacée

si tu cliques en ligne 8, il n'y a plus de problème

va voir le code, j'y ai mis des commentaires
d'abord celui d'une des feuilles
avec les deux évènements
feuille_calculate
feuille_Change

ensuite celui de la macro "putCaseAcocher" dans le module "m_Utiles"
 

Pièces jointes

  • dep 2019 Rev2.xls
    1.6 MB · Affichages: 10

Staple1600

XLDnaute Barbatruc
Bonjour le fil,


Bonjour

...
donc, comme tu as 12 feuilles de mois, il faut que le meme code soit écrit dans TOUTES les feuilles
...
vgendron
On peut mettre une seule procédure dans ThisWorkBook, non?
Un truc du genre ci-dessous (ce qui évite de reproduire le code sur les 12 feuilles)
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Select Case Sh.Name
Case 1 To 12
If Not Intersect(Target, Sh.Range("AG:AG")) Is Nothing And Target = 1 Then
    With Target.Offset(0, -2)
    .Font.Name = "Wingdings": .Font.Size = 10
    .Value = "o"
    End With
End If
Case Else
Exit Sub
End Select
Application.EnableEvents = True
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Sh.Range("AE:AE")) Is Nothing And Target <> "" Then
    Target = IIf(Target = "x", "o", "x")
    Target.Offset(0, -1).Select
End If
Application.EnableEvents = True
End Sub
EDITION: Ah, zut, j'ai oublié de mettre le Select Case dans la seconde procédure.
Mais je suppose que tu vois déjà où je voulais en venir avec un seul Select Case ;)
 

vgendron

XLDnaute Barbatruc
salut @Staple1600
et ouiii !!!
en fait.. sans le savoir, tu viens de répondre à une question que je me suis souvent posée sans vraiment chercher à y répondre..
comment n'avoir qu'un seul code évènementiel qui fonctionnerait pour n'importe quelle feuille ! :-D
ThisWorkbook !! évidemment ! :-D
 

letroubadour

XLDnaute Occasionnel
bonjour

je viens de modifier deux trois petites choses

j'ai modifier un peu la macro de la feuille 01 mais cela ne fonctionne pas

en fait si la case en G est cochée il faut "vrai" ou "faux" en colonne H (colonne cachée)

merci
 

Pièces jointes

  • dep 2019 Rev2 (1).xls
    1.6 MB · Affichages: 9

Discussions similaires

Réponses
2
Affichages
560

Statistiques des forums

Discussions
312 305
Messages
2 087 087
Membres
103 461
dernier inscrit
dams94