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

  • Initiateur de la discussion Initiateur de la discussion Canard29
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

Canard29

Guest
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 modification par un modérateur:
Re : Déclencher une action sur le contenu d'une cellule.

Bonjour Chris,
OK pour le contrôle de la longueur. Je t’en remercie.
Je souhaite savoir s’il existe une version Française de Excel 2007 Developer Reference afin de m’y retrouver dans la syntaxe VBA :
Liste des objets (usuels) pas perdus dans une liste sans fin
Hiérarchie et Séquence des arguments
Les différences entre les traductions d’enregistrement macro et le langage VBA
Je crois que le domaine est immense !
Pour ce qui est de l’effacement d’une ligne, Je cherchais à localiser une ligne contenant un X en colonne C, si c’est le cas, supprimer la ligne entière. Mon problème etait d’adresser correctement la ligne et la sélectionner pour la supprimer.
Je galère depuis ce matin mais j’ai enfin trouvé :
Sub essai()
'
' Recherche ligne à effacer
Range("C5:C17").Select
Selection.Find(What:="x", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
'>>>
ActiveCell.EntireRow.Select
ActiveCell.EntireRow.Activate
ActiveCell.EntireRow.Delete
'>>>
End Sub
Il ne me reste plus qu’à fignoler pour le cas où il y aurait plusieurs lignes à effacer !
Merci de ton aide J.P.V.
 
Re : Déclencher une action sur le contenu d'une cellule.

RE,

Les 2 lignes
ActiveCell.EntireRow.Select
ActiveCell.EntireRow.Activate
ne sont pas utiles car la recherche a activé la cellule concernée et cela suffit pour la commande suivant ces 2 lignes.

Pour l'aide : l'explorateur d'objet dans l'éditeur VBA peut aider à situer les objets, leurs méthodes et leurs propriétés.
Il faut au préalable filtrer sur Excel puis un niveau d'objet pour ne pas être "perdus dans une liste sans fin"
 
Re : Déclencher une action sur le contenu d'une cellule.

Merci Chris, J'ai encore un petit problème d'erreur lorsque Find ne trouve plus de X, je ne sais comment en sortir pour coontinuer la macro, c'est le Find qui plante.
 
Re : Déclencher une action sur le contenu d'une cellule.

Chris, excuses-moi, je t'ai fait une réponse rapide hier soir, voici mon problème :
Sub
' Recherche ligne à effacer
Range("C5:C13").Select
Selection.Find(What:="x", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, Endcol:=-1, SearchFormat:=False).Activate
Do
ActiveCell.EntireRow.Select
ActiveCell.EntireRow.Activate
ActiveCell.EntireRow.Delete
Range("C5:C17").Select
Selection.Find(What:="x", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True _
, SearchFormat:=True).Activate
On Error GoTo Suite:
Loop While ActiveCell = "x"
Suite:
End Sub
Tout a bien fonctionné avec plusieurs lignes à supprimer, mais lorsque je n'en ai pas j'ai systématiquement le message joint en .JPG . J'ai regardé dans les aides mais ne trouve pas d'argument de sortie autre que "On error" mais qui ne fonctionne plus dans le cas présent. Le plantage se produit avec la dernière cellule de la plage sélectée.
Je regrette de ne pas mieux m'en sortir, mais c'est la dernière ligne droite, j'aurai bientôt une contrivution à soumettre. Merci encore ! J.P.V. PS: Je ne vois pas mon fichier joint, il s'agit de l'erreur 448 Argument nommé introuvable.
 
Dernière modification par un modérateur:
Re : Déclencher une action sur le contenu d'une cellule.

salut

macros basiques

- pour rechercher et supprimer la première ligne avec Find et sans message d'erreur
Code:
Sub essai0()
  Dim Cel As Range
  Set Cel = [C5:C17].Find("x", , , 1)  'recherche de x ou X
  If Not Cel Is Nothing Then Rows(Cel.Row).Delete 'si... non rien ou trouvé, supprime La ligne de la cellule
End Sub
- pour supprimer Les lignes , une boucle sans Find (3 exemples) mais, dans ce cas, il faut remonter
Code:
Sub essai1()
  Dim L As Byte  'F1 pour voir le type de variables numériques
  For L = 17 To 5 Step -1
    If Cells(L, "C") = "x" Then Rows(L).Delete
  Next
End Sub
Sub essai2()
  Dim L As Byte
  L = 17 'première ligne recherche (dernière de la plage)
  Do
    If Cells(L, 3) = "x" Then Rows(L).Delete 'ligne où C contient x (pas X ou autre)
    L = L - 1 'diminue de 1 le N° de ligne de recherche
  Loop Until L < 5 'jusquà la première ligne de la plage
End Sub
Sub essai3()
  Dim L As Byte
  L = 18 'première ligne recherche (dernière de la plage)
  Do
    If Cells(L, 3) = "x" Then Rows(L).Delete 'ligne où C contient x (pas X ou autre)
    L = L - 1 'diminue de 1 le N° de ligne de recherche
  Loop While L > 5 'tant que le n° est inférieur à 5
End Sub
 
Re : Déclencher une action sur le contenu d'une cellule.

Eureka !
Juste après t'avoir écrit je me suis rendu compte que si j'avais un "On Error" sur le deuxième Find, c'est sur le premier que cela plantait. En plaçant un "On Error Goto suite:", mon problème est résolu. Je te remercie chaleureusement pour ta coopération et ta patience. A mon premier cours 2ème séance (Ordinateur 1401 IBM en 1961, mon instructeur m'avait repondu "mais t'es complètement bouché ? S'il suit Xldownload il se reconnaitra ! Tout cela est bien loin ! Merci encore. J.P.V.
 
Re : Déclencher une action sur le contenu d'une cellule.

Chris C'est encore moi, mais peut être que quelqu'un d'autre voudra prendre le relais ? A vouloir trop fignoler on casse tout.
J'ai déjà utilisé en numérique une chaîne de chiffres résultant de STXT(B1;1;5), mais lorsque la formule est dans la cellule, le test si zéro ou estvide ne fonctionne pas. Comment tester si la la cellule ne contient que la formule ? Jai essayé de passer par une variable, sans résultat probant. Merci d'avance ! J.P.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour