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