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
 

Fichiers joints

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+
 

Fichiers joints

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
 

job75

XLDnaute Barbatruc
Pas clair, qu'est-ce que vous voulez faire avec les 30 feuilles ?

S'il s'agit de toutes les copier faites une copie du fichier Base_de_données.xlsx, point barre.
 

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
 

Fichiers joints

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 ?
 

job75

XLDnaute Barbatruc
Je comprends mais je ne vois pas l'intérêt de faire cette comparaison, pourquoi ne pas tout copier ?
 

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 ?
 

alban1991

XLDnaute Nouveau
Je me suis mal exprimé et j'en suis desolé..

je ne veux pas faire une copier des feuilles entièrement, mais seulement les données.
que ces données apparaissent les unes a la suites sur la feuille Acceuil par exemple
 

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
 

dg_Bright

XLDnaute Nouveau
En général je dis bienvenue aux nouveaux arrivants quand au moins ils nous disent bonjour.
Bonjour,
Désolé pour le manquement.
C'est vrai que c'est ma première participation mais je suis inscrit, il y a pas mal de temps.
Cependant, je m'excuse une fois de plus pour le manquement.
Cordialement
 

job75

XLDnaute Barbatruc
Alors bienvenue sur XLD dg_Bright.

En général les macros utilisées ici utilisent le langage de programmation Visual Basic for Applications.

A+
 

dg_Bright

XLDnaute Nouveau
En effet, j'ai juste voulu donner une piste de réflexion. Donc j'ai laisser ce pseudo code qui constitue le coeur de la macro pouvant répondre à sa préoccupation. Il peut être facilement programme en VBA.
 

dg_Bright

XLDnaute Nouveau
En effet, j'ai juste voulu donner une piste de réflexion. Donc j'ai laisser ce pseudo code qui constitue le coeur de la macro pouvant répondre à sa préoccupation. Il peut être facilement programme en VBA.
c'est un plaisir de participer désormais aux discussions. Merci surtout pour l'accueil
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas