XL 2019 Mise d'une feuille excel à partir d'une base de données

djennadi

XLDnaute Nouveau
Bonjour,

J'ai besoin de votre aide pour automatiser une extraction à partir d'une base de donnée. Le but c'est d'avoir une macro qui fait compare les deux colonnes A du la feuille 1 à la colonne A de la feuille 2, si y'a une nouvelle ligne la copier sinon NA.
Je vous mets un exemple de ce que je veux, sauf que sur celui la il faut cliquer plusieurs fois sur le bouton mis à jour.

Merci pour votre aide
 

Pièces jointes

  • classeur-exemple-eleves.zip
    11 KB · Affichages: 18

vgendron

XLDnaute Barbatruc
Bonjour

un essai avec ce code corrigé
VB:
Sub maj()
    Application.ScreenUpdating = False
    Set wsi = Sheets("mises à jour")
    Set wso = Sheets("Elèves")
    dli = wsi.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wsi
    dlo = wso.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wso
    
    For i = 2 To dli 'on parcourt toutes les lignes de wsi
        Set re = wso.Range("A2:A" & dlo).Find(wsi.Cells(i, 1), lookat:=xlPart) 'on cherche le numéro de dossier dans wso
        If re Is Nothing Then ' si non trouvé on ajoute une nouvelle ligne
            dlo = dlo + 1 'lam = ligne qui doit recevoir la nouvelle ligne
            wsi.Rows(i).Copy wso.Cells(dlo, 1) 'on copie la ligne de wsi vers wso
        Else
            lam = re.Row ' ligne à modifer est la ligne dans laquelle on a trouvé le n° de dossier
            wsi.Rows(i).Copy wso.Cells(lam, 1) 'on copie la ligne de wsi vers wso
        End If
        
    Next i
    Application.ScreenUpdating = True
End Sub

j'ai laissé la partie qui recopie une ligne à sa place lorsqu'elle existe déjà
 

chris

XLDnaute Barbatruc
Bonjour à tous

Avec 2019 pourquoi utiliser le format xls périmé depuis plus de 13 ans ?

Plutôt que VBA, tu pourrais utiliser PowerQuery, totalement intégré à ta version, pour récupérer directement les données depuis la base et soit garder ces données à jour, soit mettre à jour le tableau de l'onglet Élèves s'il a un intérêt par rapport à la base à jour...

Tableau qui devrait être en tableau structuré, ce qui si tu restes en VBA permettra de tirer partie du tableau (listObject) et ne pas utiliser les vieilles méthodes comme
wsi.Cells(Rows.Count, 1).End(xlUp).Row
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 989
Membres
101 856
dernier inscrit
Marina40