XL 2019 excel vba mise à jour fichier selon deux critères

alban1991

XLDnaute Nouveau
Bonjour à tous,

j'ai actuellement deux fichier "Mise à jour" et "Base de données",
les lignes de mon fichier "Mise à jour" sont mis à jour avec un bouton, en fonction des lignes de mon fichier "Base de données",
pour faire cela, actuellement j'ai vais comparer avec un N° de matricule se trouvant dans la colonne B du fichier "Base de données" et la colonne A du fichier "Mise à jour", puis mettre à jour si je change des choses dans ma Base de données..

Voici ma requête, Je voudrais comparer en fonction du N° de matricule ET du Nom, soit deux critères, et non plus un seul, mais je bloque sérieusement :/
quelqu'un à une idée ?

merci par avance
 

Pièces jointes

  • Base_de_données.xlsx
    10.1 KB · Affichages: 10
  • Mise à jour.xlsm
    20.1 KB · Affichages: 12

job75

XLDnaute Barbatruc
Bonjour alban1991, bienvenue sur XLD,

Le plus simple est de copier le 1er fichier sur le second en utilisant des formules de liaison.

Cela sur une plage assez grande, les valeurs zéros seront masquées (menu Fichier => Options).

Téléchargez les fichiers joints dans le même dossier (le bureau).

A+
 

Pièces jointes

  • Base_de_données.xlsx
    10.1 KB · Affichages: 5
  • Mise à jour(1).xlsx
    13.6 KB · Affichages: 8

alban1991

XLDnaute Nouveau
Bonjour Job75, merci de ta réponse

effectivement cette solution est plus simple, en revanche je ne veux pas l'utiliser car
sur mon fichier "Base de données" je vais avoir plus de 30 feuilles, tu comprendras que je n'ai pas envie de m'amuser à faire ça pour toutes les feuilles :) (et peut etre même d'autre fichier Base de données par la suite)

et que VBA peut surement s'en charger bien plus rapidement que moi haha
 

alban1991

XLDnaute Nouveau
On s'écarte du pb posé de base,
dans les classeurs que j'ai joint,
lorsque je modifie des cellules dans le classeur "Base de données" puis que je clic sur mon bouton Mettre à jour dans mon classeur "Mise à jour", les infos sont bien modifiées dans celui-ci, (voir mon code VBA, module 1)

la modification des cellules se fait avec le recherche du N° Matricule,
je souhaiterais a l'avenir que la modification se fasse en fonction du N°Matricule et du Nom..
est-ce plus clair ?
 

job75

XLDnaute Barbatruc
Copie des 30 feuilles du fichier source :
VB:
Sub MiseAJour()
Dim chemin$, fichier$, i%
chemin = ThisWorkbook.Path & Application.PathSeparator
fichier = "Fichier source.xlsx"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = Sheets.Count To 2 Step -1
    Sheets(i).Delete
Next
If Dir(chemin & fichier) = "" Then MsgBox "'" & fichier & "' introuvable !": Exit Sub
With Workbooks.Open(chemin & fichier)
    For i = 1 To .Sheets.Count
        .Sheets(i).Copy After:=ThisWorkbook.Sheets(i)
    Next
    .Close
End With
Sheets(1).Activate
End Sub
 

Pièces jointes

  • Fichier destination(1).xlsm
    18.7 KB · Affichages: 10
  • Fichier source.xlsx
    59.8 KB · Affichages: 9
Dernière édition:

alban1991

XLDnaute Nouveau
ce n’est pas du tout la copie des 30 feuilles qui me pose problème..

lors de la mise à jour des donnés, dans mon code actuel, je vais comparer les numéros Matricule de mon ficher Base de données et Mise à jour..
dans le code modifié, je voudrais pouvoir comparer le numéro de Matricule ET le Nom, tu comprends ?
 

alban1991

XLDnaute Nouveau
ce sera sûrement plus clair avec plus d’infos tu as raison,
dans un 1er remps je vais copier les données (les 30feuilles) sur mon classeur Mise a jour,
sauf que certaines données des 30 feuilles peuvent être modifiées quelque temps plus tard,
donc dans un second temps je vais devoir mettre à jour mon classeur Mis à jour avec les valeurs modifiées,
et cette mise à jour je la fais via mon bouton,
tu visualises mieux ?
 

dg_Bright

XLDnaute Nouveau
Je te conseille ce pseudo code

- lecture des données de la feuille Base_Donnees dans: tbl_donneeBase()
-lecture des données de la feuille Mise à jour: tbl_Mise_a_jour()
-tbl_ResultatRequete() à redimensionner dans le code

'Compter le nombre de matricules absent dans le tableau de la feuille mise à jour
n=0
pour i= lbound( tbl_donneeBase,1) to ubound( tbl_donneeBase,1)
pour k=lbound( tbl_Mise_a_jour,1) to ubound( tbl_Mise_a_jour,1)
'comparaison des matricules et noms des deux tableaux
si tbl_donneeBase(i,1) <> tbl_Mise_a_jour(k,1) and tbl_donneeBase(i,2) <> tbl_Mise_a_jour(k,2)alors
n=n+1
finsi
finpour
finpour

'vérifier si n=0 sortie de la procédure car pas de mise à jour
redimensionner tbl_ResultatRequete(1 to n, ....)

'Récupération des lignes absentes dans la feuille Mise à jour
n=0
pour i= lbound( tbl_donneeBase,1) to ubound( tbl_donneeBase,1)
pour k=lbound( tbl_Mise_a_jour,1) to ubound( tbl_Mise_a_jour,1)

'comparaison des matricules et noms des deux tableaux
si tbl_donneeBase(i,1) <> tbl_Mise_a_jour(k,1) et tbl_donneeBase(i,2) <> tbl_Mise_a_jour(k,2) alors 'matricule et nom absents
n=n+1
pour p=lbound( tbl_Mise_a_jour,2) to ubound( tbl_Mise_a_jour,2)
tbl_ResultatRequete(n,p)=tbl_donneeBase(i,p)
finsi
finpour
finpour

'Détecter la dernière ligne non vide depuis le A1048576 de la feuille mise à jour
transfert des données à l'aide de boucle
 

Discussions similaires

Statistiques des forums

Discussions
311 712
Messages
2 081 802
Membres
101 819
dernier inscrit
lukumubarth