EXCEL POUR LES NULL NE PAS AFFICHER LES ZEROS (BWZ BLANK WHEN ZERO)

tduq - 5 mars 2013 à 09:54
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 15 mars 2013 à 19:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/55014-excel-pour-les-null-ne-pas-afficher-les-zeros-bwz-blank-when-zero

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 mars 2013 à 19:35
Mes excuses, je n'ai pas lu en profondeur (3 coups de bâton)
JACK :
Pas peur : le problème énoncé n'est pas l'affichage de la valeur nulle ou "", mais son existence même, qui empêche l'objectif du graphique. Auquel s'ajoute une recherche de vitesse de calcul... Mes essais par cette fonctionnalité confirme que cela ne marche pas.

Merci quand même !

Par contre, j'ai réalisé un classeur qui mets en œuvre la solution que j'ai proposé, cela à l'air de bien marcher.
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 mars 2013 à 18:03
C'est pas pour vous faire peur, mais l'option "Afficher un zéro dans les cellules qui ont une valeur nulle" de Excel ne vous plait pas ?
Il y a même, dans les "formats de cellule", la possibilité de masquer les zéros, cellule par cellule.
Super, je comprends parfaitement le principe !
En fait, cela veut dire qu'il est peut-être plus efficace (=plus rapide) de d'abord faire et de charger tous les calculs dans un fichier .txt, puis de transférer l'ensemble dans la feuille excel, plutôt que de faire les calculs en en écrivant les résultats un à un directement dans la feuille Excel.
Dès que j'ai un moment, je fais un test !
Quel qu'en soit le résultat, j'aurai grâce à votre aide ouvert un nouvel horizon... mille mercis ne serait-ce que pour ça.
Cordialement
Bonjour,

Nos problématiques sont de manipuler beaucoup de lignes de fichiers textes.
Il faut selon les cas récupérer des infos sur ces lignes, sur toutes ou selon des critères. Des fois faire des totalisations de montant pour plusieurs lignes, comparer différentes zones de la ligne, etc...
Puis disposer de ces infos dans des fichiers Excel.

Perso, j'importais par macro le fichier texte et faisait calculer/écrire mes résultats au fur et à mesure dans les feuilles Excel par des calculs en VBA ou/et des écritures de formules.

J'ai appris à travailler à partir du fichier texte source, faire les calculs en VBA, écrire les résultats dans des fichiers textes, puis importer ces résultats dans Excel.
L’exécution est beaucoup plus rapide.

J'imagine le scénario suivant pour vous :
- exporter en txt la plage des données source de vos calculs (données en ligne pour travailler avec les fonctionnalités VBA de manipulation de texte - genre Open "données.txt" For Input As #1, Line Input #1, Ligne ... )
- ouvrir ce fichier et générer par les calculs en VBA les résultats, toujours en ligne
- importer ce fichier résultats.txt dans la plage Excel source du graphique.

Exemple simple : calculer le périmètre et la surface d'un rectangle
source excel : colonne A et B
10 5
15 12
7 8
exporter en texte données.txt, ouvrir avec "données.txt" for Input as #1
écrire dans le fichier txt Résultat les lignes
30 50
54 180
30 56
importer ce txt en colonnes C et D

Pas très simple peut-être à mettre en œuvre, mais le principe doit fonctionner.
Répond-t-il à la demande ? Peut-être...
A tester si c'est plus rapide et si j'ai compris ce que vous vouliez faire !

Cordialement
Frédéric
J'aurais besoin d'un peu plus d'explication... merci d'avance !
Bonsoir,

Je découvre votre fil et me permet de faire une remarque/suggestion.
J'avais l'habitude de programmer Excel en lui faisant écrire les résultats de mes calculs directement dans les cellules voulues (calculs réalisés en VBA et non par des formules). J'ai découvert dans mon nouveau travail le passage par la lecture /écriture dans des fichiers textes (.txt), qui sont ensuite importés dans une feuille Excel (à laquelle peut être associée un graphique, pourquoi pas). Lorsque le nombre de lignes a traiter est de plusieurs milliers, le gain de temps est remarquable !

Est-ce transposable à votre problématique ? Je ne sais pas, mais c'est peut-être une piste à creuser...

Frédéric
Merci encore pour votre intérêt... très bonne continuation !
BILLOTmi Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 25 octobre 2018
7 mars 2013 à 09:16
Bonjour, c'est un bel exemple de la puissance d'excel dont en général on n'utilise qu'une tres faible partie des possibilités.
Je constate que vous maitrisez pas mal le sujet, c'est déja tres bien d'avoir réussi à afficher le globe vu de la station spatiale.
Le seule optimisation supplémentaire que je vois c'est de ne pas charger les cellules par des formules excel mais de calculer la valeur des cellules avec VBA qui peut charger le resultat d'un calcul fusse t'il trigonométrique ou mettre une cellule a Blank.
Mais malgré cette optimisation, on sera tres loin des 25 images par seconde surtout qu'il faut ajouter le temps de calcul du graphique.
Meme les outils d'animation 3D n'y arrivent pas, ils calculent des images qui sont stockées pour etre ensuite affichées a la vitesse voulue.
Merci beaucoup pour cette prise en compte de ma question... même si vos conclusions sont identiques aux miennes.
J'ai effectivement essayé de limiter autant que possible les temps de calcul (via ScreenUpdating et Calculation), mais mon ambition sort sûrement un peu du domaine prévu d'Excel : je veux dessiner le globe terrestre (avec ses parallèles, ses méridiens, et surtout avec les continents principaux) comme en 3D, en précisant les coordonnées (latitude et longitude) du point que survolerait la station spatiale qui donnerait la même vue.
Cette première étape marche sans problème, elle fait appel à quelques belles formules trigonométriques qui permettent de passer de coordonnées sphériques (latitude et longitude) en coordonnées cartésiennes (l'abscisse et l'ordonnée dans le plan de l'écran, et la hauteur qui est soit positive quand le point dessiné est en avant plan de l'écran, il faut donc le dessiner, soit négative quand le point est en arrière plan, il ne faut pas le dessiner : d'où mon problème).
Cela se complique lorsque je souhaite faire défiler le globe. Dans ce cas, le calcul des formules et le rinçage des cellules correspondant aux points à effacer (près de 1000) prend de l'ordre d'une seconde, ce qui fait un défilement trop saccadé.
Mais bon, rien n'est vital...
Encore une fois, mille mercis pour l'intérêt que vous m'avez témoigné... j'en suis très touché.
Très bonne soirée...
BILLOTmi Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 25 octobre 2018
5 mars 2013 à 11:01
Effectivement c'est un probleme dont je n'est pas non plus trouvé la solution sans passer par une macro.

il faudrait pouvoir affecter a une cellule le type vbEmpty quand le résultat est nul,
mais Une cellule recevant le résultat d'une formule de calcul
prend toujours le type numérique ou alpha quelque soit le type de la valeur retournée

J'avais essayé de faire fonction qui retourne un résultat de type vbEmpty dans une cellule
D1=ZeroIsEmpty()

Public Function ZeroIsEmpty()
Dim w As Variant
Debug.Print "w type "; VarType(w)
ZeroIsEmpty = w
Debug.Print "ZeroIsEmpty type "; VarType(ZeroIsEmpty)
End Function

bien que la fonction retourne le type vbEmpty.
le résultat de l'affectation dans la cellule est quand meme un zéro de type numerique.

Donc pas d'autre solution que de faire une macro
qui examine les cellules une a une et fait un clearcontents quand c'est zéro
Si votre macro dure longtemps il faut peut etre l'optimiser
et bloquer l'affichage écran ainsi que les recalcul durant l'opération
Application.ScreenUpdating = False ' Pas de rafraichissement écran
Application.Calculation = xlCalculationManual ' Pas de recalcul automatique
...
...
Application.Calculation = xlCalculationAutomatic ' Recalcul automatique
Application.ScreenUpdating = True ' False ' Rafraichissement écran
Cette source me fait penser à un problème que je n'ai jamais réussi à résoudre sans passer par des macros.
Je souhaite tracer dans un graphique (en "nuage de points") une courbe éventuellement discontinue, en ne reliant que les valeurs positives d'un tableau. Or une formule est toujours considérée comme une donnée dans les graphiques.
Ainsi si j'ai une série de valeurs dans la colonne A et une série de formules dans la colonne B de type : =SI(A1>0;A1;0) ou =SI(A1>0;A1;""), chaque fois que la cellule de la colonne A sera négative ou nulle, la courbe, tracée à partir de la colonne B, descendra à zéro, sans "sauter" la valeur qui ne m'intéresse pas et que je voudrais occulter. Seule une cellule vide permet d'interrompre une courbe.
Il me manque donc une formule du type =SI(A1>0;A1;estvide) ! Ce que je contourne grâce à une macro qui efface les cellules négatives mais cela prend beaucoup de temps...
Merci à tous ceux qui pourront me proposer des idées... à bientôt !
Rejoignez-nous