Macro VBA : mettre à jour une base d'après une liste
bibi_fricotin
Messages postés
201
Statut
Membre
-
gbinforme Messages postés 14930 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14930 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.
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.
7 réponses
-
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. -
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. -
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 -
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 ?-
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.
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Merci beaucoup Gbinforme.
Je vois ça demain et te tiens au courant.
Bonne soirée. -
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. -
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 !