Une demande peut etre impossible a resoudre

Bonjour Eric

J'ai pu tester le code VB avec de vrais exemples d'analyses minéralogiques et il fonctionne à merveille, un immense MERCI à toi vraiment.

Je t'envoie le fichier excel avec quelques modifications s'il sont possibles à faire pour plus de commodité de son utilisation.... les paramètres "incertitudes sur la mesure", "seuil de la mesure" et "nombre de minéraux à afficher" peuvent être variables d'une analyses à l'autre et d'un minéral à l'autre. tout est bien noté dans le fichier excel pour mieux illustrer les modifications demandées.

Tout ça me donne une énorme envie d'apprendre à programmer sous excel, mais par quoi commencer ???

Bonne journée

Hassan

Bonjour,

(presque) tout est possible.

Par contre il faut que les critères soient posés clairement car avec le temps qui est passé ça risque de s'embrouiller dans ma tête avec les seuils, les tolérances, globaux ou par minéral ou par élément etc...

Toi avec ton expérience c'est instinctif, ça l'est moins pour moi. J'ai à peine dépassé le stade de la pyrite c'est l'or des fous

Pour l'instant tu arrives à être clair et détaillé, continue sans avoir peur d'en mettre trop

Serait-il possible de modifier les paramètres en rouge directement dans la feuille Excel au lieu de revenir dans le code VB?

1- On pourrait saisir par exemple un seul seuil à la cellule B2, ou mieux encore, un seuil propre à chaque élément aux cellules D4 à T4

2- modifier le nombre de minéraux à afficher (résultats de recherche) à la cellule B2 maintemant, le code affiche 5 minéraux alors qu'il y en as 7 (le code affiche 7 quand je modifie Dim resultd (1 to 7…..)….

3 - fixer l'incertitude sur la mesure par minéral : cellule C6 à C16

1) oui c'est possible. Je n'ai pas encore approfondi comment le greffer mais sans doute qu'il n'y aura pas de grande difficulté, même par éléments. J'y avais pensé un temps mais ne savais pas trop s'il fallait le faire figurer dans les analyses ou plus fixe dans BD-minéraux et ça me paraissait compliqué à expliquer.

On peut même prévoir un seuil par défaut en B2, et regarder par élément si on en trouve un spécifique en ligne 4.

Veux-tu profiter de l'occasion pour essayer de le faire toi même (en étant guidé éventuellement) ou préfères-tu avoirs une fonction complète le plus rapidement possible ?

Enfin je dis sans grande difficulté mais pour un débutant c'est quand même un peu chaud (euphémisme...) Tu dis

2) j'ai mis Dim result(1 To 10, 1 To 2) et les 7 éléments s'affichent bien. Je ne comprend pas ta difficulté ni ce que tu entends par : le code affiche 7 (?)

3) revenir aux fondamentaux :

=mineral($D$5:$T$5; D6:T6; C6)

avec 10% et non 10 en C6

2 bis) je rentre dans les détails en t'expliquant certaines choses sur les fonctions.

Une fonction est ré-évaluée automatiquement si un de ses paramètre change. Par contre si elle utilise une cellule qui ne lui est pas passée en paramètre il faut forcer le recalcul de la feuille avec Ctrl+Alt+F9 si les formules ont déjà été mises

Pour 'nombre de résultas par cellule' en B3 tu as donc 2 choix :

  • soit ajouter un paramètre à lui passer ce qui alourdi l'utilisation de la fonction.
  • soit qu'elle aille elle-même chercher la valeur mais si tu la changes faire Ctrl+Alt+F9
Pour le 2ème cas il faut déclarer un tableau sans dimension :
Dim result()

et déclarer ses dimensions plus loin avec un redim :

ReDim result(1 To [B3].Value, 1 To 2)

Si tu fais le 1er choix remplacer [B3].Value par le nom du paramètre que tu auras ajouté en sachant que si tu le veux obligatoire il faut qu'il soit devant le (les) paramètres optionnels.

Si tu fais les modifs toi même pour te lancer n'oublie pas de déposer un nouveau fichier à chaque fois pour ne pas les perdre.

Et comme je t'ai dit si tu préfères que je fasse je peux

eric

Youhouuuuu, je me lance, mais j'ai peur que la chute soit douloureuse et revenir vers toi demandant de l'aide

Merci pour tout le temps que tu as pris pour ces explications. Je vais essayer le soir chez moi et te revenir...

Merciiiii

Hassan

Fais déjà le 2)

Le principe quand on code c'est de tout déboguer au fur et à mesure.

Seulement après on continue, sinon on se retrouve avec un truc indémerdable tellement il y a d'erreurs et le plus simple est de tout jeter.

En résumé : on met un Stop ou un break et on fait un pas à pas avec F8 en contrôlant le contenu de ses variables importantes en amenant le curseur dessus ou en faisant glisser une expression (ou une partie) dans la fenêtre Espion.

Ensuite si tu veux t'attaque au 1) regarde comment j'utilise le paramètre 'elements'

Je reçois une plage de 1 ligne, plusieurs colonnes que je met dans tableau avec ele = elements.Value

Si j'ai besoin du ième nom j'utilise ele(1, i) (ele(ligne,colonne) )

Maintenant on peut imaginer que tu passes en paramètre une plage de 2 lignes, x colonnes, au hasard D4:T5.

Cette fois le nom de l'élément sera en ligne 2 donc il faudra remplacer les ele(1,i) par ele(2,i)

Et si tu as besoin du seuil associé à cet élément tu l'auras dans ele(1,i)

tester s'il est >0 , si oui l'utiliser, si non utiliser le seuil par défaut défini en B2

Agir sur cette ligne :

If mes(1, i) > valMini Then ok = False

ou valMini doit être remplacé par ces nouveaux seuils

Et une bonne habitude à prendre : sauvegarder à chaque nouvelle avancée validée en numérotant la version v1.1, v1.2, ...

Bon courage et n'oublie pas F1 pour l'aide sur les fonctions

PS : dans le menu de ce site en haut tu as un 'cours VBA' pour le B.A.BA.

Et si tu approfondis VBA il faudra que tu te penches sur les variables (typage, portée, durée de vie, visibilité,...)

VBA et les variables (mDF) : http://www.mdf-xlpages.com/modules/smartsection/item.php?itemid=51

Il vaut mieux déclarer toutes ses variables et les typer en limitant l'usage de As Variant que quand tu n'as pas le choix.

Ca aide fortement à déboguer, les erreurs de saisies très difficiles à trouver génère tout de suite une erreur.

Dans 'Outils / Oprions / Editeur' cocher 'Déclaration des variables obligatoires'

Bonjour Eric

Merci pour ton aide et tout le temps que tu as pris pour tout écrire et m'expliquer.

J'ai pu réussir à réaliser les point 2 et 3 :

2- modifier le nombre de minéraux à afficher (résultats de recherche) à la cellule B2 
3 - fixer l'incertitude sur la mesure par minéral : cellule C6 à C16

Par contre le point 1 :

1- saisir un seul seuil à la cellule B2, ou mieux encore, un seuil propre à chaque élément aux cellules D4 à T4

Je n'ai vraiment pas réussi à le faire, je n'ai pas compris tes instructions.

Ton idée de fixer un seuil par défaut à la cellule B2, et regarder par élément si on en trouve un spécifique en ligne 4 EST VRAIMENT GENIAL je demande donc ton aide...

Merciiiii

Bonjour,

Si tu veux bien je reformule qu'on soit bien d'accord sur le fonctionnement de cette partie :

SI (élément > B) ET (mesure > 0) ET (qté élément indiqué dans BD-minéraux = 0)
     SI  "seuil indiqué au-dessus du nom de l'élément"  > 0 ALORS 
            valeur de la mesure > "seuil indiqué au-dessus du nom de l'élément" pour exclure le minéral
     SINON  valeur de la mesure > "seuil global en B2" pour exclure le minéral
SINON on continue les contrôles

J'espère qu'il n'y a pas eu d'incompréhension de ma part...

Ton seuil indiqué au-dessus de H ne sera donc pas pris en compte car H <= B

Si tu désires les réintégrer ces éléments il faudra agir sur

If colEle(i) > 10 Then    ' élimination de H, He, Li, Be et B

Fait mais pas eu le courage de tester le bon fonctionnement dans les différents cas

Ajouté 2 trucs dans le module de Analyse microscopique

- si tu modifies B2 ou B3 : recalcul de la colonne B et ajustement auto des hauteurs de lignes

(comme ça on compense le non passage de ces paramètres à la fonction sans pour autant la rendre volatile)

- ajustement auto des hauteurs de lignes également sur la simple sélection de B3 (si tu tires ta formule vers le bas ou autres modifs qui risque de changer le nombre de minéraux détectés)

eric

PS : j'ai encadré les modifs par ' **** 25/11/16 **** et ' ************** que tu les voies, à supprimer ensuite

ça y est, on y est! mission accomplie

On dirait que tu as lu dans mes pensées... je cherchais comment redimensionner la taille des cellules en fonction du nombre de minéraux trouvés, j'ai trouvé quelques réponses 'Autofit" mais je n'ai pas su comment l'intégrer dans le code VBA. Je viens de découvrir ton code et j'ai vu que tu y as pensé, C'EST GENIALLLLL.

Merci beaucoup Eric, je vais maintenant profiter pleinement de mon petit code. Je vais encore bien l'utiliser aux cas ou d'autres choses apparaissent

MERCIIIIIIIIIIIIIIII Enormément et je ne sais vraiment pas comment te remercier.

Hassan

Ben de rien.

Ta satisfaction me suffit.

Et puis c'était intéressant, et tu as eu ta part dans la réussite en sachant exprimer clairement ton besoin et préparant un fichier en situation à chaque avancée.

C'est rare et ça fait plaisir, donc merci à toi aussi

Et bonne découverte du vba

Oui, Je vais vraiment m'y mettre en temps libre en soirée (après avoir couché les deux garçons )

J'ai trouvé que le cours VBA de ce site pas intéressant, et je vais m'acheter quelques livres pour débutants.

MERCI encore Eric.

Rechercher des sujets similaires à "demande etre impossible resoudre"