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 :

POO en WinDev (Récupération des données dynamiquement) [WD25]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2022
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 16
    Points : 15
    Points
    15
    Par défaut POO en WinDev (Récupération des données dynamiquement)
    Bonjour les amis .

    Je suis en train d'implémenter une classe Model pour me permettre de faire les opérations
    de CRUD sans avoir à recoder les procédures.

    Cette classe Model va déjà implémenter toutes ces opérations (CRUD).

    De ce fait, à chaque fois que j'ai besoin de ces opérations (CRUD) dans une des classes de mon projet,
    je vais tout simplement hérité de la classe Model et le tour est joué.


    1. Implémentation de la classe ModelAbstrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ModelAbstrait est une Classe
     
    FIN
     
    PROCÉDURE Constructeur()
     
     
    PROCÉDURE Destructeur()
     
     
    PROCÉDURE ABSTRAITE liste()

    2. Implémentation de la classe ModelCollection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ModelCollection est une Classe
    	hérite de ModelAbstrait
     
    	m_tabListeModelDynamique est un tableau de objet  dynamique
     
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE Constructeur()
     
     
    PROCÉDURE Destructeur()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCÉDURE ajouterModel(pclUnModel est un objet dynamique)
    m_tabListeModelDynamique.Ajoute(pclUnModel)
     
     
    // Redéfinition de la méthode ModelAbstrait.liste
    PROCÉDURE  liste()
    RENVOYER m_tabListeModelDynamique

    3. Implémentation de la classe Model


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Model est une Classe
     
    m_clUnModelCollection est un  ModelCollection 
     
    GLOBAL PRIVÉ CONSTANT
    	g_tLstModel		est un tableau de objet dynamique		
    	g_nHVersion			est un entier
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE Constructeur()
     
     
    PROCÉDURE Destructeur()

    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
    PROCÉDURE liste()
     
    // renvoie un tableau (tous les enregistrements ) de type classe de l'objet en cours
    LOCAL
    	nHVersion			est un entier
    	def					est une Définition	= RécupèreDéfinition(objet)	// Récupération de la définition de l'objet en cours
    	sNomClasse			est une chaîne		= def.Nom					// Récupération du nom de la classe de l'objet en cours
    	sNomfichier			est une chaîne		= Droite(sNomClasse, Taille(sNomClasse) - 1)
     
    nHVersion	= HVersion({sNomfichier, indFichier})
     
    SI PAS nHVersion > ::g_nHVersion ALORS RENVOYER ::g_tLstModel
     
    ::g_nHVersion	= nHVersion
    TableauSupprimeTout(::g_tLstModel)
     
    // création du tableau de type de la classe de l'objet appelant
    CodeAExecuter	est une chaîne		= [
         tabListe_ est une tableau de %1
         RENVOYER tabListe_
    ]
     
    CodeAExecuter = ChaîneConstruit(CodeAExecuter,def.Nom)
    ::g_tLstModel	<- ExécuteCode(CodeAExecuter)
     
    // on remplit le tableau crée par des enregistrements de la table correspondante à la classe de l'objet appelant
    FichierVersTableau(::g_tLstModel,{sNomfichier, indFichier})
     
    RENVOYER ::g_tLstModel

    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
    // Crée le nouveau objet ou modifie objet existant de la base de données
    PROCÉDURE actualiser()
    def			est une Définition	= RécupèreDéfinition(objet)
    sNomClasse	est une chaîne		= def.Nom
    sNomfichier	est une chaîne		= Droite(sNomClasse, Taille(sNomClasse) - 1)
     
    HLitRecherchePremier({sNomfichier, indFichier}, "ID" + sNomfichier, {objet,def..Variable[1]})
    SI HTrouve({sNomfichier, indFichier}) ALORS
    	MémoireVersFichier(objet,{sNomfichier, indFichier})
    	SI HModifie({sNomfichier, indFichier}) = Faux ALORS
    		ErreurDéclenche(3,"Problème" + RC + HErreurInfo())
    		RENVOYER Faux
    	FIN
    	ToastAffiche("Modification effectuée avec succès.")
    SINON
    	HRAZ({sNomfichier, indFichier})
    	MémoireVersFichier(objet,{sNomfichier, indFichier})
    	SI HAjoute({sNomfichier, indFichier}) = Faux ALORS
    		ErreurDéclenche(3,"Problème" + RC + HErreurInfo())
    		RENVOYER Faux
    	FIN
    	ToastAffiche("Création effectuée avec succès.")
    FIN
    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
    // supprime l'objet en cours de la base de données
    PROCÉDURE supprimer()
    def			est une Définition	= RécupèreDéfinition(objet)
    sNomClasse	est une chaîne		= def.Nom
    sNomfichier	est une chaîne		= Droite(sNomClasse, Taille(sNomClasse) - 1)
     
    HLitRecherchePremier({sNomfichier, indFichier}, "ID" + sNomfichier, {objet,def..Variable[1]})
     
    SI HTrouve({sNomfichier, indFichier}) = Vrai ALORS
    	SI HSupprime({sNomfichier, indFichier})=Faux ALORS
    		SI HErreurIntégrité()=Vrai ALORS
    			TitreSuivant("Suppression interdite")
    			Erreur("Suppression interdite suite à une violation d'intégrité.")
    			RENVOYER Faux
    		SINON
    			TitreSuivant("Suppression interdite")
    			Erreur("Suppression interdite suite à une autre cause que l'intégrité.")
    			RENVOYER Faux
    		FIN
    	SINON
    		TitreSuivant("Suppression réussie")
    		Info("Suppression effectuée avec succès.")
    		RENVOYER Vrai
    	FIN
    SINON
    	TitreSuivant("Information non trouvée")
    	Erreur("L'information n'est pas dans la base des données.")
    	RENVOYER Faux
    FIN


    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
    PROCÉDURE listeCritereWhere(sRubrique est une chaîne, vValeur est un Variant, sCondition est une chaîne = "=" )
    // renvoie un tableau (tous les enregistrements ) de type classe de l'objet en cours
    LOCAL
    	def					est une Définition	= RécupèreDéfinition(objet)	// Récupération de la définition de l'objet en cours
    	sNomClasse			est une chaîne		= def.Nom					// Récupération du nom de la classe de l'objet en cours
    	sNomfichier			est une chaîne		= Droite(sNomClasse, Taille(sNomClasse) - 1)
     
    // création du tableau de type de la classe de l'objet appelant
     
    CodeAExecuter	est une chaîne		= [
         tabListe_ est une tableau de %1
         RENVOYER tabListe_
    ]
     
    CodeAExecuter = ChaîneConstruit(CodeAExecuter,sNomClasse)
     
    m_clUnModelCollection.m_tabListeModelDynamique	<- ExécuteCode(CodeAExecuter)   // Transfert la reférence au tableau
     
    sMarequete est une chaîne = [
    SELECT * FROM %1 
    WHERE %2 %4 '%3'
    ]
     
    sMarequete2 est une chaîne = [
    SELECT * FROM %1 
    WHERE %2 %4 '%3'
    ]
    sMarequete2 = ChaîneConstruit(sMarequete2, {sNomfichier, indFichier},sRubrique,vValeur, sCondition)
     
    sMarequete = ChaîneConstruit(sMarequete, {sNomfichier, indFichier},sRubrique,vValeur, sCondition)
     
    sdMonResultat est une Source de Données
     
    HExécuteRequêteSQL(sdMonResultat,sMarequete)
     
    FichierVersTableau(m_clUnModelCollection.m_tabListeModelDynamique,sdMonResultat)
     
    RENVOYER m_clUnModelCollection

    4. UTILISATION


    j'ai la classe Cours par exemple.


    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
    Mcours est une Classe <MAPPING=cours>
    hérite de Model
     
    	// Le code se trouvant entre <MAPPING> et <FIN> est généré automatiquement.
    	// Il sera effacé et recréé entièrement à chaque génération depuis le menu contextuel
    	// du fichier dans l'explorateur de projet "..Regénérer la classe modèle".
    	<MAPPING>
    	m_nIDcours		est un entier sur 8 octets	<MAPPING=IDcours, clé unique>
    	m_sTitre		est une chaîne ANSI			<MAPPING=titre>
    	m_sProfesseur	est une chaîne ANSI			<MAPPING=professeur>
    	<FIN>
     
    FIN
     
    PROCÉDURE Constructeur()
    PROCÉDURE Destructeur()

    LE CODE QUI AFFICHE LA LISTE DES COURS


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gtabLesTitresDesCours est un tableau de Mcours
    clGclUnTitreCours  est un Mcours
     
     
    // j'ai tous les enregistrements du fichier Cours
    gtabLesTitresDesCours = clGclUnTitreCours:liste()   
     
     
    // j'ai les enregistrements du fichier Cours répondant aux critères
    gtabLesTitresDesCours = clGclUnTitreCours:listeCritereWhere("IDcours", "4", "=").liste()

    NB. ces deux lignes de code au dessus fonctionnent parfaitement



    // Mon souci est d'enchainer les critères de séléction comme sur le code qui suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gtabLesTitresDesCours = clGclUnTitreCours:listeCritereWhere("IDcours", "4", ">")...
    .listeCritereWhere("Titre", "Math", "=").liste()

    je veux avoir quelque chose de pareil comme on le fait en Eloquent de Laravel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $employes = Employe::where('Est_Actif', 1)->whereNotIn('id', [10,12,20])->get();
    Donc on enchaine les méthodes where et whereNotIn

  2. #2
    Membre éclairé
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 253
    Points : 668
    Points
    668
    Par défaut
    La méthode listeCritereWhere de Model renvoie un ModelCollection.

    Si vous souhaitez enchainer les listeCritereWhere, ne faudrait-il pas que cette méthode renvoi un Model ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2022
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Bonjour les amis , j'ai supprimé certaines méthodes qui ne concernent pas mon problème.

    Je suis en train d'implémenter une classe Model pour me permettre de faire les opérations
    de CRUD sans avoir à recoder les procédures.

    Cette classe Model va déjà implémenter toutes ces opérations (CRUD).

    De ce fait, à chaque fois que j'ai besoin de ces opérations (CRUD) dans une des classes de mon projet,
    je vais tout simplement hérité de la classe Model et le tour est joué.


    1. Implémentation de la classe ModelAbstrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ModelAbstrait est une Classe
     
    FIN
     
    PROCÉDURE Constructeur()
     
     
    PROCÉDURE Destructeur()
     
     
    PROCÉDURE ABSTRAITE liste()

    2. Implémentation de la classe ModelCollection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ModelCollection est une Classe
    	hérite de ModelAbstrait
     
    	m_tabListeModelDynamique est un tableau de objet  dynamique
     
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE Constructeur()
     
     
    PROCÉDURE Destructeur()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROCÉDURE ajouterModel(pclUnModel est un objet dynamique)
    m_tabListeModelDynamique.Ajoute(pclUnModel)
     
     
    // Redéfinition de la méthode ModelAbstrait.liste
    PROCÉDURE  liste()
    RENVOYER m_tabListeModelDynamique

    3. Implémentation de la classe Model


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Model est une Classe
     
    m_clUnModelCollection est un  ModelCollection 
     
    GLOBAL PRIVÉ CONSTANT
    	g_tLstModel		est un tableau de objet dynamique		
    	g_nHVersion			est un entier
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE Constructeur()
     
     
    PROCÉDURE Destructeur()

    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
    PROCÉDURE liste()
     
    // renvoie un tableau (tous les enregistrements ) de type classe de l'objet en cours
    LOCAL
    	nHVersion			est un entier
    	def					est une Définition	= RécupèreDéfinition(objet)	// Récupération de la définition de l'objet en cours
    	sNomClasse			est une chaîne		= def.Nom					// Récupération du nom de la classe de l'objet en cours
    	sNomfichier			est une chaîne		= Droite(sNomClasse, Taille(sNomClasse) - 1)
     
    nHVersion	= HVersion({sNomfichier, indFichier})
     
    SI PAS nHVersion > ::g_nHVersion ALORS RENVOYER ::g_tLstModel
     
    ::g_nHVersion	= nHVersion
    TableauSupprimeTout(::g_tLstModel)
     
    // création du tableau de type de la classe de l'objet appelant
    CodeAExecuter	est une chaîne		= [
         tabListe_ est une tableau de %1
         RENVOYER tabListe_
    ]
     
    CodeAExecuter = ChaîneConstruit(CodeAExecuter,def.Nom)
    ::g_tLstModel	<- ExécuteCode(CodeAExecuter)
     
    // on remplit le tableau crée par des enregistrements de la table correspondante à la classe de l'objet appelant
    FichierVersTableau(::g_tLstModel,{sNomfichier, indFichier})
     
    RENVOYER ::g_tLstModel





    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
    PROCÉDURE listeCritereWhere(sRubrique est une chaîne, vValeur est un Variant, sCondition est une chaîne = "=" )
    // renvoie un tableau (tous les enregistrements ) de type classe de l'objet en cours
    LOCAL
    	def					est une Définition	= RécupèreDéfinition(objet)	// Récupération de la définition de l'objet en cours
    	sNomClasse			est une chaîne		= def.Nom					// Récupération du nom de la classe de l'objet en cours
    	sNomfichier			est une chaîne		= Droite(sNomClasse, Taille(sNomClasse) - 1)
     
    // création du tableau de type de la classe de l'objet appelant
     
    CodeAExecuter	est une chaîne		= [
         tabListe_ est une tableau de %1
         RENVOYER tabListe_
    ]
     
    CodeAExecuter = ChaîneConstruit(CodeAExecuter,sNomClasse)
     
    m_clUnModelCollection.m_tabListeModelDynamique	<- ExécuteCode(CodeAExecuter)   // Transfert la reférence au tableau
     
    sMarequete est une chaîne = [
    SELECT * FROM %1 
    WHERE %2 %4 '%3'
    ]
     
    sMarequete2 est une chaîne = [
    SELECT * FROM %1 
    WHERE %2 %4 '%3'
    ]
    sMarequete2 = ChaîneConstruit(sMarequete2, {sNomfichier, indFichier},sRubrique,vValeur, sCondition)
     
    sMarequete = ChaîneConstruit(sMarequete, {sNomfichier, indFichier},sRubrique,vValeur, sCondition)
     
    sdMonResultat est une Source de Données
     
    HExécuteRequêteSQL(sdMonResultat,sMarequete)
     
    FichierVersTableau(m_clUnModelCollection.m_tabListeModelDynamique,sdMonResultat)
     
    RENVOYER m_clUnModelCollection

    4. UTILISATION


    j'ai la classe Cours par exemple.


    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
    Mcours est une Classe <MAPPING=cours>
    hérite de Model
     
    	// Le code se trouvant entre <MAPPING> et <FIN> est généré automatiquement.
    	// Il sera effacé et recréé entièrement à chaque génération depuis le menu contextuel
    	// du fichier dans l'explorateur de projet "..Regénérer la classe modèle".
    	<MAPPING>
    	m_nIDcours		est un entier sur 8 octets	<MAPPING=IDcours, clé unique>
    	m_sTitre		est une chaîne ANSI			<MAPPING=titre>
    	m_sProfesseur	est une chaîne ANSI			<MAPPING=professeur>
    	<FIN>
     
    FIN
     
    PROCÉDURE Constructeur()
    PROCÉDURE Destructeur()

    LE CODE QUI AFFICHE LA LISTE DES COURS


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gtabLesTitresDesCours est un tableau de Mcours
    clGclUnTitreCours  est un Mcours
     
     
    // j'ai tous les enregistrements du fichier Cours
    gtabLesTitresDesCours = clGclUnTitreCours:liste()   
     
     
    // j'ai les enregistrements du fichier Cours répondant aux critères
    gtabLesTitresDesCours = clGclUnTitreCours:listeCritereWhere("IDcours", "4", "=").liste()

    NB. ces deux lignes de code au dessus fonctionnent parfaitement



    // Mon souci est d'enchainer les critères de séléction comme sur le code qui suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gtabLesTitresDesCours = clGclUnTitreCours:listeCritereWhere("IDcours", "4", ">")...
    .listeCritereWhere("Titre", "Math", "=").liste()

    je veux avoir quelque chose de pareil comme on le fait en Eloquent de Laravel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $employes = Employe::where('Est_Actif', 1)->whereNotIn('id', [10,12,20])->get();
    Donc on enchaine les méthodes where et whereNotIn

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2022
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2022
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Narwe Voir le message
    La méthode listeCritereWhere de Model renvoie un ModelCollection.

    Si vous souhaitez enchainer les listeCritereWhere, ne faudrait-il pas que cette méthode renvoi un Model ?


    La méthode listeCritereWhere renvoie un tableau d'enregistrement que je stocke dans un membre m_tabListeModelDynamique de la classe ModelCollection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ModelCollection est une Classe
    	hérite de ModelAbstrait
     
    	m_tabListeModelDynamique est un tableau de objet  dynamique
     
    FIN
     
    // Redéfinition de la méthode ModelAbstrait.liste
    PROCÉDURE  liste()
    RENVOYER m_tabListeModelDynamique
    C'est la raison pour laquelle je renvoie la classe ModelCollection et par la suite j'appelle la méthode liste de la classe ModelCollection.
    La méthode liste quant à elle me renvoie le tableau en question.


    gtabLesTitresDesCours est un tableau de Mcours
    clGclUnTitreCours est un Mcours


    // j'ai les enregistrements du fichier Cours répondant aux critères
    gtabLesTitresDesCours = clGclUnTitreCours:listeCritereWhere("IDcours", "4", "=").liste()



    Alors quand j'enchaine la méthode listeCritereWhere, au fait j'appelle la méthode listeCritereWhere
    ( c'est la méthode que je devrais implémenter )
    de la classe ModelCollection qui devrait interroger mon tableau m_tabListeModelDynamique


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtabLesTitresDesCours = clGclUnTitreCours:listeCritereWhere("IDcours", "4", ">").listeCritereWhere("Titre", "Math", "=").liste()
    Le premier listeCritereWhere, je l'appelle à partir de la classe Model ( j'interroge la Base des données et je stocke le résultat dans un tableau de ModelCollection )
    Le second listeCritereWhere, je l'appelle à partir de la classe ModelCollection ( je devrais interrogé mon tableau )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] Pointeuse et récupération des données par windev
    Par taoufiklokti dans le forum WinDev
    Réponses: 2
    Dernier message: 25/01/2018, 17h58
  2. récupération des données d'un Layout dynamique
    Par captain aioli dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 18/04/2017, 16h50
  3. Réponses: 2
    Dernier message: 18/10/2015, 18h02
  4. [XL-2007] Userform dynamique, récupération des données
    Par CaraLePoke dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/09/2013, 11h29
  5. [MySQL] Récupération des données dans liste déroulante dynamique
    Par shenmicke dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 02/09/2009, 16h02

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