PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → récuper le numero de la colone d'une table
récuper le numero de la colone d'une table
Débuté par Saidi, 14 oct. 2017 19:50 - 7 réponses
Posté le 14 octobre 2017 - 19:50
Bonjour

Je voudrais un assistant qui permettra à l’utilisateur finale de choisir une colonne parmi plusieurs et importer son contenu dans une rebrique d’un fichier

Pour cela dans une fenêtre j’ai 2 tables la premier contient des données source qui provienne une feuille Excel
Une autre table composée de 2 colonne : la première : nom du rebrique du fichier de destination
La deuxième contient le numéro de la colonne de la table source.

Ma question peut-on faire un drag and drop entre une colonne d’une table et récupérer le numéro de la colonne dans une cellule d’une autre table.

Désolé c’est difficile à explique j’espère que l’idée est claire, et l’image soit plus explicite Merci



Posté le 17 octobre 2017 - 16:14
Bonjour,

Peut-on récupérer le numero une'colonne de table par un drag and drop ?

Merci
Membre enregistré
280 messages
Popularité : +22 (28 votes)
Posté le 18 octobre 2017 - 04:12
Bonjour,

Oui tu peux car tout est possible. Mais tu vas devoir programmer ton drag&drop au lieu d'utiliser le drag&drop automatique.

--
Cordialement.
Je vous souhaite une bonne journée depuis le Vietnam.

Olivier.
http://www.impulse-web.com
Posté le 18 octobre 2017 - 11:41
Bonjour Olivier

Tout d'abord merci pour votre réponse.
En effet je pensai à la dnd programmé mais j'ai aucune piste à suivre si t' as une idée une fonction pour m'orienté dans ma recherche

Merci
Posté le 20 octobre 2017 - 10:15
Bonjour

Je repose la question en espérant cette fois-ci des repenses ou des pistes à suivre

Comment peut-on fair un drag and drop programmé entre un entête d'une colonne d'une table, récupéré l'indice de la colonne et le coller dans un champs de saisie .

Merci
Membre enregistré
188 messages
Popularité : +7 (7 votes)
Posté le 20 octobre 2017 - 19:28
Bonjour,

Je pense que c'est peut-être ça que tu cherches ?

TableInfoXY (Fonction)
Renvoie pour une position donnée dans un champ Table ou Table hiérarchique (coordonnées d'un point du champ) :
•soit le nom de la colonne affichée pour la position indiquée.
•soit l'indice de la ligne ou de la colonne pour la position indiquée.

Dans un code perso, mais pour récupérer la ligne sélectionnée et non la colonne, mais il suffit de modifier le paramètre No2
// Récupère la ligne sélectionnée dans la table
l_iNumLigneSelect = TableInfoXY(TBM_BT_Actif_AvecVeh, tiNumLigne, _DND.SourisPosX, _DND.SourisPosY)


--
Corinne Bonhomme
Montréal, Canada
Membre enregistré
188 messages
Popularité : +7 (7 votes)
Posté le 20 octobre 2017 - 19:39
Pour le Dnd Programmé, l'aide "Drag and Drop programmé" t'aidera surement car c'est un peu long à expliquer.

Mais moi j'ai fait 4 procédures ciblées
PrlDnd_Declaration : pour déclarer mes Drag and Drop
PrlDnd_DebutGlisser : Le code qui gère mes début de glisser sur tout mes champ source de DnD
PrlDnd_Survol : Pour le code de survol des champs
PrlDnd_Lacher : Pour le code de lâcher sur les champs destinations

Difficile de tout te coller car dans mon exemple, j'ai plusieurs Dnd de programmée entre plusieurs champs et le code est pas jeune, cela fait longtemps. Peut-être mieux à faire maintenant avec les versions plus récente de WinDev.

Voici au moins le code que j'ai pour ma déclaration qui est appelé au début de ma fenêtre.

Procedure PrlDnd_Declaration()

// ATTENTION :
// Les déclarations pour les champs cloner sont dans le code d'initialisation du champ cloné.

// Table des BT
TBM_BT_Actif_AvecVeh..DndSource=dndProgrammé
DnDEvénement("PrlDnd_DebutGlisser",TBM_BT_Actif_AvecVeh,dndDébutGlisser)

// Table des BT Sans Véhicule
TBM_BT_Actif_SansVeh..DndSource=dndProgrammé
DnDEvénement("PrlDnd_DebutGlisser",TBM_BT_Actif_SansVeh,dndDébutGlisser)

// Table des Employés
TBM_EMPLOYE_FAVORI..DndSource=dndProgrammé
DnDEvénement("PrlDnd_DebutGlisser",TBM_EMPLOYE_FAVORI,dndDébutGlisser)

// BT
IMG_BT_DND..DndSource=dndProgrammé
DnDEvénement("PrlDnd_DebutGlisser",IMG_BT_DND,dndDébutGlisser)


--
Corinne Bonhomme
Montréal, Canada
Membre enregistré
188 messages
Popularité : +7 (7 votes)
Posté le 20 octobre 2017 - 19:51
Peut-être un plus simple extrait de mon programme.

TBM_xxx Sont des tables à l'écran
IMG_xxx est un champ IMAGE à l'écran

Déclaration des champs qui font partie de mon DnD
Procedure PrlDeclarationDragAndDrop()
// Déclaration pour le drag and drop

// Pour la table des autobus
TBM_Autobus..DndSource=dndProgrammé
TBM_Autobus..DndCible=dndProgrammé
DnDEvénement("PrlSurvolAutobus", TBM_Autobus, dndSurvol)
DnDEvénement("PrlLacherAutobus", TBM_Autobus, dndLâcher)
DnDEvénement("PrlDebutGlisserAutobus", TBM_Autobus, dndDébutGlisser)

// Pour la table des emplacements
TBM_Emplacement..DndCible =dndProgrammé
TBM_Emplacement..DndSource =dndProgrammé
DnDEvénement("PrlSurvolEmplacement", TBM_Emplacement, dndSurvol)
DnDEvénement("PrlLacherEmplacement", TBM_Emplacement, dndLâcher)
DnDEvénement("PrlDebutGlisserEmplacement", TBM_Emplacement, dndDébutGlisser)

// Pour la corbeille
IMG_Corbeille..DndCible=dndProgrammé
DnDEvénement("PrlSurvolCorbeille", IMG_Corbeille, dndSurvol)
DnDEvénement("PrlLacherCorbeille", IMG_Corbeille, dndLâcher)


Les procédures en Jaune corresponde à mes procédures de DnD




Quelques extraits des procédures :
Procedure PrlDebutGlisserAutobus()

LOCAL
l_iNumLigne est un entier


g_sNumeroAutobus=""

l_iNumLigne=TableInfoXY(TBM_Autobus, tiNumLigne, _DND.SourisPosX, _DND.SourisPosY)

// IC-6883 (Francois Gascon) - Si l'utilisateur pointe en dehors des colonnes de la table (à droite, dans la partie vide), la fonction TableInfoXY() renvoie -1
// ATTENTION, ne mettre ce code de validation que sur le code de "DebutGlisser" et surtout pas dans le "Survol" ou "Lacher"
SI l_iNumLigne<=0 ALORS
// Message :
// La ligne n'a pas été correctement pointé avec votre souris.
// Le programme ne peut pas déterminer la ligne que vous voulez pointer pour faire votre "drag and drop".
// Merci de pointer une ligne sur une colonne visible de la table.
Erreur("La ligne n'a pas été correctement pointé avec votre souris.")
RETOUR
FIN


// Récupère le numéro d'autobus de la ligne concernée
DnDCurseur(dndCopier)
g_sNumeroAutobus=TBM_Autobus.BNACCD[l_iNumLigne]

DnDDonne(CF_TEXT, TBM_Autobus.BNACCD[l_iNumLigne])


Procedure PrlSurvolCorbeille()

SELON _DND.ChampSource
CAS TBM_Autobus..Nom
DnDCurseur(dndDéplacer)

CAS TBM_Emplacement..Nom
DnDCurseur(dndDéplacer)

AUTRE CAS
DnDCurseur(dndInterdit)
FIN


Procedure PrlSurvolEmplacement()

l_iNumColonne est un entier
l_iNumLigne est un entier

l_iNumLigne = TableInfoXY(TBM_Emplacement, tiNumLigne, _DND.SourisPosX, _DND.SourisPosY)
l_iNumColonne = TableInfoXY(TBM_Emplacement, tiNumColonne, _DND.SourisPosX, _DND.SourisPosY)

SI _DND.ChampCible=TBM_Emplacement..Nom ALORS
DnDCurseur(dndDéplacer)
FIN

SI l_iNumColonne <= 0 OU l_iNumLigne <= 0 ALORS DnDCurseur(dndInterdit)
SI l_iNumColonne > 1 ET l_iNumColonne <= TableOccurrence(TBM_Emplacement, toColonne) ET l_iNumLigne >= 1 ET l_iNumLigne <= 15 ALORS
SI SansEspace(TBM_Emplacement[l_iNumLigne][l_iNumColonne]) <> "" ALORS
DnDCurseur(dndInterdit)
FIN
FIN


Procedure PrlLacherCorbeille()

LOCAL
l_sNumeroAutobusPourCorbeille est une chaîne=""


SELON _DND.ChampSource
CAS TBM_Autobus..Nom,TBM_Emplacement..Nom
// Type de donnée disponible ?
SI DnDDonnéeDisponible(CF_TEXT) ALORS
// Le déplacement est autorisé (pas le copier)
DnDAccepte(dndDéplacer)
// Récupère la valeur placer pendant le DndDonne()
l_sNumeroAutobusPourCorbeille=DnDRécupère(CF_TEXT)

// Enlever le véhicule du plan du garage et MAJ du fichier EVPGTRP
PrlEnleverVehicule(l_sNumeroAutobusPourCorbeille)
FIN

AUTRE CAS // --------------------------------------------------------------------------
// Type de donnée disponible ?
SI DnDDonnéeDisponible(CF_TEXT) ALORS
// Aucune action autorisée, car la donnée ne vient ni de la table BT, ni de la table EMP
DnDAccepte(dndInterdit)
FIN
FIN


Procedure PrlLacherEmplacement()
LOCAL
l_iIndice,l_iIndice_TBM_CentreGarageEmplacement est un entier
l_iNumLigne,l_iNumColonne est un entier
l_sNomColonne est une chaîne
l_sCentre_Transaction,l_sGarage_Transaction,l_sEmplacement_Transaction sont des chaînes
l_iPostion_Transaction est un entier

SI SansEspace(g_sNumeroAutobus)="" ALORS RETOUR

// Info de cellule destination
l_iNumLigne=TableInfoXY(TBM_Emplacement,tiNumLigne,_DND.SourisPosX,_DND.SourisPosY)
l_iNumColonne=TableInfoXY(TBM_Emplacement,tiNumColonne,_DND.SourisPosX,_DND.SourisPosY)
l_sNomColonne=TableInfoXY(TBM_Emplacement,tiNomColonne,_DND.SourisPosX,_DND.SourisPosY)

DnDAccepte(dndDéplacer)

// Ne rien faire si la position dans l'emplacement est déjà occupée
SI SansEspace({TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}[l_iNumLigne])<>"" ALORS RETOUR

// --- Traitement si l'origine est la table des autobus --------------------------------------------------------------
// Cela signifie qu'il s'agit d'un nouvel emplacement
SI _DND.ChampSource=TBM_Autobus..Nom ALORS
SI PAS gp_objGroupwareRTL:PrmRecupDroit_Ajouter(cg_sGpwRTL_Module_PDG) ALORS
// Message : Vous n'avez pas les droits (GpwRTL_Admin) pour effectuer cette action.
// Veuillez vérifier avec le soutien (#8123)
Info("Vous n'avez pas les droits (GpwRTL_Admin) pour effectuer cette action.")
RETOUR
FIN

// Vérifier si l'autobus n'est pas déjà affecté
SI SansEspace(TBM_Autobus.TRPWC2)<>"" ALORS
DnDCurseur(dndInterdit)
// Message Info : Impossible de déplacer le véhicule : le véhicule est déjà dans un emplacement. +RC+ %1
Info("Impossible de déplacer le véhicule : le véhicule est déjà dans un emplacement.","Centre = "+TBM_Autobus.TRJ7CD+RC+...
"Garage = "+TBM_Autobus.TRPWC2+RC+...
"Emplacement = "+TBM_Autobus.TRPXC2+RC+...
"Position = "+NumériqueVersChaîne(TBM_Autobus.TRNEN2))
DnDCurseur(dndInterdit)
RETOUR
FIN

// Mettre les informations de l'autobus dans la table des emplacements
{TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}[l_iNumLigne]=g_sNumeroAutobus
TBM_Emplacement[l_iNumLigne][l_iNumColonne]..CouleurFond=iJauneClair

// Mettre les informations de l'emplacement dans la table des autobus
TBM_Autobus.TRPXC2={TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}..Libellé
TBM_Autobus.TRNEN2=TBM_Emplacement[l_iNumLigne][1]

// Rechercher la position de l'emplacement dans la table de stockage
// Attention utiliser le nom de la colonne et nom l_iNumColonne, car l_iNumColonne ne correspond pas au numéro de la colonne clonée...
l_iIndice_TBM_CentreGarageEmplacement=TableCherche(TBM_CentreGarageEmplacement.COL_NomColonneCloner,l_sNomColonne,Vrai)
SI l_iIndice_TBM_CentreGarageEmplacement>0 ALORS
TBM_Autobus.TRJ7CD=TBM_CentreGarageEmplacement.CodeCentre[l_iIndice_TBM_CentreGarageEmplacement]
TBM_Autobus.TRPWC2=TBM_CentreGarageEmplacement.CodeGarage[l_iIndice_TBM_CentreGarageEmplacement]
SINON
// Ne devrais jamais arrivé, mais évite d'afficher des infos erronées
TBM_Autobus.TRJ7CD=""
TBM_Autobus.TRPWC2=""
FIN

// Gestion de l'enregistrement dans le fichier
PrlMAJ_EVPGTRP(g_sNumeroAutobus,TBM_Autobus.TRJ7CD,TBM_Autobus.TRPWC2,TBM_Autobus.TRPXC2,l_iNumLigne)
FIN
// ------------------------------------------------------------------------------------------------------------------

// --- Traitement si l'origine est la table des emplacements --------------------------------------------------------
// Cela signifie que l'autobus est déjà dans un emplacement
// et que l'on change d'emplacement
SI _DND.ChampSource=TBM_Emplacement..Nom ALORS
SI PAS gp_objGroupwareRTL:PrmRecupDroit_Modifier(cg_sGpwRTL_Module_PDG) ALORS
// Message : Vous n'avez pas les droits (GpwRTL_Admin) pour effectuer cette action.
// Veuillez vérifier avec le soutien (#8123)
Info("Vous n'avez pas les droits (GpwRTL_Admin) pour effectuer cette action.")
RETOUR
FIN

// Modifier la table des emplacements pour le nouvel emplacement
{TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}[l_iNumLigne]=g_sNumeroAutobus
TBM_Emplacement[l_iNumLigne][l_iNumColonne]..CouleurFond=iJauneClair

// Récup. information Destination du véhicule
l_sCentre_Transaction=""
l_sGarage_Transaction=""
l_sEmplacement_Transaction={TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}..Libellé
l_iPostion_Transaction=TBM_Emplacement[l_iNumLigne][1]
l_iIndice_TBM_CentreGarageEmplacement=TableCherche(TBM_CentreGarageEmplacement.COL_NomColonneCloner,l_sNomColonne,Vrai)
SI l_iIndice_TBM_CentreGarageEmplacement>0 ALORS
l_sCentre_Transaction=TBM_CentreGarageEmplacement.CodeCentre[l_iIndice_TBM_CentreGarageEmplacement]
l_sGarage_Transaction=TBM_CentreGarageEmplacement.CodeGarage[l_iIndice_TBM_CentreGarageEmplacement]
FIN

// Mettre les informations du nouvel emplacement dans la table des autobus
// Rechercher l'autobus dans la table des AUTOBUS
l_iIndice=TableCherche(TBM_Autobus.BNACCD, g_sNumeroAutobus, Vrai)
SI l_iIndice>0 ALORS
// Réinitialiser la table des autobus pour l'autobus sélectionné pour l'ancien emplacement
TBM_Autobus.TRJ7CD[l_iIndice]=l_sCentre_Transaction // Code Centre
TBM_Autobus.TRPWC2[l_iIndice]=l_sGarage_Transaction // Code Garage
TBM_Autobus.TRPXC2[l_iIndice]=l_sEmplacement_Transaction // Code Emplacement
TBM_Autobus.TRNEN2[l_iIndice]=l_iPostion_Transaction // Position
FIN

// Initialiser les zones de l'ancien emplacement de l'autobus dans la table des emplacements
TBM_Emplacement[g_iNumLigne][g_iNumColonne]=""
TBM_Emplacement[g_iNumLigne][g_iNumColonne]..CouleurFond=iBlanc

// Gestion de l'enregistrement dans le fichier
PrlMAJ_EVPGTRP(g_sNumeroAutobus,l_sCentre_Transaction,l_sGarage_Transaction,l_sEmplacement_Transaction,l_iPostion_Transaction)
FIN
// ------------------------------------------------------------------------------------------------------------------


En espérant t'aider un peu.

C'est extrait directement de mon programme qui est en production depuis 2005 et le code date de 2005.

--
Corinne Bonhomme
Montréal, Canada