Transfer entre Classeur Excel

Résolu/Fermé
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021 - Modifié le 14 déc. 2021 à 12:45
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 - 16 déc. 2021 à 13:02
Bonjour,
Je voudrais creer un code Vba pour importer les données d'un tableau excel vers un autre tableau. Le tableau reception comporte 65 colonnes, le tableau d'importation 33 et +-28000 lignes. Chacune des colonnes correspond à une autre sur le tableau reception mais absolument pas dans le meme ordre. Si je pouvais obtenir un code pour le transfer de quelques colonnes vers d'autres colonnes bien déterminée, je peux probablement terminé le reste et fignoler personellement. J'ai essayé en enrégistrant une macro et en copiant soigneusement la première ligne et en répartissant les 33 colonnes, mais j'obtient déja un tres long code sans aucune boucle et avec un tas de ligne redondante qui ne servent probablement à rien.

D'avance, je vous remercie de votre attention.

Daniel







Configuration: Windows / Firefox 95.0
A voir également:

13 réponses

yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 554
15 déc. 2021 à 20:15
Je propose ceci:
Option Explicit
Sub importt()
Dim fsrc As Worksheet, fdest As Worksheet, csrc As Range, cdest As Range, fcor As Worksheet, ccor As Range
Dim tin() As String, tout() As String, ncor As Integer, lsrc As Long, ldest As Long, i As Integer, scru As Boolean

Set fsrc = Workbooks("AImporter.xlsx").Sheets("NUMISCollector")
Set fdest = ThisWorkbook.Sheets("BaseVide")
Set fcor = ThisWorkbook.Sheets("corespondance")
Set ccor = fcor.[B3]
Set csrc = fsrc.[A2]
Set cdest = fdest.[A2].End(xlDown)
scru = Application.ScreenUpdating
Application.ScreenUpdating = False
Do While ccor <> ""
    ncor = ncor + 1
    ReDim Preserve tin(ncor)
    ReDim Preserve tout(ncor)
    tin(ncor) = ccor
    tout(ncor) = ccor.Offset(, 3)
    Set ccor = ccor.Offset(1)
Loop
ldest = cdest.Row
lsrc = csrc.Row
Do While fsrc.Cells(ldest, 1) <> ""
    For i = 1 To ncor
        fdest.Cells(ldest, tout(i)) = fsrc.Cells(lsrc, tin(i))
    Next i
    lsrc = lsrc + 1
    ldest = ldest + 1
    DoEvents
Loop
Application.ScreenUpdating = scru
End Sub

Comme tu n'as pas répondu à mes questions, j'ai fais des suppositions.
Notamment que le fichier à importer était déjà ouvert.
L'import prend un certain temps, teste peut-être d'abord avec peu de lignes à importer.
1
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 14 déc. 2021 à 13:06
Tableau réception .....................Tableau à importer
AS,,,,45Clef ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Clef ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, A
A ,,,,,,1Pays (CH1),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Choix1
B ,,,,,,2Année (Ch2),,,,,,,,,,,,,,,,,,,,,,,,,,,,Choix2
C,,,,,,,3Intitulé (Ch3),,,,,,,,,,,,,,,,,,,,,,,,,,,Choix3
AT,,,46 ? (Ch4)2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Choix4
AV,,,48PxABeau (Val5),,,,,,,,,,,,,,,,,,Valeur5
AW,,,49PxTbeau (Val6),,,,,,,,,,,,,,,,,,Valeur6
AX,,, 50PXFDC (Val7),,,,,,,,,,,,,,,,,,,, Valeur7
AY,,, 51 ? (Val8) ,,,,,,,,,,,,,,,,,,,,,,,,,,, Valeur8
AZ,,, 52 ? (Qté9) ,,,,,,,,,,,,,,,,,,,,,,,,,,, Qté9
BA,,, 53QuaPos ABeau (Qté10) ,,,,,,,,,,,,,,,,,,,,,,,,,,, Qté10
BB,,, 54QuaPos TBeau (Qté11),,,,,,,,,,,,,,,,,,,,,,,,,,, Qté11
BC,,, 55QuaPos FDC (Qté12),,,,,,,,,,,,,,,,,,,,,,,,,,, Qté12
BD,,, 56 ? (Date13)22,,,,,,,,,,,,,,,,,,,,,,,,,,, Date13
BE,,, 57 ? (Date14)33,,,,,,,,,,,,,,,,,,,,,,,,,,, Date14
BF,,, 58 ? (Date15)44,,,,,,,,,,,,,,,,,,,,,,,,,,, Date15
BG,,, 59 ? (Date16)52 ,,,,,,,,,,,,,,,,,,,,,,,,,,, Date16
AC,,, 29Métal (D17) ,,,,,,,,,,,,,,,,,,,,,,,,,,, DescripCourte17
AD,,, 30Dia. (D18) ,,,,,,,,,,,,,,,,,,,,,,,,,,, DescripCourte18
AE,,, 31Poids (D19),,,,,,,,,,,,,,,,,,,,,,,,,,, DescripCourte19
AF,,, 32Année de frappe (D20),,,,,,,,,,,,,,,,,,,,,,,,,,, DescripCourte20
AG,,, 33Description (D21),,,,,,,,,,,,,,,,,,,,,,,,,,, DescripLongue21
AH,,, 34Tirage (descrip22),,,,,,,,,,,,,,,,,,,,,,,,,,, DescripLongue22
BH,,, 60 ? (Descrip23),,,,,,,,,,,,,,,,,,,,,,,,,,, DescripLongue23
BI,,, 61? (Descrip24),,,,,,,,,,,,,,,,,,,,,,,,,,, DescripLongue24
BJ,,, 62 ? (U25),,,,,,,,,,,,,,,,,,,,,,,,,,, Utilisateur25
BK,,, 63Rangement (U26)2 ,,,,,,,,,,,,,,,,,,,,,,,,,,, Utilisateur26
BL,,, 64UtQualité (u27) ,,,,,,,,,,,,,,,,,,,,,,,,,,, Utilisateur27
AI,,, 35Graveur ,,,,,,,,,,,,,,,,,,,,,,,,,,, Utilisateur28
AJ,,, 36Observation (Obs29),,,,,,,,,,,,,,,,,,,,,,,,,,, Obs29
BM,,, 65Obs30 ,,,,,,,,,,,,,,,,,,,,,,,,,,, Obs30
AL,,, 38CatalImage (obs31),,,,,,,,,,,,,,,,,,,,,,,,,,, Obs31
AM,,, 39RefImag (obs32) ,,,,,,,,,,,,,,,,,,,,,,,,,,, Obs32 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, AG

J'ai essayé de joindre un PDF mais cela ne marche pas.
un copier coller d'excell ne garde pas la tabulation et si je la remet en ordre, elle disparait à l'affichage.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 554
14 déc. 2021 à 18:42
bonjour,
pourquoi ne pas partager ton fichier?
où se trouvent ces tableaux? dans des onglets différents?
tu mentionnes les colonnes, mais tu ne nous dit rien des lignes: à quelle ligne copier dans le tableau de destination?
difficile de te proposer un exemple sans information.

si tu dois copier des colonnes complètes, as-tu essayé d'enregistrer une macro pendant que tu copiais des colonnes?
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
14 déc. 2021 à 18:59
un exemple:
dim fsrc as worksheet, fdest as worksheet
set fsrc = ...
set fdest = ...
fdest.cells(123,"bx") = fsrc.cells(456,"ab")
Cela copie AB456 de la feuille source vers BX123 de la feuille destination.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554 > yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024
16 déc. 2021 à 11:04
as-tu compris le code en #3, qui copie AB456 de la feuille source vers BX123 de la feuille destination?

cela devrait t'aider à comprendre:
    For i = 1 To ncor
        fdest.Cells(ldest, tout(i)) = fsrc.Cells(lsrc, tin(i))
    Next i
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 14 déc. 2021 à 20:03
Désolé, mon message n'est pas passé la première fois a cause d'un anti pub. Les deux tableau sont dans des classeurs différents. Je dois copier tout le tableau d'importation sauf les titres. et les 28000 lignes. Le dossier d'origine comprend déjà beaucoup d'article et beaucoup de photos. Mais si necessaire, je peux les mettre sur Drive et donner un lien de téléchargement. Les titres et numéro de colonnes sont dans le deuxième messages. J'avais enclenché enrégistrement de macro quand j'ai copiè les cellules de la première ligne une à une mais je me suis retrouvé avec trois ou quatre page de codes sans meme une boucle pour la deuxième ligne.
ah oui, et chaque ligne importée doit ouvrir une nouvelle ligne dans le tableau de destination. (J'aurai donc +-28000 nouvelle entrée avec 1000 a 2000 à importé tous les ans. ) Il s'agit d'une collection de monnaie avec les catalogues de photos de toutes les pièces existante mémes celle qui ne sont pas dans ma collection.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
Modifié le 14 déc. 2021 à 20:37
un tableau, c'est une onglet (ou une feuille)?
il faut copier tout le tableau source (en commençant par la ligne 2) à la fin du tableau de destination?
comment déterminer la fin du tableau source, afin de s'arreter de copier? une ou plusieurs colonnes sont-elles toujours remplies?
comment déterminer la fin du tableau de destination, pour savoir où commencer à copier? une ou plusieurs colonnes sont-elles toujours remplies?

oui, ce serait utile de partager un exemple des deux fichiers, même avec peu de données.

dans quel fichier serait la macro? le fichier source, destination, ou un troisième?
comment déterminer les noms complets des fichiers dans lesquels ne se trouve pas la macro?

AJOUT: comment obtenir la liste avec les correspondances entre les colonnes sources et destinations? est-ce écrit dans le fichier? vas-tu créer cette liste?

je n'ai aucune idée de comment copier des photos, on verra.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
14 déc. 2021 à 21:10
https://accounts.google.com/ServiceLogin?service=wise&passive=1209600&continue=https://drive.google.com/drive/folders/1bAL-yQmAQ4RasZkD8UeMiRvsCTA5pu6E&followup=https://drive.google.com/drive/folders/1bAL-yQmAQ4RasZkD8UeMiRvsCTA5pu6E

Voilà tableau a importer et celui en destination. Le destination est presque vide et sans les dossiers photos ni les tableaux référence. Mais cela doit suffire. Maintenant, je travaille depuis deux mois sur ce projet.si quelqu'un collectionne les monnaies, je peux lui donner une version complète et fonctionnelle. Je précise que les données a importer sont extraites d'un programme acheter avec ma collection. Il ne me convenait tout simplement pas tout a fait. Mais les données sont intéressantes.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
14 déc. 2021 à 23:14
les fichiers ne sont pas publics.
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
14 déc. 2021 à 22:38
Il n'y a aucune photo à copier. Les photos apparaissent dans le tableau final ave une macro que j'ai faite en fonction d'un nom se trouvant dans la ligne.(J'ai un dossier photo dans le meme répertoire) Chaque ligne importée corespond à une nouvelle ligne de mon tableau. Simplement, les colonnes ne sont pas aux mêmes emplacements ni dans le meme ordre.
Il faut d'après moi chercher la dernière ligne de mon tableau, creer une nouvelle ligne, et entrer une ligne importée.En réafectant les 33 cellules dans l'ordre du tableau de destination. Avec une boucle qui répétera le processus autant de fois qu'il n'y a de ligne dans le tableau importé. L'ordre des cellules est dans le deuxième message et aussi sur une feuille jointe avec les tableau sur Drive.

Merçi d'avance a ceux qui vont se creuser la tête. Un début de solution avec la boucle et quelques cellules serait bien, je peux me décarasser après pour finir le code. C'est comme cela que j'ai fait le reste du travail. Je n'avais jamais fait de vba il y a deux mois.

bonne Nuit
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
14 déc. 2021 à 23:18
tu écris "L'ordre des cellules est dans le deuxième message et aussi sur une feuille jointe avec les tableau sur Drive."
je n'ai pas encore vu les fichiers.
il faudra avoir une liste avec toutes les colonnes sources et, pour chacune, la colonne destination associée.
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 14 déc. 2021 à 23:30
https://drive.google.com/file/d/13ivjxLMDcFUV1j8Ohjx-6dvhVjo5e6uF/view?usp=sharing

Je viens de changer le lien. Apparement maintenant il faut cocher la case avec tous ceux qui dispose du lien.

https://docs.google.com/spreadsheets/d/1tYjjOBDZyxFi-H_L54ufopniZjte8ZVL/edit?usp=sharing&ouid=100095902195121588755&rtpof=true&sd=true

au lieu du dossier, j'ai un lien pour chaque fichier.
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
15 déc. 2021 à 23:36
Bonsoir,
je viens de tester: avec dix lignes a importer et 3 lignes déja dans le fichier reception.
J'ai quelques cellules qui sont copiée sur la ligne, et qui écrasent les anciennes cellules et 6 nouvelles lignes. Les cellules ne sont pas à la bonne place mais dans l'ordre d'importation les lignes ne sont pas copiée complétement..La dernière ligne n'est pas importée.
Normalement, on ne doit pas réécrire sur les lignes déjà existante.
La ligne (2) importée doit se placer dans une nouvelle ligne créée (4?) du tableau. Sur cette ligne , la cellule A (2) doit aller en AS(4),B2 en A4,C2 en B4,D2 en C4, E2 en AT4,F2 en AV4... ect, puis avec la ligne 3 en position 5, A3 en AS5....
Et si possible, s'il y a moyen d'intercaler les explications dans le code.
Maintenant, si tu veux créer les nouvelles lignes en début de tableau et repousser les anciennes vers le bas, pas de problèmes. Mais les anciennes lignes doivent rester tel quel.
Merçi
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 16 déc. 2021 à 00:46
pour etre exact, ton code commence à copier sur ma 2eme lignes de tableau. Il laisse donc la première ligne intacte et Ecrase les cellules copiée dans les lignes suivantes existantes. Et il n'importe que les huit première ligne sur 10.
Il m'importe les cellules ABC dans le tableau de reception en BCD et AC,AD,AE,AF se retrouvent en R,S,T,U

Bonne soirée

Je viens de relever que si tu avais importer à l'envers, cela correspondrait. en effet les cellules bcd doivent aller en abc et le meme pour rstu qui doivent aller en ac,.... et comme le tableau d'importation ne va que jusqu'a AG donc il ne trouve pas les autre cellule.... Je regarde si je sait corriger cela moi meme...

Ok, j'ai remplacé B3 par E3 en ligne 9 et "tout(ncor) = ccor.Offset(, 3)" par"tout(ncor) = ccor.Offset(, -3)" et il me copie toutes la lignes à la bonne place.

Il reste juste le problème qu'il ne copie que les ligne jusqu'a 10.. J'explique
Il y a 9 lignes dans le fichier d'importation (de 2 à 10)
A la réception, j'ai mes lignes de (3 à 5) déja remplie, Il copie les lignes 2 a 7 sur les lignes 5 a 10.
Si je n'ai que 3 et 4 de déja remplie, alors il copie les lignes 2 à 8 sur les lignes 4 à 10.

Donc il m'efface en partie la dernière ligne et arrete de recopier quand il y a le meme nombre de ligne.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
16 déc. 2021 à 10:38
j'ai en effet confondu les colonnes de réception et d'importation.
tu aurais pu, aussi, inverser tin et tout en lignes 18 et 19.
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021 > yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024
16 déc. 2021 à 10:41
Bonjour et merçi pour ton aide.

As tu une idée pourquoi mes copie s'arrete au meme nombre de ligne que le tableau D'importation?
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 16 déc. 2021 à 01:40
dernier test, je place de 3 à12 entrée dans mon tableau de reception, la macro n'importe rien.
Si j'en ai de 3 à9, alors la macro importe de 2 à 3 et réecri sur la ligne 9 et ajoute 10

En tout cas, déjà merçi pour le code reçu.

Daniel
Je viens d'ajouter "ldest = ldest +1" aprés la ligne 22 et maintenant, l'importation commence après ma dernière ligne, donc ne réecrit plus sur mes lignes d'origines....
mais s'arrete toujours à 10?
j'ai essayé avec le pas à pas mais je ne trouve pas pour l'instant.

Bonne soirée, à demain.
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 16 déc. 2021 à 09:55
Bonjour,

J'ai trouvé une solution de dépannage. En ajoutant 10 enrégistrements doublon du dernier, je me retrouve avec les lignes de 2 à 20 à importer. A la reception j'ai toujours de 3 à 6 déja rempli. Il ajoute donc les importation jusqu'a la ligne 20. Je n'ai plus qu'a effacer les doublons après la ligne 15 qui contient mon dernier enrégistrement.
C'est une solution boiteuse en dépannage. Si il y a moyen de corriger le code pour qu il copie tous les enrégistrement, ce serait mieux.

Et ajouter si possible des explications dans le codes, je ne comprends pas très bien comment tu arrives avec tous les champs copié. Je pense comprendre comment tu relève les correspondances, mais après c'est un peu de la natation.

en attendant bonne journée à tous.

Daniel
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
16 déc. 2021 à 10:43
Pour commencer à copier sur la bonne ligne dans la destination, essaie, en ligne 12,
Set cdest = fdest.[B2].End(xlDown)

Il devrait, ainsi, commencer sur la première ligne vide en colonne B.
0
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021 > yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024
16 déc. 2021 à 10:54
Cela ne change rien du tout.
Les colonnes A B seront toujours remplies jusqu'a la fin du tableau.
ici, la macro stoppe le transfer une fois que le tableau de reception contien autant de ligne que le tableau d'importation. Hors le transfer devrait se terminer quand tout les enrégistrement on été copié.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554 > yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024
16 déc. 2021 à 10:58
plutôt
Set cdest = fdest.[B2].End(xlDown).Offset(1)

ce qui devrait te permettre de supprimer ce que tu as ajouté après la ligne 22 (ldest = ldest +1).
1
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021 > yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024
Modifié le 16 déc. 2021 à 11:06
ok, avec .offset(1) a l'arrière, cela fonctionne. L'importation commence après la derniere ligne déja inscrite.

mais s'arrete toujours au nombre de ligne du tableau d'import.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554 > nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
16 déc. 2021 à 11:44
erreur en ligne 24, qui devrait être:
Do While fsrc.Cells(lsrc, 1) <> ""
1
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
16 déc. 2021 à 11:11
j'ai essaye avec a2 ou b2, j'obtient le meme resultat du moment que ".offset(1)" est derrière.
un autre bete question, comment tu fait pour avoir une numérotation de ligne devant ton code sous excelvba?
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
16 déc. 2021 à 11:44
pour avoir les numéros de ligne en affichant du code sur le forum:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
1
nounours4 Messages postés 47 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 16 décembre 2021
16 déc. 2021 à 11:58
Encore merci pour ton temps et ta patience.
Je cloture le sujet. Bonne journée à tous

ah oui, la numérotation est dans la présentation du site CCM et pas sous excel.
tanpis. Merci bien.
0
yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 1 554
16 déc. 2021 à 13:02
Sous Excel, en a, dans la ligne du menu, le numéro de la ligne de code dans laquelle on est positionné (en édition ou en exécution pas à pas.
0