masquer graphique si cellule vide

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 !

gaboule

XLDnaute Nouveau
bonjour,

je cherche le code à utiliser pr masquer des graphiques qi des cellules de mon tableau sont vide.

Je vous joins le code que j'avais tapé mais qui ne fonctionne pas.

Je précise que je suis débutante en vba.


Sub masqgraph1()
Application.ScreenUpdating = False
Range("e100:e108").Select
For Each cell In Selection
cpt = 0
For i = 0 To 11
If cell.Offset(0, i) <> "" Then
cpt = cpt + 1
End If
Next
If cpt = 0 Then
ActiveSheet.ChartObjects(graph1.Name).Visible = False
Else
ActiveSheet.ChartObjects(graph1.Name).Visible = True
End If
Next

Application.ScreenUpdating = True
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub


Merci d'avance de votre aide

gaboule
 
Re : masquer graphique si cellule vide

Salut aboule et le forum
Je vous joins le code que j'avais tapé mais qui ne fonctionne pas.
Je précise que je suis débutante en vba.
Ouais, et si il ne fonctionne pas... ça ne nous aide pas !
Si encore, il était renseigné, commenté, on pourrait savoir exactement où est l'erreur de compréhension et l'erreur de raisonnement, mais juste avec le code...
Code:
Sub masqgraph1()
Application.ScreenUpdating = False
'bloque le rafaîchissement écran
Range("e100:e108").Select
'sélectionner la plage E100:E108
For Each cell In Selection
'Pour chaque cellule (dell) de la sélection
cpt = 0
'cpt=0
For i = 0 To 11
'pour i=0 to 11
If cell.Offset(0, i) <> "" Then
'si la cellule (donc de E100 à E108) décalée de i colonnes (donc de E à P) n'est pas vide, alors
cpt = cpt + 1
'incrémenter cpt
End If
Next
'cell suivante
If cpt = 0 Then
'si cpt=0 => ne tient compte que de la dernière ligne (108), puisque la cpt est remis à 0 à chaque cellule
ActiveSheet.ChartObjects(graph1.Name).Visible = False
Else
ActiveSheet.ChartObjects(graph1.Name).Visible = True
End If
Next
Application.ScreenUpdating = True
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'se déclenche à chaque changement de cellule
End Sub

Difficile de savoir ce que ça veut dire, comme code, mais je pense qu'il y a erreur de raisonnement, et des problèmes de compréhension des instructions
ActiveSheet.ChartObjects(graph1.Name).Visible
Je comprends l'instruction, mais pas la variable "graph1.Name" : ça ressemble au nom de l'onglet dont le nom informatique (propriété "(Name)") connu serait "graphe1" => un seul graphique.

Bon on va essayer d'aider :
Range("e100:e108").Select
For Each cell In Selection
On peut facilement réduire ce type de code :
For Each cell In Range("E100:E108")
ça n'a pas l'air de changer grand chose, hormis de raccourcir le code, mais ça permet de ne plus être obliger d'être sur la feuille active (dans ce cas, il faut lui préciser la feuille).

Ton erreur de raisonnement la plus flagrante : tu charges un compteur (cpt), mais tu ne l'exploites pas avant de recommencer un traitement => ce qui fait qu'excel ne regarde que le dernier traitement.
Je ne sais pas si c'est un unique graphique traitant 9 séries (ce que semble dire le code), ou 9 graphuiques traitant une seule série (ce que semble dire le texte). Difficile de dire 😡
Code:
ActiveSheet.ChartObjects(graph1.Name).Visible = True
Un seul graphique, puisque "graph1.Name" n'est pas variable.

Je ne travaille pas souvent avec des graphiques, alors, on va ramener ça aux onglets : Il existe des méthodes pour définir une feuille :
- Le nom de l'onglet : c'est le nom apparaissant sous la feuille de calcul et qu'on peut changer, mettre en variable etc...
x = Sheets("Feuil1").Name
- son nom informatique (propriété "(Name)") : celui qui apparaît dans VBE et qui est très difficilement modifiable sauf en VBA : Feuil1.instruction. Avantage : si on modifie le nom de l'onglet, il reste invariable
Code:
x =Sheets("Feuil1").CodeName
- sa place dans le classeur, son index
Code:
x = Sheets("Feuil1").Index

donc ton code "graph1.Name" demanderait le nom de l'onglet de la feuille dont le codename est "graph1"

Worksheet_SelectionChange => macro qui se lance quand on change de sélection dans la feuille :
Quand je sélectionne E100:E108 => elle se lance avec Target = Range("E100:E108")
La cellule active est en générale la première et une action sur <Enter> va changer la cellule active, sans changer la sélection, ni relancer la macro.

Pour ton problème, je suggèrerai Worksheet_Change, en limitant sa zone d'action
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E100:P108")) Is Nothing Then Exit Sub
'le travail à faire
End Sub
Si la modification ne concerne pas la plage E100😛108, on sort. ce n'est qu'un exemple. Si par exemple la cellule P108 contient une formule, et que son affichage change, la macro ne se lancera pas.

Tout ça pour dire que sans plus d'infos, le dépannage...
A+
 
- 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

Discussions similaires

Réponses
3
Affichages
146
Réponses
5
Affichages
675
Réponses
7
Affichages
304
Retour