VBA Alerte si on masque une valeur
Fermé
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
-
Modifié le 10 févr. 2019 à 22:54
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 11 févr. 2019 à 23:42
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 11 févr. 2019 à 23:42
A voir également:
- VBA Alerte si on masque une valeur
- Appel masqué - Guide
- Fausse alerte mcafee - Accueil - Piratage
- Masque apple - Accueil - Guide technologies
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Excel recherche si une valeur existe dans une colonne ✓ - Forum Excel
5 réponses
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
Modifié le 10 févr. 2019 à 22:59
Modifié le 10 févr. 2019 à 22:59
Ou quelque chose comme "si dans la plage X une valeur > 0 est masquée, alors..."
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
Modifié le 10 févr. 2019 à 23:12
Modifié le 10 févr. 2019 à 23:12
Je suis en train de faire dess essais avec ça mais la partie en gras ne fonctionne pas
Sub test()
For Each cellule In Range("C1:C50")
If (cellule.Value > 0) And cellule.Hidden = True Then Cells(1, 1) = "OK"
Next cellule
End Sub
Sub test()
For Each cellule In Range("C1:C50")
If (cellule.Value > 0) And cellule.Hidden = True Then Cells(1, 1) = "OK"
Next cellule
End Sub
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
11 févr. 2019 à 18:50
11 févr. 2019 à 18:50
Bonjour,
Je rouvre ce topic car je pensais avoir trouvé une solution mais elle ne marche pas toujours.
J'avais fait une cellule avec:
=SOUS.TOTAL(109;Saisie!C3:DH542)
Et une autre avec
=SOMME(Saisie!C3:DH542)
Sous total est sensé faire une somme des cellules sans les valeurs masquées.
SI les deux cellules sont différentes, afficher une alerte.
ça marche très bien quand des lignes sont masquées et qu'une valeur est restée dedans par inadvertance!
Par contre il semblerait que la fonction sous total de fonctionne pas si c'est une colonne qui a été masquée, et j'ai une macro qui masque des colonnes...
Es-ce possible de faire un sous total ignorant ce qui a été masqué manuellement en tant que ligne ET en tant que colonne?
Je rouvre ce topic car je pensais avoir trouvé une solution mais elle ne marche pas toujours.
J'avais fait une cellule avec:
=SOUS.TOTAL(109;Saisie!C3:DH542)
Et une autre avec
=SOMME(Saisie!C3:DH542)
Sous total est sensé faire une somme des cellules sans les valeurs masquées.
SI les deux cellules sont différentes, afficher une alerte.
ça marche très bien quand des lignes sont masquées et qu'une valeur est restée dedans par inadvertance!
Par contre il semblerait que la fonction sous total de fonctionne pas si c'est une colonne qui a été masquée, et j'ai une macro qui masque des colonnes...
Es-ce possible de faire un sous total ignorant ce qui a été masqué manuellement en tant que ligne ET en tant que colonne?
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
11 févr. 2019 à 19:00
11 févr. 2019 à 19:00
J'ai tenté avec:
Function sommeVisibles(champ As Range)
Application.Volatile
t = 0
For Each c In champ
If c.EntireColumn.Hidden = False Then t = t + c.Value
Next c
sommeVisibles = t
End Function
Gros ralentissement, c'est inutilisable sur une grande plage...
Function sommeVisibles(champ As Range)
Application.Volatile
t = 0
For Each c In champ
If c.EntireColumn.Hidden = False Then t = t + c.Value
Next c
sommeVisibles = t
End Function
Gros ralentissement, c'est inutilisable sur une grande plage...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
11 févr. 2019 à 19:57
11 févr. 2019 à 19:57
Bonjour,
il serait plus logique d'agir en amont.
Que ta macro qui masque fasse contrôle avant et ne masque que ce qui est autorisé.
Exemple :
Seules les valeurs numériques sont comptées. Les textes et valeurs d'erreurs ne gênent pas.
Tu peux utiliser le même principe si tu préfères rester avec un contrôle à-posteriori.
eric
il serait plus logique d'agir en amont.
Que ta macro qui masque fasse contrôle avant et ne masque que ce qui est autorisé.
Exemple :
Sub controle() Dim pl As Range, i As Long, nb As Long Set pl = [C3:G10] 'contrôle lignes For i = pl.Row To pl.Row + pl.Rows.Count - 1 nb = Application.Count(Intersect(Rows(i), pl)) If nb > 0 Then MsgBox nb & " valeur(s) numérique(s) en ligne " & i End If Next i 'contrôle colonnes For i = pl.Column To pl.Column + pl.Columns.Count - 1 nb = Application.Count(Intersect(Columns(i), pl)) If nb > 0 Then MsgBox nb & " valeur(s) numérique(s) en colonne " & i End If Next i End Sub
Seules les valeurs numériques sont comptées. Les textes et valeurs d'erreurs ne gênent pas.
Tu peux utiliser le même principe si tu préfères rester avec un contrôle à-posteriori.
eric
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
11 févr. 2019 à 20:29
11 févr. 2019 à 20:29
Merci beaucoup mais je ne comprends pas bien la macro.
Elle donne le nombre de valeurs dans la plage, et ça permettrait donc de "bloquer" la première macro si des valeurs sont "détectées" avant qu'elle ne masque, c'est ça?
Elle donne le nombre de valeurs dans la plage, et ça permettrait donc de "bloquer" la première macro si des valeurs sont "détectées" avant qu'elle ne masque, c'est ça?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
Modifié le 11 févr. 2019 à 21:25
Modifié le 11 févr. 2019 à 21:25
Oui, voilà. Agir avant, pas après
Si tu as des valeurs numériques tu ne les masques pas.
Ou, si tu n'as pas besoin du détail colonne par colonne, sans boucle :
même principe pour les lignes.
eric
PS : j'ai oublié de répondre à une de tes interrogations.
Sous.Total() n'est prévu que pour les lignes
Si tu as des valeurs numériques tu ne les masques pas.
Ou, si tu n'as pas besoin du détail colonne par colonne, sans boucle :
Sub test() masquerCol Range("C3:G10") End Sub Sub masquerCol(ByVal pl As Range) ' masquer tout pl.EntireColumn.Hidden = True ' démasquer colonnes avec valeur numérique Set pl = pl.SpecialCells(xlCellTypeConstants, xlNumbers) If Not pl Is Nothing Then pl.EntireColumn.Hidden = False End Sub
même principe pour les lignes.
eric
PS : j'ai oublié de répondre à une de tes interrogations.
Sous.Total() n'est prévu que pour les lignes
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
11 févr. 2019 à 21:34
11 févr. 2019 à 21:34
PS2 : et si tu veux prévenir l'utilisateur, remplacer la dernière ligne par :
eric
If Not pl Is Nothing Then
pl.EntireColumn.Hidden = False
MsgBox "colonnes non masquées : " & pl.EntireColumn.Address
End If
eric
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
11 févr. 2019 à 22:23
11 févr. 2019 à 22:23
Dans le tableau, il y a des plages de 11 colonnes qui représente des bâtiments. 10 bâtiments de 11 niveaux.
Le tableau se "module" pour laisser afficher que ce dont j'ai besoin (2 bâtiments de 4 niveaux, par exemple)...
Batiments = (Worksheets("Aide et quantités").Range("E7") * 11) + 3
Etages = Worksheets("Aide et quantités").Range("E8")
'Masquer étages inutiles
If Etages < 11 Then Range(Columns(13), Columns(13 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(24), Columns(24 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(35), Columns(35 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(46), Columns(46 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(57), Columns(57 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(68), Columns(68 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(79), Columns(79 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(90), Columns(90 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(101), Columns(101 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(112), Columns(112 - 10 + Etages)).Hidden = True
If Batiments < 103 Then Range(Columns(Batiments), Columns(112)).Hidden = True
Je vois pas trop comment je vais faire pour ajouter ta macro à ça :p
Un dernier petit coup de pouce? si tu as une idée...!
Le tableau se "module" pour laisser afficher que ce dont j'ai besoin (2 bâtiments de 4 niveaux, par exemple)...
Batiments = (Worksheets("Aide et quantités").Range("E7") * 11) + 3
Etages = Worksheets("Aide et quantités").Range("E8")
'Masquer étages inutiles
If Etages < 11 Then Range(Columns(13), Columns(13 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(24), Columns(24 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(35), Columns(35 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(46), Columns(46 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(57), Columns(57 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(68), Columns(68 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(79), Columns(79 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(90), Columns(90 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(101), Columns(101 - 10 + Etages)).Hidden = True
If Etages < 11 Then Range(Columns(112), Columns(112 - 10 + Etages)).Hidden = True
If Batiments < 103 Then Range(Columns(Batiments), Columns(112)).Hidden = True
Je vois pas trop comment je vais faire pour ajouter ta macro à ça :p
Un dernier petit coup de pouce? si tu as une idée...!
Anthelm
Messages postés
198
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
2 mars 2024
1
11 févr. 2019 à 22:53
11 févr. 2019 à 22:53
Sinon je fais if NB val > 0 à chaque fois que je masque un truc. Je vais peut être essayer ça, ça va prendre 10 jours à écrire mais bon...