AIDE COPIER COLLER AUTOMATIQUE sur nouvelle feuille ( macro - VBA) sur excel

aminelyamani Messages postés 6 Date d'inscription dimanche 15 octobre 2006 Statut Membre Dernière intervention 22 février 2011 - 19 août 2009 à 15:50
aminelyamani Messages postés 6 Date d'inscription dimanche 15 octobre 2006 Statut Membre Dernière intervention 22 février 2011 - 20 août 2009 à 09:07
Bonjour tout le monde,
je bloque depuis longtemps sur ce probleme et j'espere que quelqu'un puisse m'aider; je m'explique

j'ai Deux feuilles une BASE DE DONNEE et l’autre HISTORIQUE
Dans la BASE DE DONNEE j’ai plusieurs lignes et 3 colonnes dont date ; référence; nombre
Chaque jour un nombre de donnée s’ajoute à cette base ça veut dire des lignes de plus qui s’insèrent dans le tableau
Dans l’HISTORIQUE j’ai un tableau du meme type que ce lui dans la feuille BASE DE DONNEE …… je veux copier les nouvelles lignes qui se sont ajoutées dans la feuille BASE DE DONNEE et les recoller a la fin du tableau qui se trouve dans la feuille HISTORIQUE.
Pour cela j’ai pensé à une solution :
J’ai crée une cellule dans la feuille HISTORIQUE qui me donne la date de la derniere ligne ajoutée
Ce que je veux faire c’est copier les lignes de la feuille BASE DE DONNEE dont la date est superieur à la cellule créée dans la feuille HISTORIQUE

est ce que c'est possible de mettre ce que j'ai ecrit en VBA - macro ?

Merci d'avance pour votre aide

2 réponses

Arnaud.f123 Messages postés 23 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 13 novembre 2013
19 août 2009 à 17:59
Salut,


Feuilles :
"BDD" = ta base de données
"HISTO" = la base Historique

Pour chaque feuille :
colonne 1 = Date,
colonne 2 = REF,
colonne 3 = nombre

Ligne 1 = entête des colonnes

Si besoin j'ai le fichier excel.


Ce que ne fait pas la macro :
si tu fais 1 copie dans histo le jour j et que tu ajoutes (ce même jour j) une ligne dans BDD, la ligne ajoutée ne sera pas copiée
Il vaudrait mieux utiliser dans ce cas une clé primaire de type n° unique d'enregistrement (1 numéro par ligne) et faire la recopie via ce n°, ou alors ajouter l'heure, minute et secondes dans la date.



A+


Arnaud


Voici le code :

Option Explicit



Sub PasserEnHisto()

    'on charge les coordonnées des cellules source
    Static ScrY As Integer, ScrX As Integer
    ScrX = 1
    ScrY = 1

    'on charge la pos Y de Histo libre
    Static DestY As Integer
    DestY = YLibreHisto

    'on releve la date du dernier histo
    Static DateDernierHisto As Date
    DateDernierHisto = Sheets("HISTO").Cells(DestY - 1, 1).Value
    
    'on copie toutes les dates sup à DateDernierHisto
    Static ScrDate As Date
    
        
    Do
        ScrY = ScrY + 1
        ScrDate = Sheets("BDD").Cells(ScrY, ScrX).Value 'on relève la date dans BDD
        
        If ScrDate > DateDernierHisto And Not ScrDate = 0 Then
            'la date est supérieure à l'histo, on peut copier
            
            Static i As Integer
            For i = 1 To 3
                Sheets("HISTO").Cells(DestY, i) = Sheets("BDD").Cells(ScrY, ScrX + i - 1).Value
            Next
            
            'on passe à la ligne suivante dans histo
            DestY = DestY + 1
        
        End If
    
    
    Loop Until ScrDate = 0
    
    
    
    


End Sub


Function YLibreHisto() As Integer

    'renvoie le n° de ligne libre dans histo
    'peut être amélioré en :
    '  - partant de la dernière position libre connue lors de la dernière execution de cette fonction
    '  - ou bien par recherche par dichotomie (17 itérations max)
    
    Static y As Integer
    
    y = 1 'on se place sur la ligne d'entete
    Do
         
         y = y + 1 'on avance d'une ligne
    Loop Until Sheets("HISTO").Cells(y, 1).Value = "" 'on boucle tant que la cellule n'est pas vide
    
    YLibreHisto = y 'on renvoie la valeur
    
End Function
0