Macro VBA : mettre à jour une base d'après une liste

bibi_fricotin Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   -  
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Peut-on m'aider SVP :
Une base de données doit être mise à jour d'après un référentiel.
Il faudrait une macro du genre :
* activer classeur1
* sélectionner cellule
* boucle : tant que la cellule n'est pas vide
* nommer la cellule "nom1"
* activer classeur2
*sélectionner colonne1
* rechercher "nom1"
* copier
*activer classeur1
*selectionner colonne +1
*coller
*selectionner colonne -1 ligne +1
*fin de la boucle


Merci.


A voir également:

7 réponses

gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Si tu pouvais nous mettre un exemple de structure des données, sans éléments personnels, se serait plus facile de t'aider.
Pour communiquer tes classeurs tu les télécharges sur https://www.cjoint.com/ et tu mets ici les liens obtenus.
0
bibi_fricotin Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   23
 
Merci pour ta réponse.
Voici les liens (j'ai recréé des fichiers du même genre) :
pour le réferentiel (classeur2 dans l'exemple) : https://www.cjoint.com/?CJfbi2lhMyC

pour le fichier à mettre à jour (classeur1 dans l'exemple) : https://www.cjoint.com/?CJfbnDUR6eM

Les données des colonnes 3 et 4 du classeur2 (referentiel.xls) sont à mettre dans les colonnes 3 et 4 du classeur2 (MAJ.xls)

Merci.
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Je ne suis pas sûr qu'il te faille une macro pour cela.
En C2 tu mets la formule matricielle suivante :
=INDEX([referentiel.xls]Feuil1!$C1:$D65000;EQUIV(1;([referentiel.xls]Feuil1!$A1:$A65000=$A2)*([referentiel.xls]Feuil1!$B1:$B65000=$B2);0);COLONNE()-2)

Il faut valider avec ctrl+maj+entrée simultanés pour avoir le bon résultat.
Tu tires la formule sur D2 et tu double cliques sur la petite croix en bas à droite.
Tu as ainsi toutes tes valeurs. Si tu tiens vraiment à une macro c'est possible mais pas nécessaire.
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
0
bibi_fricotin Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   23
 
Merci pour ta réponse.
Très bonne idée et plus simple.
Néanmoins, pourrais-tu me donner la solution pour la boucle qui pourra me servir d'autres problèmes ?
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
pourrais-tu me donner la solution pour la boucle

Je t'avais demandé la structure de tes classeurs parce qu'il n'y a pas de macro passe partout. Un tableur présente de nombreuses fonctions qui permettent de résoudre beaucoup de cas. les macros sont là pour fournir des fonctions spécifiques adaptées à des cas particuliers.

Les macros soit-disant généralistes qui pullulent sur le net ne résolvent généralement pas la fonction espérée et il faut adapter. Je t'ai fait ta fonction avec plusieurs façons de faire les boucles :

https://www.cjoint.com/?CJfwpwKTNza

Si tu as des questions sur le code n'hésites pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bibi_fricotin Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   23
 
Merci beaucoup Gbinforme.
Je vois ça demain et te tiens au courant.
Bonne soirée.
0
bibi_fricotin Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   23
 
Bonjour,
Sur la formule avec INDEX, j'ai plutôt saisi la formule matricielle

"=INDEX('[referentiel.xls]Feuil1'!$C$2:$D$82;;COLONNE()-2)"

mais quand je la recopie, les données ne changent pas, ce sont toujours les mêmes, pourtant les codes changent : aurais-tu une explication ?
Merci.
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

"=INDEX('[referentiel.xls]Feuil1'!$C$2:$D$82;;COLONNE()-2)"

et ce qui est souligné dans ma formule, ce n'est pas pour la beauté ;-)
=INDEX([referentiel.xls]Feuil1!$C1:$D65000;EQUIV(1;([referentiel.xls]Feuil1!$A1:$A65000=$A2)*([referentiel.xls]Feuil1!$B1:$B65000=$B2);0);COLONNE()-2)

pourtant les codes changent mais tu n'en tiens pas compte !
0