1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

WD Copier/Coller de table

Discussion dans 'Resources' créé par Mauritius, Août 2, 2018.

  1. Mauritius

    Mauritius Member

    Inscrit:
    Fev 10, 2018
    Messages:
    74
    J'aime reçus:
    70
    Sans aucune prétention, ce code que j'utilise dans divers projets pour réaliser des copier coller de table à table. J'avais créé une version en passant par des zones mémoires au lieu du presse-papier, mais je l'ai perdu (brrr).

    // Résumé : Copie des lignes de la table
    // Syntaxe :
    //[ <Résultat> = ] LigneTable_Copier (<prmTB> [, <prmCouper>])
    //
    // Paramètres :
    // prmTB : Table à traiter
    // prmCouper (valeur par défaut=0) : Doit t'on couper après la copie (<Faux> par défaut)
    // Valeur de retour :
    // entier : Renvoi le nombre de lignes copiées ou -1 si aucune
    //
    // Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE LigneTable_Copier(prmTB, prmCouper=Faux)
    // Déclarations
    sFichierLié,sEntRub,sEnt,sCpyEnt,sCpy, sTable est une chaîne
    nLig,nCol,nNbCol est un entier
    // Initialisations
    sTable=(EstNumérique(prmTB) ? prmTB..Nom SINON prmTB)
    sFichierLié=prmTB..FichierParcouru
    nNbCol=TableOccurrence(prmTB,toColonne)
    // Traitements
    POUR TOUTE LIGNE DE prmTB
    nLig++
    POUR nCol=1 A nNbCol
    sEnt=TableEnumèreColonne(prmTB,nCol)
    // Evite les Noms avec "$" qui veut dire à ne pas copier
    SI Position(sEnt,"$")=0 ALORS
    // Informe l'en-tête
    SI nLig=1 ALORS
    sCpyEnt+=sEnt+TAB
    SI sFichierLié<>"" ALORS sEntRub+=sFichierLié+"."+Milieu(sEnt,5)+TAB
    FIN
    // Informe l'enregistrement de la table
    sCpy+=prmTB[prmTB,nCol]+TAB
    SINON // $, donc ne pas copier le contenu
    SI nLig=1 ALORS
    sCpyEnt+=sEnt+TAB
    SI sFichierLié<>"" ALORS sEntRub+=TAB
    FIN
    sCpy+=""+TAB
    FIN
    FIN
    SI sCpyEnt<>"" ALORS
    sCpy=sTable+TAB+MaFenêtre..Nom+TAB+gsNomAppli+RC...
    +Gauche(sEntRub,Taille(sEntRub)-1)+RC...
    +Gauche(sCpyEnt,Taille(sCpyEnt)-1)+RC...
    +sCpy+RC
    sCpyEnt=""
    SINON
    sCpy=Gauche(sCpy,Taille(sCpy)-1)+RC
    FIN
    SI prmCouper ALORS TableSupprime(prmTB,prmTB)
    FIN
    sCpy=Gauche(sCpy,Taille(sCpy)-1)
    SI VersPressePapier(sCpy) ALORS RENVOYER nLig
    RENVOYER -1


    // Résumé : Coller les lignes dans une table
    // Syntaxe :
    //[ <Résultat> = ] LigneTable_Coller (<prmTable> [, <prmLigDep> [, <prm1ereRub>]])
    //
    // Paramètres :
    // prmTable : Table à traiter
    // prmLigDep (valeur par défaut=1) : (-1 par défaut) Ligne de départ de la copie
    // prm1ereRub (valeur par défaut=1) : Faut-il copier la 1ère rubrique (cas des TablH) (<Vrai> par défaut)
    // Valeur de retour :
    // chaîne : Ligne séparée par des tabulation. Si Erreur, renvoie "Erreur"
    //
    // Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE LigneTable_Coller(prmTable, prmLigDep=1, prm1ereRub=Vrai)
    // Déclarations
    nDepIni est un entier=3 // Nombre de lignes avant la 1ère ligne à Coller
    // Ligne 1 = Identification de la table
    // Ligne 2 = Liste des rubriques fichier
    // Ligne 3 = En-tête des colonnes de table
    nLig est entier
    sTable, sNomCol est chaîne
    nI, nD, nJ est un entier
    T est un tableau 1 chaînes
    sPP est une chaîne=PressePapier()
    // Contrôles
    sTable=(EstNumérique(prmTable) ? prmTable..Nom SINON prmTable)
    SI PressePapierFormat(ppfBitmap) ALORS RENVOYER="Erreur"
    nLig=prmTable
    SI nLig=-1 ALORS nLig=TableOccurrence(prmTable)
    SI nLig=0 ALORS TableAjouteLigne(prmTable); nLig=1
    // Récupère la liste des lignes copiées
    ChaîneVersTableau(sPP,T,RC)
    // Si le nombre de ligne n'est pas supérieur à 1 (1 + Entête de table copiée + Entête des lignes)
    SI TableauOccurrence(T) < nDepIni+1 RENVOYER ""
    // Fin de la copie
    SI prmLigDep>TableauOccurrence(T)- nDepIni RENVOYER ""
    // Erreur si la table n'est pas la même que la copie
    SI T[1]<>sTable + TAB + MaFenêtre..Nom + TAB + gsNomAppli ALORS RENVOYER "Erreur"
    // Remplie la table
    SI {sTable,indChamp}..Nouveau ALORS
    nJ=TableOccurrence(prmTable,toColonne)
    POUR nI=1 A nJ
    prmTable[nLig,nI]=ExtraitChaîne(T[prmLigDep+nDepIni],nI,TAB)
    FIN
    SINON
    TableAjoute(prmTable,T[prmLigDep+nDepIni])
    FIN
    // Alimente le fichier des données copiées
    SI SansEspace(T[2]) ALORS
    nJ=TableOccurrence(prmTable,toColonne)
    nD=(prm1ereRub ? 1 SINON 2)
    POUR nI=nD A nJ
    sNomCol=TableEnumèreColonne(sTable,nI)
    SI Position(sNomCol,"$")=0 ALORS // Evite les colonnes nom avec $
    {ExtraitChaîne(T[2],nI,TAB),indRubrique}=prmTable[nLig,nI]
    FIN
    FIN
    FIN
    // Fin
    RENVOYER T[prmLigDep+nDepIni]


    Code d'utilisation :
    nI, nNbSave sont des entiers
    nNbSave = TableOccurence(TABLE1)

    LigneTable_Copier(TABLE1)

    POUR nI = 1 A nNbSave
    TableAjoute(TABLE2,nI); TableSelectPlus(TABLE2,nI)
    LigneTable_Coller(TABLE2,nI)
    FIN
     
    Tags:
    suenodesign, joker et Ezekiel056 aiment ça.

Partager cette page

Chargement...