Déclencher une action sur le contenu d'une cellule.

Canard29

XLDnaute Nouveau
Bonjour le forum.
Je me sers de "Enregistrer une macro" pour l'écrire, ne connaissant pas le language VBA et ses déclarations prérequises, mais n'ai pas trouvé la formule qui permettrait un mouvement de bascule lorsqu'on appelle la macro.
Exemple théorique mais qui ne fonctionne pas :

Sub Masquer()
' MASQUER Macro
' Cette macro a pour objectif sur clic du bouton "Masquer"
'de cacher/Afficher en bascule les lignes 5 à 13 de la feuille
' Si Q1 = 1 j'affiche et met à 2, si Q1 = 2 je cache et met à 1


If (R1C17) = 2 Then GoTo Cacher:
'Quelque soit le contenu de Q1 on descend sur AFFICHER: et j'ai essayé d'autre formes d'adressage sans plus de 'succès.

AFFICHER:
Range("Q1").Select
ActiveCell.FormulaR1C1 = 2
Rows("5:13").Select
Selection.EntireRow.Hidden = False
Selection.RowHeight = 20
End


Cacher:
Range("Q1").Select
ActiveCell.FormulaR1C1 = 1
Rows("5:13").Select
Selection.EntireRow.Hidden = True

End Sub

' Par avance je vous remercie de votre aide.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Déclencher une action sur le contenu d'une cellule.

Bonjour à tous

Canard29:
C'est un bon réflexe que tu as là d'utiliser l'enregistreur de macros ;)
C'est un bon professeur pour qui débutes en VBA

Pour ta question, essaies le code VBA ci-dessous.
N'hésites pas si tu as des questions.
Code:
Sub Masquer()
' Cette macro a pour objectif sur clic du bouton "Masquer"
'de cacher/Afficher en bascule les lignes 5 à 13 de la feuille
' Si Q1 = 1 j'affiche et met à 2, si Q1 = 2 je cache et met à 1
Rows("5:13").Hidden = Switch(Range("Q1") = 1, False, Range("Q1") = 2, True)
End Sub

PS: Si tu veux juste masquer/démasquer avec la même macro, tu peux utiliser cette macro
Code:
Sub Masquer_Demasquer()
Rows("5:13").Hidden = Not Rows("5:13").Hidden
End Sub
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Déclencher une action sur le contenu d'une cellule.

Bonjour

Si Q1 est juste là pour savoir si c'est affiché ou masquer, ce n'est pas utile.
On peut mettre par exemple

Code:
With Rows("5:13").EntireRow
    If Rows(5).Hidden Then
        .Hidden = False
    Else
        .Hidden = True
    End If
End With

Sinon grouper les lignes 5 à 13 (onglet données, Grouper) évite tout code VBA
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Déclencher une action sur le contenu d'une cellule.

Re, Bonjour chris ;)

On va pas chipoter pour 4 minutes ;)
Et c'est pas que je sois forcément rapide, mais le masquage/démasquage de lignes est un des sujets récurrents traités sur le forum.
A force on finit à acquérir quelque automatisme mémoriel ;)

PS: c'huis gentil, je te t'ai fait cadeau d'une minute ;)

EDITION
: Chris: pas 9 minutes ;) |-> 18h51-18h46 = 5 minutes <-|

Je t'ai bien donc offert 1 minute ;) puisque je m'a trompé en écrivant plus haut 4 minutes ;)
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Déclencher une action sur le contenu d'une cellule.

Re

Quand j'ai eu à en faire, je les ai faits avec un bouton bascule : du coup l'état du bouton et le masquage étant synchrones, j'avais automatiquement une version courte... Mais là je tournais en rond...

9 minutes : j'ai pu faire des œufs durs ou 3 tournées d’œufs coques :rolleyes:
 

Canard29

XLDnaute Nouveau
Re : Déclencher une action sur le contenu d'une cellule.

Merci à vous deux Staple1600 et Chris Les deux foonctionnent à merveille et bravo pour la concision !
Pour le fun je voudrais quand même savoir comme introduire une notion IF Then else dans la fonction "enregistrer la macro".
La formule "=si() ne me permet que d'affecter une valeur à la cellule active, comment déclencher une action conditionnelle ?
A plus et merci pour la rapidité de la réponse.
 

Canard29

XLDnaute Nouveau
Re : Déclencher une action sur le contenu d'une cellule.

Merci à vous deux Staple1600 et Chris Les deux foonctionnent à merveille et bravo pour la concision !
Pour le fun je voudrais quand même savoir comme introduire une notion IF Then else dans la fonction "enregistrer la macro".
La formule "=si() ne me permet que d'affecter une valeur à la cellule active, comment déclencher une action conditionnelle ?
A plus et merci pour la rapidité de la réponse.
PS : En craignant d'abuser, Une autre question : Comment associer une case à cocher à une ligne en vue de permettre sa suppression ?
 

chris

XLDnaute Barbatruc
Re : Déclencher une action sur le contenu d'une cellule.

Re

Le code donné au #3 contient bien un if then else , le SI en VBA
Cela ne peut être réalisé par l'enregistreur : il faut l'ajouter à ce que fait l'enregistreur.

Associer une case à cocher à une ligne ne me parait pas une bonne idée car il faudra aussi supprimer la case : soit prévoir un bouton qui supprime la ligne active soit prévoir une valeur dans une colonne qui sera gérée pour la suppression.

Il est toujours difficile de répondre dans le vague car pour supprimer une ligne on a le raccourci CTRL- : hors contexte on ne voit donc pas ce que tu vises.
 

Canard29

XLDnaute Nouveau
Re : Déclencher une action sur le contenu d'une cellule.

Excuses-moi Chris pour mon imprécision, j'ai des problème avec la syntaxe du IF (contenu de cellule). Je veux ccontroler que le mot de passe n'est pas trop court ou vide pour éviter pour éviter qu'il ne s'affiche en négatif dans les zones qui ne sont pas remplies volontairement ou non. Bref en codant directement la cellule j'obteins ce que je cherche, mais la macro continue à se dérouler :
Sub essai1()
Range("B2").Select
ActiveCell.FormulaR1C1 = "=IF(LEN(R[-1]C)> 4,""PW trop court"","""")"

' Suite : ........
End Sub
J'ai donc cherché à coder un IF Then else dans la macro, mais ne trouve pas la bonne syntaxe :
Sub essai2()

Range("B1").Select
If (ActiveCell.[Len(R1C1)]) < 4 Then MsgBox "PW trop court"
End
' Suite: ..... Ceci coince au débogage
End Sub
Merci à Chris et à tous pour votre aide. J.P.V http://passion-pastel-villard.e-monsite.com/
 

chris

XLDnaute Barbatruc
elseRe : Déclencher une action sur le contenu d'une cellule.

Bonjour
Sub essai2()

Range("B1").Select
If (ActiveCell.[Len(R1C1)]) < 4 Then MsgBox "PW trop court"
End
' Suite: ..... Ceci coince au débogage
End Sub

est incorrecte syntaxiquement

il faut mettre
Sub essai2()

Range("B1").Select
If (ActiveCell.[Len(R1C1)]) < 4 Then
MsgBox "PW trop court"
Else
ton code si le PW va bien
End if
End Sub

ou bien
Sub essai2()

Range("B1").Select
If (ActiveCell.[Len(R1C1)]) < 4 Then
MsgBox "PW trop court"
exit sub
End if
ton code si le PW va bien

End Sub
 
Dernière édition:

Canard29

XLDnaute Nouveau
Re : Déclencher une action sur le contenu d'une cellule.

Je suis confus, mais ne m'en sors pas :
If (ActiveCell.Len("R1C1")) < 4 Then me provoque Erreur 438 propriété ou méthode non gérée par cet objet.
J'ai essayé d'enlever les crochets de l'exemple précédent, puis rajouté les "", mais toujours le même message.
Par ailleurs ma suppression de ligne sur recherche d'un "X" dans la colonne C trouve bien le X et le supprime, mais je n'arrive pas à sélecter la ligne entière en dynamique comme j'y arrive sur une ligne fixe en enregistrement macro.
Voici le code :
Sub cherche()
nomCherche = "X"
On Error Resume Next
Err = 0
Range("C5:C14").Find(What:=nomCherche, LookIn:=xlValues).Select
If Err = 0 Then
Rows("R:R").Select 'l'enregistrement macro me donnait : Rows("7;7").Select
Rows("[R][C-1]").Activate 'Puis : Range("B7").Activate qui supprimait toute la ligne
Selection.Delete Shift:=xlUp
Else
MsgBox "Pas trouvé"
End If
On Error GoTo 0
End Sub
Salut à tous et merci d'avance. J.P.V.
 
Dernière édition:

Canard29

XLDnaute Nouveau
Re : elseRe : Déclencher une action sur le contenu d'une cellule.

Re : Déclencher une action sur le contenu d'une cellule.

Je suis confus, mais ne m'en sors pas :
If (ActiveCell.Len("R1C1")) < 4 Then me provoque Erreur 438 propriété ou méthode non gérée par cet objet.
J'ai essayé d'enlever les crochets de l'exemple précédent, puis rajouté les "", mais toujours le même message.
Par ailleurs ma suppression de ligne sur recherche d'un "X" dans la colonne C trouve bien le X et le supprime, mais je n'arrive pas à sélecter la ligne entière en dynamique comme j'y arrive sur une ligne fixe en enregistrement macro.
Voici le code :
Sub cherche()
nomCherche = "X"
On Error Resume Next
Err = 0
Range("C5:C14").Find(What:=nomCherche, LookIn:=xlValues).Select
If Err = 0 Then
Rows("R:R").Select 'l'enregistrement macro me donnait : Rows("7;7").Select
Rows("[R][C-1]").Activate 'Puis : Range("B7").Activate qui supprimait toute la ligne
Selection.Delete Shift:=xlUp
Else
MsgBox "Pas trouvé"
End If
On Error GoTo 0
End Sub
Salut à tous et merci d'avance. J.P.V.
 

chris

XLDnaute Barbatruc
Re : Déclencher une action sur le contenu d'une cellule.

Re

Oups !
Je me suis attaché à la logique de la condition sans regarder ce que tu testais :
  • soit tu testes la cellule active
    if len(activeCell.value)>4
  • Soit tu testes la cellule R1C1 ou bien $A$1
    If Len(R1C1.value)
Pour supprimer une ligne il faut utiliser quelque chose comme Range("B7").entirerow.delete
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 944
Membres
103 989
dernier inscrit
jralonso