Transférer données d'un classeur à un autre avec condition

Bonjour,

J'ai laissé ncol = 14 (fixe) > car, je travaillais dans ta macro et tu utilisais ncol pour redimensionner la variable tableau "resu" avant l'ouverture du fichier source.

Le tout est de savoir > l'on calcule le nombre de colonnes sur le fichier source ou sur le fichier cible (celui qui contient les macros) ?
Ou encore cela n'importe peu > car les deux fichiers devraient être identiques ...

Supposons qu'on le calcule sur le fichier cible > tout en haut de la macro sous les "Dim..." ...
ncor = ThisWokbook.ActiveSheet.Cells(1, Columns.Count).End(XlToLeft).Column > faire attention d'être sur la bonne feuille > s'il n'y en a qu'une > l' attention n'est plus d'actualité ...

L'ordre des commandes pourrait être changé pour nommer ou renommer la feuille de l'année à traiter du fichier cible tout au haut > ainsi, "Activesheet" pour être remplacé par "WorkSheets(an)" ...

-####

À quoi sert cette formule?   "=G2+N(N1)"

Elle somme la colonne G ...

Étant donné que l'on importe des lignes dont l'année de la colonne A correspond à l'année choisie d'importation et qu'il peut y avoir plusieurs feuilles dans le fichier source > il faut réécrire dans la colonne "N" (ou la dernière colonne) la formule pour avoir le "Cumul des km" de la colonne G.

ric

Merci pour ces conseils>mise en application

Je te fais un retour lundi.

Bon week-end

3carnets-bord.xlsx (58.77 Ko)

Bonjour Ric,

Je crois que ncol me pose problème car dans mon "Carnet de bord" j'ai 15 colonnes et dans mon classeur de réception "Base de données" 17 colonnes. Les deux dernières colonnes intégrent une formule conditionnelle en fonction des informations remontées dans la colonne 15 nommée "VS". Sachant que le nombre d'onglets peut varier sur le fichier source et fichier cible j'ai du mal à mettre en application la fonction ncor...

Merci pour tes conseils

Bonjour,

Je constate > fichier "base-de-donnees" > colonne 0 = VS > colonne P = Echelon > colonne Q = Site ...

Je constate > fichier "carnets-bord" > colonne 0 = Echelon > colonne P = Site > colonne Q = VS ...

Lors de l'importation des données > chaque ligne de A à Q qui est importée d'un bloc ...

Si l'ordre des colonnes n'est pas le même de la source et de à la cible > malgré que cela complexifie la chose > ce n'est impossible à traiter ...

Par contre, j'ai besoin de savoir > est-ce normal ces colonnes qui n'aient pas le même ordre ?

Si le nombre de colonnes est appelé à varier dans les fichiers > est-ce que l'on doit importer les données cellule par cellule, car l'ordre des colonnes peut varier d'un fichier à l'autre ?

Merci de m'expliquer les tenants et aboutissants de ces transferts de données.

ric

Dans le fichier "Carnet de bord" il y a 15 colonnes, dans le fichier "Base de données" il y a 17 colonnes (MAJ fichier).

Les 15 colonnes du "Carnet de bord" sont les 15 premières de la "Base de données".

Les colonnes 16 et 17 dans la "Base de données" s'alimentent avec une fonction conditionnelle si la colonne 15 comporte une information.

J'espère que c'est plus clair. Merci

4carnets-bord.xlsx (56.79 Ko)

Bonjour,

Voici le fichier > 15 colonnes dans le fichier source et 17 dans le fichier cible > dont les colonnes 14, 16 et 17 sont des formules qui seront réécrites selon le nombre de lignes de données importées > il n'y a donc pas besoin que ces formules soient présentes dans la feuille BDD ...

Si le nombre de colonnes varie dans les deux fichiers > tant que les 4 dernières (Cumul km, CS, Echelon et Site) restent à la fin > les formules réécrites seront valides.

Aussi, en prévision du nombre de colonnes variant > je fais maintenant compter le nombre de colonnes sur la feuille BDD ...

Dans le fichier source (carnet-bords), il y a 2 colonnes de moins (Echelon et Site) ...

Voir si cela convient ...

ric

Quel talent Ric! C’est parfait!

Je vais passer au traitement des données avec les TCD et la mise en graphique. Je te ferais un retour prochainement.

Merci pour ton aide inconditionnelle.

Bonne soirée

ric

Je suis tombé sur un os ce matin.

J'essaye tant bien que mal à reporter la valeur B3 (immatriculation) des différents onglets du "Tableaux de bord" dans la colonne O (nommé VS) de la "Base de données".

Dans un premier temps je pensais mémoriser la valeur de la cellule B3 des onglets du "Tableaux de bord" puis coller ces valeurs dans la colonne O de la "Base de données".

8carnets-bord.xlsx (53.88 Ko)

Bonjour,

Dans le fichier "carnets-bord" qui tu nous as fourni hier (5h03) ...

ICI ... https://forum.excel-pratique.com/excel/transferer-donnees-d-un-classeur-a-un-autre-avec-condition-14...

La colonne "O" contient cette immatriculation ...

Dans le post suivant (6h45) > je t'ai envoyé un fichier "base-de-donnees-1.xlsm" qui importait les données et réécrivait les formules > cette colonne "O" est aussi importée avec les immatriculations ...

Est-ce que tu veux changer de méthode pour ne pas avoir à créer la colonne "O" dans le fichier "carnets-bord" ??

ric

Oui tout à fait la colonne O nommée VS dans "Carnet de bord" contenait l'immatriculation (avec la formule =$B$3). J'ai changé la méthode car en cas d'ajout de ligne dans le "Carnet de bord" l'immatriculation disparait car la formule ne se reporte pas sur la nouvelle ligne.

En prenant l'information en B3 dans "Carnet de bord" et en la reportant directement dans la colonne O de la "Base de données" cette méthode limite les risques pour le report des données sauf si tu vois une meilleure solution?

Je te remercie.

Bonjour,

Good > je regarde cela ...

ric

Bonjour,

Juste un peu plus bas que : With Workbooks.Open(Nom_du_fichier) ' ouvre le fichier

J'ai remplacé ...

For J = 1 To ncol
    resu(N, J) = tablo(i, J)
Next J

Par ...

For J = 1 To ncol
    ' si colonne est juste avant "Echelon" et Site"
    If J = ncol - 2 Then  ' i.e. : le nombre de colonne - 2
        resu(N, J) = w.Range("B3").Value    ' valeur de B3
    Else
        resu(N, J) = tablo(i, J)    ' sinon, continuer à lire les colonnes
    End If
Next J

Ce qui reste compatible avec le nombre de colonnes pouvant varier ...

ric

C'est exactement ça, merci!

J'ai compris mon erreur c'est parfait > je serais un peu moins **** en me couchant ce soir

Bonjour,

je serais un peu moins **** en me couchant ce soir ...

Je déteste maladivement cette expression ...

Désolé > mais je ne pense pas que ça change > mais, par contre, tu vas te coucher plus SAVANT > c'est ça l'important ...

ric

Désolé pour l'expression...

En tout cas grâce à toi j'en sais plus et c'est ça l’essentiel

Merci bien

Rechercher des sujets similaires à "transferer donnees classeur condition"