XL 2013 Aide mise à jour fichier

paita

XLDnaute Nouveau
Bonjour

Vous allez me résoudre mon problème en 1 seconde
Mon souci :
Une base de données qui évolue chaque jour et je dois rapatrier ces données dans mon fichier "suivi" et dans les colonnes adéquates (cela va de soi) mais sans écraser les informations antérieures dans celui-ci (je renseignes des colonnes qui ne se trouve pas dans la base de données)
Je vous joins mes fichiers

Un grand et immense merci pour votre aide
 

Pièces jointes

  • Base de données.xlsx
    371 KB · Affichages: 24
  • Tableau (MAJ)_suivi.xlsx
    403.4 KB · Affichages: 7

eastwick

XLDnaute Impliqué
Bonjour,

Si votre base de données écrase, elle, des données précédentes, il sera compliqué de conserver ces données dans votre suivi. L'idéal serait de cumuler les infos dans la BDD pour les retrouver dans le suivi. Néanmoins, avec la VBA, tout est possible... Hélas je ne suis pas J. Boisgontier.
 

eastwick

XLDnaute Impliqué
Oui, il faut faire intervenir le VBA, je laisse cet exercice aux pros ! Pourtant une base de données avec la fonction DECALER est inépuisable. Il suffisait ensuite de rapatrier ces données avec une opération matricielle.
 

paita

XLDnaute Nouveau
Oui, il faut faire intervenir le VBA, je laisse cet exercice aux pros ! Pourtant une base de données avec la fonction DECALER est inépuisable. Il suffisait ensuite de rapatrier ces données avec une opération matricielle.
Merci à vous mais par les fonctions matricielles c'est pas assez figées dans mon fichier
Est-ce que tu peux donner les équivalences entre les entêtes de colonne des deux fichiers ?

merci.
On peut rebaptiser les colonnes du fichier "Base" pour être en accord avec le fichier "Suivi" pas de soucis ; en fait je me repère dans le fichier Base par la 2ème colonne
 

danielco

XLDnaute Accro
Essaie :

VB:
Sub MAJ()
  Dim Ligne As Long, C As Range, Plage As Range, L As Variant
  With Workbooks("Base de données.xlsx").Sheets(1)
    Set Plage = .Range("C2", .Cells(.Rows.Count, 3).End(xlUp))
  End With
  With ThisWorkbook.Sheets(1)
    Ligne = .[A:A].Find("*", , , , xlByRows, xlPrevious).Row
    For Each C In Plage
      Debug.Print C.Value
      L = Application.Match(C, .[B:B], 0)
      If Not IsNumeric(L) Then
        Ligne = Ligne + 1
        .Cells(Ligne, 1) = C.Offset(, -1).Value
        .Cells(Ligne, 2) = C.Value
        .Cells(Ligne, 3) = C.Offset(, 1)
        .Cells(Ligne, 4) = C.Offset(, 4)
        .Cells(Ligne, 5) = C.Offset(, 5)
        .Cells(Ligne, 6) = C.Offset(, 8)
        .Cells(Ligne, 7) = C.Offset(, 11)
        .Cells(Ligne, 8) = C.Offset(, 13)
      End If
    Next C
  End With
End Sub

Daniel
 

Discussions similaires

Réponses
5
Affichages
214
Réponses
7
Affichages
294