XL 2010 Macro cases à cocher

karakoman1

XLDnaute Occasionnel
Bonsoir à tous,
J' ai une macro qui affiche une image si une case à cocher est effectivement cochée

Sub AfficheImage1()
If Range("a7") = False Then 'case à cocher
ActiveSheet.Shapes("Picture 5").Visible = False
Else
ActiveSheet.Shapes("Picture 5").Visible = True
End If
End Sub

Je voudrais bien transformer cette macro, pour que cette case à cocher se coche si le résultat de la cellule "A11" est = à "Y" et se décoche si le résultat de cette même cellule est = à "N"
Quelqu'un pourrais-t'il m'aider à trouver cette solution?

Merci d'avance et bonne soirée
 

job75

XLDnaute Barbatruc
Bonsoir le forum,

Je passe ici après un week-end chargé et je vois que c'est un joyeux foutoir sur ce fil.

Je ne comprends pas que Staple1600 n'utilise pas les cellules liées, elles sont faites pour ça.

Ci-joint le fichier du post #15 modifié avec ces macros :
Code:
Private Sub Worksheet_Activate()
Worksheet_Change [O4] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant, CelluleLiée, c As Range, i%
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheet9 'CodeName
  lig = Application.Match([O4], .[A:A], 0)
  If IsError(lig) Then lig = 1
  CelluleLiée = Array("A7", "F7", "I7", "L7", "P7", "U7", "Y7", "AC7", "AG7", _
    "F46", "I46", "L46", "P46", "U46", "A27", "D27", "G27", "K27", "M27", "Q27", "U27", "Y27", "AC27")
  For Each c In Intersect(.Rows(lig), .[C:K,Y:AL])
    Range(CelluleLiée(i)) = c = "Y"
    i = i + 1
  Next
End With
For i = 1 To 9: Run "AfficheImage" & i: Run "Afficheequipemment" & i: Next 'en français il y a un seul "m" à équipement...
For i = 1 To 5: Run "Afficheincendie" & i: Next
For Each c In [B12:B23]: c = UCase(c): Next 'quel intérêt ???
Application.EnableEvents = True
End Sub
En plus j'ai dû ajouter des colonnes manquantes dans la feuille "Données des produits" !!!

Je l'ai dit cent fois et je le répète : les cellules fusionnées ne gênent que ceux qui le veulent bien !!!

Bonne nuit.
 

Pièces jointes

  • Template fiche de sécurité sans noms(1).xlsm
    266.4 KB · Affichages: 19
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir job75

Avant d’atterrir sur XLD, j'explorais le web anglophone dédié à Excel
Et là-bas le son de cloche est différent.
https://www.datanumen.com/blogs/2-useful-tips-avoid-problems-caused-merged-cells-excel-worksheet/
Alors depuis des lustres, à cause des petits gars d'outre-Manche, j'utilise les cellules fusionnées avec parcimonie et si besoin je centre sur plusieurs colonnes.

Et je précisais plus bas:
"Quand tu le peux , utilises plutôt Centrer sur plusieurs colonnes."
J'ai pas écrit qu'il fallait bannir les cellules fusionnées ;)

Je ne comprends pas que Staple1600 n'utilise pas les cellules liées, elles sont faites pour ça.
C'est sans doute parce que je suis pas Job75 ;):D
(ou plus vraisemblablement, que le sujet m'inspirait pas plus que cela ;) comme mes messages 17 et 19 pouvaient le laisser penser)
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le forum,

J'ai un peu simplifié le code précédent.

Et dans ce fichier (2) j'ai ajouté 2 macros :

- la macro Affiche qui remplace les 23 macros des modules : les Shapes concernées ont été renommées

- la macro AjusterHauteurLignes : elle défusionne temporairement les cellules concernées.

Le code au complet :
Code:
Sub Affiche()
With Shapes(Application.Caller).ControlFormat
  Shapes("_" & Replace(.LinkedCell, "$", "")).Visible = Range(.LinkedCell)
End With
End Sub

Sub AjusterHauteurLignes()
Dim r As Range, m As Range, h!, m1 As Range
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each r In [I12:I23,G34:G43]
  r.RowHeight = 11.25 'RAZ, adapter au besoin
  If r <> "" Then
    Set m = r.MergeArea
    m.UnMerge 'défusionne
    m.HorizontalAlignment = xlCenterAcrossSelection
    m.WrapText = True
   r.Rows.AutoFit 'ajustement hauteur
    h = m.RowHeight
    m.Merge 'refusionne
    m.RowHeight = h
    m.HorizontalAlignment = xlLeft
  End If
Next
For Each r In [G54:AG57].Rows
  r.RowHeight = 11.25 'RAZ, adapter au besoin
  If r.Cells(1) <> "" Or r.Cells(14) <> "" Then
    Set m = r.Cells(1).MergeArea
    Set m1 = r.Cells(14).MergeArea
    r.UnMerge 'défusionne
    m.HorizontalAlignment = xlCenterAcrossSelection
    m1.HorizontalAlignment = xlCenterAcrossSelection
    r.WrapText = True
    r.Rows.AutoFit 'ajustement hauteur
    h = r.RowHeight
    m.Merge: m1.Merge 'refusionne
    r.RowHeight = h
    r.HorizontalAlignment = xlLeft
  End If
Next
End Sub

Private Sub Worksheet_Activate()
Worksheet_Change [O4] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant, CelluleLiée, c As Range, i%
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheet9 'CodeName
  lig = Application.Match([O4], .[A:A], 0)
  If IsError(lig) Then lig = 1
  CelluleLiée = Array("A7", "F7", "I7", "L7", "P7", "U7", "Y7", "AC7", "AG7", _
    "F46", "I46", "L46", "P46", "U46", "A27", "D27", "G27", "K27", "M27", "Q27", "U27", "Y27", "AC27")
  For Each c In Intersect(.Rows(lig), .[C:K,Y:AL])
    Range(CelluleLiée(i)) = c = "Y"
    Shapes("_" & CelluleLiée(i)).Visible = c = "Y"
    i = i + 1
  Next
End With
Application.EnableEvents = True
End Sub
J'ai aussi mis des formules dans la plage B12:B23.

Bonne journée.
 

Pièces jointes

  • Template fiche de sécurité sans noms(2).xlsm
    264.2 KB · Affichages: 23
Dernière édition:

karakoman1

XLDnaute Occasionnel
Bonsoir Job75
C'est plutôt bien vu!! Et je ne parle pas des 2 m à équipement :oops:
Plus sérieusement, merci pour le code... et la correction orthographique
Cependant, je constate 1 ou 2 petits soucis à l'utilisation.

1- Lorsque je lance la macro "Ajuster hauteur de ligne" la partie de la macro suivante m'enlève une partie de mon tableau "Secours"

For Each r In [G54:T57].Rows
Set m = r.Cells(1).MergeArea
Set m1 = r.Cells(14).MergeArea
r.UnMerge
m.HorizontalAlignment = xlCenterAcrossSelection
m1.HorizontalAlignment = xlCenterAcrossSelection
r.WrapText = True
r.Rows.AutoFit 'ajustement hauteur
h = r.RowHeight
m.Merge: m1.Merge
r.RowHeight = h
r.HorizontalAlignment = xlLeft
Next


2- Au départ, pour essayer de faire tenir l'ensemble sur une seule feuille à l'impression, J'aimerais que mes lignes [I12:I23,G34:G43], aient un hauteur de 11,25. Serait-il possible pour les lignes qui ne doivent pas s'ajuster, de leur donner une hauteur de 11,25 et pour les autres, la hauteur nécessaire pour faire apparaître le texte complet.

Et toujours dans le but de ne pas mourir idiot, pourrais-tu ajouter quelques explication aux lignes de la macro afin de bien (essayer) de la comprendre et peut être pouvoir moi aussi réutiliser une partie de ce code pour un autre petit travail en excel.

Merci pour ton aide précieuse et bonne journée.
 

job75

XLDnaute Barbatruc
Re,

1. J'ai modifié mon post #33 à 10:04 (T57 remplacé par AG57), vous n'avez pas pris le dernier fichier.

2. Lisez le code, il y a des RAZ à 11.25 pour la hauteur des lignes.

3. Je ne donne pas d'explications, c'est à vous de dire ce que vous ne comprenez pas.

A+
 

job75

XLDnaute Barbatruc
Re,

Vous aurez peut-être remarqué qu'avec le fichier (2) l'ajustement des hauteurs n'est pas parfait.

La hauteur de la cellule T55 est trop grande pour ce qu'elle contient.

On peut y remédier en utilisant une police à chasse fixe, Consolas par exemple.

Fichier (3).

A+
 

Pièces jointes

  • Template fiche de sécurité sans noms(3).xlsm
    264.3 KB · Affichages: 26

Si...

XLDnaute Barbatruc
Re

«C'est sans doute parce que je ne suis pas Job75 !»
Staple, cela ne t'empêche pas de bien vivre (manger, rigoler et même agiter le bâton), non :p ?

«Je l'ai dit cent fois et je le répète : les cellules fusionnées ne gênent que ceux qui le veulent bien ! »
Job, je dirai plus : «pour toute action, quand on ne sait pas ou qu'on ne veut pas savoir (hélas trop souvent le cas) on n'est pas à l'abri de faire des bêtises !».

Et ... pour continuer à foutre le foutoir ,
Karakoman, je n'ai pas eu de retour sur ma proposition.

Tu tiens vraiment à avoir ces cases à cocher ? Si oui, dans quel but ?

Dans le fichier joint, un simple clic permet le traitement des images.
Tu nous as laisser entrevoir un aller (afficher ou pas les icônes en fonction du tableau) mais pas le retour (traiter le tableau – correction, ajout, suppression de cas - en fonction des affichages, saisies).
Pour les phrases, je reprends l'idée de Job (des phrases indépendantes des codes en colonne de gauche (?)) mais, ici, seules certaines lignes changeront de hauteur.

Avec toutes les lignes, ou plein de textes à rallonge, il faudra un nouveau bricolage (comme passer par un "zoom") avant d'imprimer sur une seule feuille.

«Mourir idiot» importe peu à ce stade, non ?o_O
 

Pièces jointes

  • Si Des images Si.xlsm
    251.3 KB · Affichages: 34

karakoman1

XLDnaute Occasionnel
Re
Désolé mais je viens seulement de voir les derniers commentaires du fil :)rolleyes:) Tout le monde en prend pour son grade.
Autrement, je viens seulement de voir le dernier message de Si... et n'avais même pas vu le premier. Désolé
Si... je tenais tellement à avoir ces cases à cocher, c'est parce que j'avais déjà fait le fichier 1ere version depuis un certain temps dans lequel j'avais des cases que je cochais manuellement pour activer l'image ou pas.
Par la suite, j'ai pensé qu'il était plus intéressant de faire une base de données sur une autre feuille avec les différents éléments qui remplissent automatiquement le "Template".
Et de la, vient ma question sur les cases à cocher. Si je ne le faisais plus manuellement, il fallait bien une macro pour le faire.

Le dernier fichier de Job75 que je remercie en passant, (Ci joint) et que j'ai légèrement adapté est intéressant et semble bien fonctionner hormis "peut-être" la hauteur de ligne qui ne respecte pas toujours la taille de 11,25 pour une ligne simple ce qui pourrais trop allonger ma feuille et ne plus retrouver toutes mes données sur 1, mais plutôt sur 2 feuilles pour l'impression.

J'y ai remis tous les onglet prévus pour qu'il soit complet

Par contre, Si... le fait de masquer les lignes vides quand il n'y a pas de données m'intéresse encore plus.
J'avoue que je ne comprends pas tout son fonctionnement au niveau de la table contenant les "données de produits".
Quel est le principe de la numérotation?

Dans le Template, les symboles s'affichent bien (Sauf l'interdiction du GSM)
Je vais essayer de bien comprendre le fonctionnement de ton code, mais c'est pas encore gagné.
Oserais-je demander une petite explication du code? :oops:
En tous cas, merci pour ton aide

Bonne journée
 

Pièces jointes

  • Template fiche de sécurité sans noms V4 .xlsm
    255.8 KB · Affichages: 20

job75

XLDnaute Barbatruc
Bonsoir karakoman1, Si...
... semble bien fonctionner hormis "peut-être" la hauteur de ligne qui ne respecte pas toujours la taille de 11,25 pour une ligne simple
Il faut mettre toute la ligne sur la police Arial 8, on obtient alors une hauteur ajustée à 12, c'est mieux à mon avis que 11,25.

Et si l'on veut masquer les lignes vides mettre la hauteur de la RAZ à 0.

Fichier (2 bis).

A+
 

Pièces jointes

  • Template fiche de sécurité sans noms(2 bis).xlsm
    264.7 KB · Affichages: 34

karakoman1

XLDnaute Occasionnel
Bonjour le forum, bonjour Si...,
Dans ton dernier message (N° 37), j'ai un petit problème avec ton fichier que je n'arrive pas à comprendre.
Les symboles fonctionnent tous à par un, le symbole du téléphone.
J'ai essayé de comprendre le fonctionnement des macros, mais je ne comprends vraiment pas.
Pourrais-tu regarder et me dire ou est le problème?
Merci d'avance
 

Si...

XLDnaute Barbatruc
Bon_jour

Salut Staple (si… tu repasses par ici ou là), Job

Il n'y a aucune mise en garde dans mon message précédent (Dieu m'en garde o_O) !

Pour Staple, c'est un jeu entre nous (le score étant pour l'instant de 36 000 à 36 001 et je laisse deviner qui est devant).

Avec Job**, on a des points de vue différents pour les réponses à donner.
Il commence par s'en tenir à la stricte demande puis traite les adjonctions éventuelles alors que je préfère imaginer comment le contexte risque de changer (anticiper, comme le dit Staple, dans les fils à tiroir*).

Je te donne, en complément, une feuille d'explications de mes macros; mais je ne peux pas répondre à tes questions car tu n'as pas ouvert tous les tiroirs (surtout les secrets ;)).

Où as-tu une icône pour le téléphone ?
Je ne sais toujours pas ce que tu as comme liaison entre les codes et les phrases.

* En général, je ne continue que si j'estime que le problème peut concerner d'autres lecteurs.

** me démentir si je me trompe ;)
 

Pièces jointes

  • Si Des images Si.xlsm
    288.8 KB · Affichages: 29

job75

XLDnaute Barbatruc
Bonsoir karakoman1, Si...,

Quitte à "anticiper", si les cases à cocher sont inutiles, ne faire dépendre les Shapes que de O4 :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant, CelluleLiée, c As Range, i%
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheet9 'CodeName
  lig = Application.Match([O4], .[A:A], 0)
  If IsError(lig) Then lig = 1
  CelluleLiée = Array("A7", "F7", "I7", "L7", "P7", "U7", "Y7", "AC7", "AG7", _
    "F46", "I46", "L46", "P46", "U46", "A27", "D27", "G27", "K27", "M27", "Q27", "U27", "Y27", "AC27")
  For Each c In Intersect(.Rows(lig), .[C:K,Y:AL])
    Shapes("_" & CelluleLiée(i)).Visible = c = "Y"
    i = i + 1
  Next
End With
Application.EnableEvents = True
End Sub
Fichier (4).

A+
 

Pièces jointes

  • Template fiche de sécurité sans noms(4).xlsm
    249.5 KB · Affichages: 24

karakoman1

XLDnaute Occasionnel
Bonsoir le forum, bonsoir Job75 et bonsoir Si...

Je m'y prends peut être un peu tard pour les explications, mais le fichier est fait pour faire des fiches de sécurité "simplifiées" ou on retrouve "l'essentiel" pour les utilisateurs de produits qui comportent des risques, au lieu des 4 ou 5 pages (voir plus) de données qui pour la plupart n'intéressent pas l'utilisateur.
Je vais remettre le fichier complet avec l'onglet "H et P" qui reprend les phrases de mentions de danger et conseils de prudence.
Pour le téléphone... il est là
upload_2017-11-2_21-18-40.png


Mais il ne fonctionne pas comme les autres symboles.
Si je n'ai pas comme tu dis :"ouvert tous les tiroirs (surtout les secrets ;))." Si il y a encore des zones d'ombre sur mes secrets, demande-les moi, et je m'ouvrirais :rolleyes:

Bonne soirée
 

Pièces jointes

  • upload_2017-11-2_21-17-10.png
    upload_2017-11-2_21-17-10.png
    24.5 KB · Affichages: 19
  • Template fiche de sécurité simplifiée Si.xlsm
    256.1 KB · Affichages: 25

karakoman1

XLDnaute Occasionnel
Job75, c'est intéressant de voir les 2 versions avec les 2 manières de faire. La tienne et celle de Si...
J'ai juste une question.
N'est-il pas possible de faire automatiquement la mise à hauteur des lignes plutôt que de passer par un bouton?
J'avoue que j'ai essayé de déplacer la macro, mis je ne suis pas arrivé à la faire fonctionner.
Il est vrai que au final, les cases à cocher ne sont peut-être plus si importantes que cela puisque ca fonctionne autrement.

Je te souhaite une Excel(lente) soirée

Edit: Serait-il possible aussi quitte à faire un bouton pour une macro, d'en faire un qui aurait comme macro, d'enregistrer la feuille "Template" au format pdf, avec comme nom, les renseignements des cellules O4 suivie de A5 suivie de "Fiche de sécurité simplifiée?
Ce qui donnerait:
"123456 - LOCTITE 5699 - fiche de sécurité simplifiée"
 
Dernière édition:

job75

XLDnaute Barbatruc
N'est-il pas possible de faire automatiquement la mise à hauteur des lignes plutôt que de passer par un bouton?
Il suffit de faire appeler la macro par la Worksheet_Change :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [O4]) Is Nothing Then Exit Sub
Dim lig As Variant, CelluleLiée, c As Range, i%
AjusterHauteurLignes
With Sheet9 'CodeName
  lig = Application.Match([O4], .[A:A], 0)
  If IsError(lig) Then lig = 1
  CelluleLiée = Array("A7", "F7", "I7", "L7", "P7", "U7", "Y7", "AC7", "AG7", _
    "F46", "I46", "L46", "P46", "U46", "A27", "D27", "G27", "K27", "M27", "Q27", "U27", "Y27", "AC27")
  For Each c In Intersect(.Rows(lig), .[C:K,Y:AL])
    Shapes("_" & CelluleLiée(i)).Visible = c = "Y"
    i = i + 1
  Next
End With
End Sub
A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley