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   -
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.

7 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  2. bibi_fricotin Messages postés 201 Statut Membre 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
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  4. bibi_fricotin Messages postés 201 Statut Membre 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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bibi_fricotin Messages postés 201 Statut Membre 23
     
    Merci beaucoup Gbinforme.
    Je vois ça demain et te tiens au courant.
    Bonne soirée.
    0
  7. bibi_fricotin Messages postés 201 Statut Membre 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
  8. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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