IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Débutant en programmation bloqué dans mon code


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Débutant en programmation bloqué dans mon code
    Bonjour,
    J'ai pour projet personnel de faire un lanceur de programme sous WinDev 21, mais je suis actuellement bloqué à une certaine partie depuis maintenant plusieurs jours. Je précise que je suis très débutant en WinDev et en programmation en général.
    Merci d'avance à tous ceux qui m'aiguilleront vers la solution.

    Le problème auquel je fais face concerne la temporisation à la fin de mon code et la saisie de l'intervalle au début.
    Mon but est que lors de la saisie de l'intervalle par l'utilisateur en format HHMMSS, si il rentre par exemple "000003" la temporisation sera de 3 seconde avant la réexécution du Shell exécute puis de la temporisation à nouveau et ainsi de suite indéfiniment, si il rentre "001232" la temporisation sera de 12 minutes et 32 secondes, si il rentre "012312" la temporisation sera de 1 heures 23 minutes et 12 secondes.

    Cependant, lorsque j'entre dans la saisie de l'intervalle "000003" le Shell exécute ne se fait pas toutes les 3 secondes mais par défaut environ toutes les 8 secondes et je ne comprends pas pourquoi.

    Voici mon code qui se trouve dans un bouton sous WinDev 21 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    sRépertoire est une chaîne
    sRépertoire = fSélecteur("Ce PC", "", "", ".")
     
    LIB_cheminfichier =  sRépertoire
    SI sRépertoire <> "" ALORS
    	LIB_cheminfichier =  sRépertoire
    SINON
    	LIB_cheminfichier = "Aucun fichier"
    FIN
     
    dAtedepart est une Date = Saisie("Veuillez sélectionner la date de départ", dAtedepart)
    hEuredepart est une Heure = Saisie("Veuillez sélectionner l'heure de départ", hEuredepart)
    nIntervalle est une chaîne = Saisie("Veuillez saisir l'intervalle sous forme  : HHMMSS", nIntervalle)
    DateHeureDepart est une DateHeure
     
    SI dAtedepart = Null ET hEuredepart = Null ALORS
    	DateHeureDepart = DateHeureSys()
    SINON SI dAtedepart = Null ALORS
    	dAtedepart = DateSys()
    FIN
     
    TANTQUE 2>1
             tempsattente est un entier = 0
    	SI Taille(nIntervalle) = 6 ALORS
    		nIntervalle = Gauche(nIntervalle, 2) + ":" + Milieu(nIntervalle, 3, 4) + ":" + Droite(nIntervalle, 2)
    	FIN
     
    	SI Val(Gauche(nIntervalle, 2)) > 0 ALORS
    		tempsattente += Val(Gauche(nIntervalle, 2)) * 3600 // heures --> secondes
    	FIN
     
    	SI Val(Milieu(nIntervalle, 3, 4)) > 0 ALORS
    		tempsattente += Val(Milieu(nIntervalle, 3, 4)) * 60 // minutes --> secondes
    	FIN
     
    	SI Val(Droite(nIntervalle, 2)) > 0 ALORS 
    		tempsattente += Val(Droite(nIntervalle, 2)) // secondes
    	FIN
     
    	SI Val(nIntervalle) < 1000 ALORS
    		tempsattente = Val(nIntervalle)
    	SINON
    		tempsattente = Val(nIntervalle) / 1000
    	FIN
            tempsattente = tempsattente * 1000 // secondes --> millisecondes
     
            ShellExecute(sRépertoire)
            Temporisation(tempsattente)
    FIN

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 207
    Points : 9 208
    Points
    9 208
    Par défaut
    Bonjour,

    Tout le monde a été débutant un jour...

    Utilise les balises CODE pour plus de lisibilité (bouton #).

    Ta variable nIntervalle est une chaine et tu la préfixes "n" qui correspond plutôt à un numérique (entier). Il vaut mieux utiliser un préfixe s (string) ou chn. Ca n'empêche pas le code de fonctionner mais ça évite des erreurs...

    Ta boucle TANTQUE 2>1 est assez déroutante dans le sens, ou elle est inutile (2 sera toujours supérieur à 1)

    Pour répondre à ta question, il vaut mieux utiliser la fonction TimerSys() pour lancer ton code.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 813
    Points : 5 273
    Points
    5 273
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    J'ajouterai six choses à la remarque de frenchsting.
    1-Outre le balisage, le préfixage, le fait de mettre tes déclarations en plein milieu de code fait brouillon, le code n'a pas été pensé et ne facilite pas la lisibilité.
    2-Ne prend pas la mauvaise habitude de coder à même le bouton, c'est intestable. Le bouton est là pour appeler une fonction/Procédure, ou pour 2 ou 3 lignes de code.
    3-Pourquoi ne pas utiliser une variable durée pour ton intervalle ?
    4-Saisie renvoie 0 ou 1 et tu affectes cette valeur à la variable qui reçoit ce résultat
    5-L'utilisation de Null est ardue pour un débutant et encore plus en WLangage qu'ailleurs. En règle générale, Null signifie non affecté ou inconnu. Tu compares un dateheure ou un date avec Null, hors lorsque tu déclares un date, un dateheure ou un heure, la variable est initialisée avec la valeur système correspondante donc ne sera jamais Null. Donc dans tous les cas de figure, DateHeureDepart sera toujours DateheureSys, en effet, tu ne l'affectes jamais. D'ailleurs, tu ne l'utilises pas non plus à part dans ta comparaison avec Null
    Il est préférable d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    dDébut est une Date
    hDebut est une Heure
    duIntervalle est une durée
    dhDébut est dateheure
     
    //Saisie des données
    Saisie("Saisissez la date de début", dDébut)
    Saisie("Saisissez l'heure de début", hDébut)
    Saisie("Saisissez la durée", duIntervalle)
    //Affectation
    dhDébut..PartieDate=dDébut
    dhDébut..PartieHeure=hDébut
     
    BOUCLE
         LanceAppliAssociée(saRépertoire)
         Temporisation(duIntervalle..EnSeconde*100,tempoSourisEtClavier) //Autre syntaxe : Temporisation(duIntervalle,tempoSourisEtClavier)
    FIN
    6-Au niveau de l'utilisateur, faire 3 validations, n'est pas agréable. Pourquoi ne pas créer une fenêtre de saisie avec les champ adéquates (comme Sheila.)

    Comme le faisais remarquer frenchsting, TANTQUE 2>1 va boucler indéfiniment, si c'est le résultat souhaité, pourquoi ne pas utiliser BOUCLE qui serait moins déroutant. Il faut toutefois se donner (dans les 2 cas) la possibilité de sortir. Quelle que soit la méthode, ta boucle devient bloquante, i.e. tant qu'elle tourne tu ne pourra plus utiliser ta fenêtre. Pour éviter ce problème, il faut lancer la boucle dans un thread secondaire. Un sujet similaire a été traité ici

    En ce qui concerne la durée, l'appli que tu lances dure peut être 5 sec. Il faudrait utiliser l'outil d'audit statique
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Bonjour, tout d'abord, merci Voroltinquo et frenchsting pour vos réponses, je les ai pris en compte.

    Cependant Voroltinquo, il y a un point que je n'ai pas compris "4 - Saisie renvoie 0 ou 1 et tu affectes cette valeur à la variable qui reçoit ce résultat".

  5. #5
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526
    Par défaut
    Citation Envoyé par Smerlee Voir le message

    Cependant Voroltinquo, il y a un point que je n'ai pas compris "4 - Saisie renvoie 0 ou 1 et tu affectes cette valeur à la variable qui reçoit ce résultat".
    Bonjour Smerlee,

    Entre nous, je pense que tu devrais commencer par le commencement :
    Un petit (voir grand) tour par le cours d'autoformation.
    J'ai du mal à comprendre ces jeunes qui se lancent au volant d'une F1 sans avoir le permis.

    Ceci dit en toute cordialité.
    Bien entendu, tu peux toujours persister dans cette voie, il y aura toujours quelqu'un ici, pour faire ton travail.
    Mais ceux qui te filent du poisson te file, en fait, du poison.

    A bon entendeur...

  6. #6
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 813
    Points : 5 273
    Points
    5 273
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Smerlee Voir le message
    Cependant Voroltinquo, il y a un point que je n'ai pas compris "4 - Saisie renvoie 0 ou 1 et tu affectes cette valeur à la variable qui reçoit ce résultat".
    Je cite une partie la doc de "Saisie"
    <Résultat> : Entier
    Identifie la réponse sélectionnée par l'utilisateur :
    0 : l'utilisateur a cliqué sur le bouton "Annuler".
    1 : l'utilisateur a cliqué sur le bouton "OK".
    Tu as des lignes du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaVar=Saisie("Saisissez Mavar",MaVar)
    Si tu appuies sur "Annuler" MaVar vaudra "0" (resp. 0) et "1" (resp 1) si tu appuies sur "OK"
    Tu peux facilement vérifier ça avec le mode pas à pas

    Citation Envoyé par serendib Voir le message
    Entre nous, je pense que tu devrais commencer par le commencement :
    Un petit (voir grand) tour par le cours d'autoformation.
    Sans oublier de consulter la doc. La mienne (celle de WD 10) est passée chez le relieur plusieurs fois et est couverte d'annotations (c'est pour ça que j'utilise toujours celle de WD 10.)
    Dans ton cas tu utilise des variable liées au temps. Il y a un chapitre qui leur est consacrées, avec en autre les fonctions et propriétés de ce type de variable.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Ah d'accord, merci je comprends mieux.
    Citation Envoyé par Voroltinquo Voir le message
    Je cite une partie la doc de "Saisie"

    Tu as des lignes du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaVar=Saisie("Saisissez Mavar",MaVar)
    Si tu appuies sur "Annuler" MaVar vaudra "0" (resp. 0) et "1" (resp 1) si tu appuies sur "OK"
    Tu peux facilement vérifier ça avec le mode pas à pas


    Sans oublier de consulter la doc. La mienne (celle de WD 10) est passée chez le relieur plusieurs fois et est couverte d'annotations (c'est pour ça que j'utilise toujours celle de WD 10.)
    Dans ton cas tu utilise des variable liées au temps. Il y a un chapitre qui leur est consacrées, avec en autre les fonctions et propriétés de ce type de variable.

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 066
    Points : 9 417
    Points
    9 417
    Par défaut
    Tu as une boucle TANTQUE 2>1 ... FIN
    Je ne vais pas te le reprocher, c'est quelque chose que je fais (régulièrement).

    Normalement, tu devrais avoir :
    Etape 1 saisie des paramètres, controle de validité , etc.
    A la fin de cette étape 1, ta variable tempsattente devrait être connue, et figée. On n'y touche plus.
    Et après cette étape 1, tu devrais avoir ta boucle TANTQUE 2>1 ou quelque chose plus propre.

    Donc toutes les instructions qui servent à calculer tempsattente, elles devraient être avant la ligne 'TANTQUE 2>1'.

    Et toutes ces instructions, j'ai l'impression qu'elles peuvent être remplacées par une seule instruction, parce que Windev est un outil qui te mâche le travail à l'extrême. Quand tu as une variable de type durée, Windev sait que "011000", c'est 1 heure 10 minutes, et c'est 4200 secondes. Il n'y a donc rien à faire pour convertir "011000" en 4200, il suffit de travailler avec une variable de type durée.

    3ème point : ShellExecute (ou LanceAppliAssociee en français), c'est généralement utilisé pour ouvrir un fichier : on sélectionne un fichier XLS, et LanceAppliAssociée détecte qu'il faut lancer Excel, et ouvrir ce fichier. (Comme le double-clic dans l'explorateur de fichier). Si tu sais que le fichier à lancer est un exécutable, c'est plus propre d'utiliser LanceAppli() au lieu de LanceAppliAssociee(). Et dans ce cas, tu peux spécifier un paramètre : Lancer l'appli, et attendre qu'elle se termine (et on ne sait pas combien de temps attendre ... peut-être plus de 3 secondes), ou alors Lancer l'appli (en tache parallèle en quelque sorte), et reprendre la main instantanément... pour lancer un chronomètre qui va temporiser pendant 3 secondes.

    4ème point : Serendib a totalement raison : il faut lire l'autoformation, faire les différents exercices, passer quelques jours à se former, avant de se lancer dans un mini travail personnel.
    Voici un lien intéressant.

    J'ajoute un point : l'aide en ligne de Windev est vraiment très bien faite. C'est l'atout majeur de Windev, surtout pour un francophone. Quand tu utilises une fonction (la fonction saisie par exemple), il faut absolument aller voir l'aide, pour comprendre le fonctionnement de cette fonction. Et il faut lire la page entière, même si on est persuadé de comprendre tout tout de suite. Ca prend 30 secondes ou 1 minute, et ça permet souvent d'économiser une heure voire beaucoup plus. Et il ne faut pas hésiter à regarder les 'Voir Aussi', ça présente d'autres outils qui peuvent être plus adaptés que la page que tu es en train de regarder. Pendant des années, j'étais déjà un développeur très confirmé, mais je prenais au moins une heure par semaine à naviguer au hasard dans les pages d'aide de Windev, juste pour consolider mes connaissances, sans but précis.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

Discussions similaires

  1. [Débutant] Problème dans mon code
    Par Mainopposee dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2009, 21h07
  2. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  3. Réponses: 4
    Dernier message: 10/08/2006, 13h44
  4. [VBA][Débutant][export]erreurs dans mon code?
    Par Christophe93250 dans le forum Access
    Réponses: 4
    Dernier message: 06/01/2006, 19h52
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo