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:

Canard29

XLDnaute Nouveau
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.
 

chris

XLDnaute Barbatruc
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"
 

Canard29

XLDnaute Nouveau
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 édition:

Si...

XLDnaute Barbatruc
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
 

Canard29

XLDnaute Nouveau
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.
 

Canard29

XLDnaute Nouveau
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.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 765
Messages
2 091 892
Membres
105 084
dernier inscrit
lca.pertus