MAJ automatique de données modifiés d'un onglet sur un autre

Bonjour,

Je travaille sur un fichier (joint) où se trouve 2 onglets. Il s'agit en fait d'un fichier regroupant l'ensemble des départs électriques pour des salles informatiques.

Dans le premier nommé Original se trouve un ensemble de données existantes (pouvant atteindre 4000 lignes).

Depuis peu, ces relevés de départ électrique font se faire automatique via des "douchettes/terminaux" et je vais récupérer un format de fichier csv comme indiqué dans le deuxième onglet.

Mon soucis est comment mettre à jour le premier onglet à partir du deuxième sachant que le premier a plus de colonnes que le premier (les cellules en jaunes sont les colonnes communes aux 2 fichiers) ?

Merci beaucoup car je ne vois pas comment procéder et mes bases en VBA sont très pauvre.

Bonsoir,

Merci de retourner ton fichier avec quelques lignes remplies dans la feuille "releve". Ceci permet de tester une solution par VBA. Je suppose que la disposition des colonnes resteront identique que dans l'exemple. Un conseil aussi à prendre en compte. Il vaux mieux avoir des entêtes identiques sur les deux fichiers pour dynamiser la recherche des colonnes à renseigner. Ce n'est pas le cas (cf. entête "Module" ou "Modules")

Merci pour votre réponse.

Voici le fichier avec quelques exemples que j'ai volontairement modifié de la réalité dans le premier onglet.

J'ai modifié le nom des colonnes du premier onglet pour qu'il corresponde au deuxième onglet suite à votre demande car cela n'est pas gênant.

A noter qu'il peut y avoir plusieurs lignes pour une même désignation de baie car chaque ligne est propre à une armoire et un départ électrique (colonne S et U).

Pour reprendre la demande, il faut modifier dans le premier onglet les champs qui ont été modifiés et présents dans le deuxième onglet. Je me pose par exemple la question de la clé qui va être utilisé.

Merci.

25releve-pour-test.xlsx (102.99 Ko)

Re,

Copie le code suivant dans un module du classeur. Teste et dis-nous si ça te va comme solution :

Option Explicit
Sub CopierColler()
    'déclarations
    Dim DerLigSource, DerColSource, DerColDest As Long
    Dim Source, Dest As Worksheet
    Dim Plage As Range
    Dim i, j As Integer
    'affectations
    Set Source = Sheets("Original")
    Set Dest = Sheets("releve")
    'calculs
    DerLigSource = Source.Range("A" & Rows.Count).End(xlUp).Row
    DerColSource = Source.Cells(1, Columns.Count).End(xlToLeft).Column
    DerColDest = Dest.Cells(1, Columns.Count).End(xlToLeft).Column
    'boucle pour copier uniquement les colonnes concernées
    For i = 1 To DerColDest
        On Error GoTo saut 'si erreur de résultat recherché saute un tour (entête des colonnes ne s'écrivent pas avec le même orthographe)
        j = WorksheetFunction.Match(Dest.Cells(1, i), Source.Range("A1", Source.Cells(1, DerColSource)), 0) 'matching entête
        'copie de la colonne
        Source.Range(Source.Cells(2, j), Source.Cells(DerLigSource, j)).Copy Destination:=Dest.Range(Dest.Cells(2, i), Dest.Cells(DerLigSource, i))
saut:
    Next i
End Sub

Merci mais en fait c'est le contraire que j'attends ! Désolé, j'ai dû mal m'exprimer.

En fait, le relevé fait par le terminal sera dans l'onglet "releve" puis la macro viendra modifier l'onglet original.

Je viens d'apprendre que les lignes à copier sont celles ou figurera quelque chose dans la colonne ""Relevé à faire" ?

Il peut par contre y avoir des ajouts ou suppressions de lignes mais je ne vois pas comment les déterminer ; Faut-il faire une comparaison pour les ajouts ?

Re,

Tu nous dis que c'est la feuille "releve" est la source, or il est laissé vide. Est-ce que c'est logique ? Je vais continuer à chercher et te donnerai une solution selon tes souhaits. Je pense qu'il y a toujours un moyen. Ajout ne pose pas vraiment un souci. Mais la suppression sur quel critère (quelle colonne par exemple) ?

Voici le fichier complété.

J'ai mis en rouge les champs modifiés avec la colonne "Relevé à faire" à "OK".

Pour les suppressions, je me renseigne.

Merci beaucoup.

18releve-pour-test.xlsm (110.96 Ko)

Re,

Voir la modification de la macro dans le fichier en retour. La macro actuellement traite les ajouts signalés par un "OK" dans la colonne L du fichier source(releve).

19releve-pour-test.xlsm (114.54 Ko)

Vous êtes très proche du but et je vous remercie déjà beaucoup.

En fait, le "OK" dans la colonne n'indiquent pas uniquement un ajout mais aussi une modification.

Il faudrait idéalement qu'il y ait modification si la ligne existe déjà dans l'onglet "original" et dans le cas contraire un ajout de ligne comme vous l'avez fait.

J'ai modifié légèrement le fichier pour que les colonnes correspondent bien et parce que mon onglet "original" doit commencer à la ligne 6 (voir pièce jointe).

Un grand merci !

Re,

Pas de problème particulier si le fichier original débute à la 6è ou Nème ligne. Mais, explique-moi comment tu identifie que la ligne dans la feuille source existe déjà dans l'original. Nous verrons la suite.

Merci pour ta réponse.

Pour savoir si la ligne existe, il faudrait faire une recherche sur la clé "Identifiant départ" qui est unique.

Merci beaucoup.

Bonjour,

Est-ce que ma réponse ci-dessus suffit ?

Bonjour,

L'identifiant départ ne paraît pas dans toutes les cellules. C'est normal pour toi ? Si la recherche se porte sur cet éléments, il vaut mieux le renseigner tout le temps.

Bonjour,

Je valide bien cet élément comme la clé.

En fait, les fichiers sont en train d'être rempli actuellement et il y a aura toujours un élément présent dans cette colonne.

Merci.

Rechercher des sujets similaires à "maj automatique donnees modifies onglet"