Actualisation de tableaux à partir d'un autre classeur

Bonjour à tous,

Je maîtrise convenablement Excel ainsi que ses différentes notions. En revanche je débute littéralement en construction de macros et ne code pas en VBA.

Pour arriver à construire mon outil de gestion, je pense avoir besoin des lumières de développeurs car un simple enregistreur de macro ne suffirait pas.

Le travail se fait sur deux classeurs de trois onglets/feuilles : BASE et EXTRACT.

80base.xlsm (24.32 Ko)
104extract.xlsm (24.69 Ko)

Ceux-ci possèdent le même nombre de colonnes (1 colonne "clé" correspondant à l'identifiant de la ligne et 2 colonnes de données).

De plus, les onglets ont le même nom d'un classeur à l'autre (ici : VERT, ROUGE, et BLEU).

Je cherche à créer une macro me permettant de venir actualiser mon classeur BASE à partir du classeur EXTRACT. A terme voici mes objectifs triés par priorité :

1) Venir ajouter les lignes du classeur EXTRACT (respectivement pour chacun des 3 onglets) dans le classeur de BASE.

2) Gestion des doublons : Pour les lignes déjà existantes dans le classeur BASE, écraser les valeurs pour conserver celles du fichier EXTRACT.

3) Pouvoir identifier les lignes (/cellules?) qui ont été mises à jour (flaguer la ligne, ou colorer les cellules par exemple).

Je précise que pour mon application, les données seront beaucoup plus nombreuses (une vingtaine d'onglets avec une vingtaine de colonnes).

Rassurez-vous, je n'espère pas recevoir de code prêt à utiliser mais si vous pouvez déjà m'aiguiller à hauteur de mon niveau, ce serait top !

Merci d'avance pour votre temps et votre aide,

WAXSCUD

Bonsoir et bienvenu(e)

Un essai

Bonjour Banzaï64 !

Merci infiniment pour ton code.

Il est clair, concis et facilement adaptable à d'autres tableaux.

Il répond exactement à ce que j'avais défini comme problématique dans mon mail

Trop fort...

De nouveau merci !

Waxscud

Bonsoir,

Déjà de nouveau merci car j'ai réussi à adapter le code à mon modèle de gestion !

Petite question qui me taraude : si jamais je veux conserver une ligne de total sous les tableaux de chacun de mes onglets dans "BASE" (en sautant une ligne par exemple) quelle est la méthode d'adaptation ?

En effet les tableaux étant extensibles lors de la mise à jour, une ligne de total dans mon fichier "BASE" serait éventuellement écrasée par une des lignes nouvelles du tableau...

Ce problème se gère-t-il en transformant mes tableaux en tables ? Sachant que dans mon "EXTRACT" ce sont bien des tableaux simples, ne suis-je pas dans une impasse à ce niveau ?

Merci pour votre aide,

Waxscud

Bonjour

Désolé je ne comprends pas ce que tu veux faire

Le plus simple tu joins un fichier avec ce que tu as et ce que tu obtenir

Bonjour Banzai,

Merci de revenir vers moi.

Tu peux consulter mon nouveau fichier BASE.

La différence avec le précédent : j'ai une ligne Total qui se trouve 2 lignes après la dernière ligne de chaque tableau.

Comment prendre en charge cela sachant que ton code, en ajoutant de nouvelles lignes au tableau vient écraser la ligne total ?

(Tu peux reprendre le fichier extract de mon premier mail)

32base.xlsm (25.13 Ko)

Merci pour ton aide,

Bien à toi,

Warren

Bonsoir

Je n'ai pas compris tout ce que tu as dis

Testes ce fichier et indiques ce qui ne va pas

Hello,

Merci d'avoir de nouveau répondu si vite.

ET désolé de ne pas avoir été plus clair.

Dans ta macro, tu proposes de mettre à jour les lignes existantes et d'ajouter les nouvelles lignes sous le total.

Personnellement je désire que mêmes les nouvelles lignes viennent s'intercaler à la suite des précédentes mais avant la ligne de total afin qu'elles soient prises en compte dans celui-ci.

Je te joins le fichier mais avec le résultat que je souhaite obtenir après exécution de la macro pour ne pas te faire perdre du temps à comprendre mes message sûrement trop peu précis.

Merci bcp !

waxscud

Bonjour

Sur qu'avec des exemples je comprends mieux

A tester

Bonjour Banzai,

Le résultat m'a l'air parfait

J'imagine que c'est cette partie du code qui a répondu à mon dernier critère ? :

Lg = Ws.Range("A" & Rows.Count).End(xlUp).Row + 2

Ws.Range("A" & Lg) = "TOTAL"

Ws.Range("B" & Lg).Resize(1, 2).Formula = "=SUM(B2:B" & Lg - 2 & ")"

Ws.Range("A" & Lg).Resize(1, 3).Interior.ColorIndex = 6

Tu as pris le parti de recréer la ligne de total afin d'éviter l'utilisation de tables si j'ai bien compris.

Permets-moi de te demander : que permettent de faire les lignes suivantes ?

If Not Cel Is Nothing Then

With Cel.Resize(1, 3)

.ClearContents

.Interior.ColorIndex = xlNone

End With

Merci !

Waxscud

Bonjour

Avant de la recréer il faut que je la supprime

Ce sont ces lignes qui permettent d'effacer la ligne "TOTAL" et d'enlever la couleur du fond

Et oui cela permet d'éviter l'utilisation des tables qui ne sont pas faciles à gérer via VBA

Bonjour,

J'ai une nouvelle question qui vient compléter ma demande de septembre dernier.

L'objet de ce sujet était de pouvoir actualiser un tableau de suivi (BASE) à partir d'un tableau externe (EXTRACT).

Les onglets et le format des deux classeurs étant similaires, la réponse qui m'était apportée était de boucler sur les onglets de l'extract puis sur chacune des lignes via la colonne qui sert de référence unique. On ne pouvait pas trouver deux fois la même référence dans cette colonne.

Ma question est donc la suivante :

Comment procéder de manière similaire quand aucune colonne ne peut servir de clé car une référence peut apparaître plusieurs fois ? Du coup, pour savoir si une ligne de l'extract est déjà existante dans le suivi, il faut combiner la valeur de deux colonnes...

En recherchant un peu, je pense qu'il est faisable de s'en sortir avec la fonction FindNext mais pas évident.

Je joins à ce message le fichier avec macro qui m'avait été fourni par Banzai64 (Merci encore!!) et deux nouveaux classeurs simples qui illustrent ce nouvel exemple.

Merci beaucoup pour votre aide,

waxscud

|||

9base.xlsm (24.43 Ko)
9extract.xlsm (24.81 Ko)

Bonjour

A tester

Bonjour Banzai,

Encore une fois, cela marche du premier coup !

Impeccable...

Merci merci merci,

waxscud

Bonjour,

Dans ce sujet, j'ai demandé de l'aide pour l'actualisation d'un tableau en fonction d'un autre tableau similaire.

C'est à dire qu'un classeur de N onglets similaires (même type de données mais chaque onglet a un ID différent en colonne A) vient être actualisé en fonction d'un autre classeur organisé de la même façon (même noms d'onglets) mais dont les données chiffrées varient.

Pour cela, il a fallu boucler sur les onglets du nouveau classeur pour venir mettre à jour notre tableau de base.

Dans l'hypothèse où le nouveau tableau (EXTRACT) n'est pas organisé en N onglets mais en un seul et unique onglet dont les données sont triées en fonction de cette colonne A (dont chaque valeur différente correspond à n onglet de notre fichier de base), comment boucler ?

Au lieu d'exprimer "A chaque nouvel onglet...faire la mise à jour des données sur l'onglet correspondant...passer à l'onglet suivant" il faudrait pouvoir exprimer "Pour chaque groupe ligne (rassemblée par leur valeur commune en colonne A)...faire la mise à jour sur l'onglet correspondant...nouveau groupe de ligne)

J'espère ne pas être trop confusant...

Je joins les fichiers type "EXTRACT" et "ZALT" pour illustrer.

13base.xlsm (24.45 Ko)
12extract.xlsm (22.76 Ko)

Merci pour votre aide,

Très bonne soirée,

waxscud

Bonjour

A tester

Hello Banzai !

Once again, je ne peux que m'incliner face à tant de bonté et de réactivité...

Cela marche parfaitement. J'ai pu adapter le code à mon fichier et ceci va véritablement simplifier le process.

Merci merci merci

waxscud

Rechercher des sujets similaires à "actualisation tableaux partir classeur"