ASSISTANT À L'ÉDITION DE FONCTIONS IMMEDIATE IF IMBRIQUÉES

Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 - 25 oct. 2004 à 13:08
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006 - 25 juil. 2006 à 04:05
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/27062-assistant-a-l-edition-de-fonctions-immediate-if-imbriquees

RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
25 juil. 2006 à 04:05
Voilà, j'ai ajouté un paramètre "écartement des contrôles", pour cela il fallait remplacer l'écartement fixé à 250 twips dans le code par une variable dont la valeur, toujours de 250 par défaut, peut être modifiée dans la fenêtre de configuration (de 0 à 9999 twips).

En ce qui concerne un affichage vertical de l'arborescence, je pense que le plus simple serait de créer un deuxième contrôle en le dessinant en fonction d'un affichage vertical, et de réutiliser tout le code du premier contrôle en inversant les traitements des coordonnées horizontales et verticales.

Pour ce qui est de la procédure "Reorganise", j'avais été rebuté par la complexité de l'algorithme à créer pour répartir les contrôles selon plusieurs axes de symétrie. Je n'avais trouvé aucun algorithme pouvant être adapté au cours de mes recherches et toutes les solutions que j'avais envisagées nécessitaient de monter et descendre plusieurs fois l'arborescence en retouchant les emplacements, ce qui n'était décidément pas trop propre.

Pour une utilisation réelle du programme le nombre de niveaux reste limité et le calage vers la gauche de la procédure "Arrange" ne présentait pas de réel inconvénient, j'ai donc laissé tomber malgré mon "souci du détail" ;o) et je suis passé à d'autres projets. Si le coeur t'en dit de reprendre cette source et même de la redéposer après modification, elle est là pour ça.

Il y avait un bug qui pouvait survenir lors du collage d'une grosse fonction dans la fenêtre de texte, à l'affichage de l'arborescence. En effet, l'appel de la fonction GetNewPos devait se faire par le contrôle principal sans quoi une partie de l'arborescence pouvait être négligée et certains contrôles superposés. Dans la procédure "CreateCtl", la fonction "GetNewPos" doit être appelée comme suit :
lngTestPos = MasterCtl.GetNewPos(.Niveau, .Id)

Je viens de me rappeler qu'il y avait des fautes de frappe dans une boîte de dialogue que j'ai oubliées de corriger avant de télécharger le zip. Tant pis, ça sera pour la prochaine fois. Bonne prog', je suis dispo pour de l'aide dans la mesure de mon temps libre.

Amicalement,
Rico
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
24 juil. 2006 à 18:11
Salut JCJ, mieux vaut tard que jamais. Je suis content d'apprendre qu'au moins une personne ait pu faire fonctionner le projet. Il y a très longtemps que je ne me suis plus penché sur ce code et je suis en train de me rafraîchir la mémoire.

A+
Rico
jcljay Messages postés 3 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 2 août 2006
24 juil. 2006 à 16:00
Hello, j'arrive après la bataille...
Bon, je suis parvenu à lancer l'appli (pas Appil), en suivant à la lettre les instructions du 'A lire.txt'.
J'ai recherché dans mes bases Access des IIF, j'ai pris le premier de niveau 5 (quand même) pour faire des tests. Tout semble fonctionner comme attendu.
Mais comme chacun a ses goûts, je voulais modifier l'écart entre les Box IIF et là, il faut rentrer dans le code de l'ocx... Malgré la clarté du code (bravo!), les passages de paramètres entre exe et ocx (et en récursif!) dépassent mon niveau
actuel en VB.
Donc je voulais suggérer les améliorations suivantes à ce source:
- pouvoir choisir l'espacement entre les box,
- pouvoir choisir entre une arboressance verticale ou horizontale,
- finir la procédure Réorganise (qui devrait remplacer/compléter Arrange).

Encore bravo pour ce code, je vais beaucoup apprendre gràce à lui et j'espère apporter moi-même les modifs suggérées.

A+ (c'est pas un nom de langage c'est pour dire à plus tard ;)
JCJ
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
2 nov. 2004 à 13:51
Merci Appil... Pourrais-tu me faire savoir si tu as réussi à lancer l'exécution, car pour l'instant je ne suis pas sûr que quiconque y soit arrivé...
cs_Appil Messages postés 208 Date d'inscription mercredi 10 avril 2002 Statut Membre Dernière intervention 11 juin 2014
2 nov. 2004 à 11:34
Iif est l'une de mes fonctions conditionnelles préférées, ta source est sûrement intéressante. D'après la capture, ça à l'air bien fait. Merci pour la source.

Bonne programmation
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
2 nov. 2004 à 01:16
Info : j'ai modifié la source pour qu'elle soit plus facile à mettre en oeuvre. Tout message concernant vos tentatives serait le bienvenu. Merci d'avoir affiché cette source.

RicoNuch
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
26 oct. 2004 à 17:56
Qu'est-ce que tu as comme erreur ?
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
26 oct. 2004 à 17:39
Tu as raison ;O) J'ai suivi tes instructions mais je n'arrive pas à lancer la source. Je teste encore...
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
26 oct. 2004 à 12:16
Ok, les mecs, on a compris : empiler les Iif, c'est pas bien, il faut plutôt faire comme ci ou comme ça etc... Ça serait vachement cool si les prochains commentaires portaient sur la source elle-même plutôt que la façon d'éviter de s'en servir.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
26 oct. 2004 à 11:54
Pour le SQL il y a une alternative : appeler une fonction VBA, cela permet même de deboguer pas à pas (mais c'est parfois très complexe)
Pour le VBA il y a aussi une alternative :
If Not Condition1 Then Goto Suite
If Not Condition2 Then Goto Suite
...
C'est beaucoup plus clair ainsi, car il suffit d'énumérer la liste des conditions à satisfaire.
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
25 oct. 2004 à 20:25
Bon ben je n'insiste pas... J'espère seulement que d'autres, qui en auront empilées au moins trois, verront cette source...
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
25 oct. 2004 à 17:27
En effet, ayant souvent travaillé dans des requêtes en Access, les IIF m'ont souvent bien aidé. Il est vrai que je les utilise encore en VB pour des requêtes Access mais je limite l'imbrication à 2.
RicoNuch Messages postés 140 Date d'inscription mercredi 18 juin 2003 Statut Membre Dernière intervention 16 décembre 2006
25 oct. 2004 à 14:45
D'accord avec toi, Neo.balastik, il est évident que dans VB une bonne série de If...ElseIf vaut bien mieux que des imbrications de Iif. Mais pour tenir dans une seule cellule d'Excel ou une seule requête d'Access, la fonction Iif est incontournable. Quant à la clarté du code, disons que dans mon éditeur l'imbrication des fonctions devient beaucoup plus évidente...
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
25 oct. 2004 à 13:08
Joli exercice de style, mais l'utilisation de IIF imbriqués est plus que déconseillé tant pour la clareté du code que pour les performances.
Je jetterai un oeil sur ta source histoire de voir comment tu as construit cela, mais je n'utiliserai jamais la structure du IIF imbriqué dans un projet VB. ILLISIBLE !
Rejoignez-nous