Coder le remplacer dans VBA

Résolu/Fermé
Utilisateur anonyme - 27 déc. 2012 à 18:29
 Utilisateur anonyme - 2 janv. 2013 à 19:08
Bonjour,

je suis débutante en création de macro et j'ai un petit soucis.

Je souhaite remplacer dans un recherchev le table matrice ainsi que le numéro index de colonne

ex:

=RECHERCHEV(I1;[Classeur1]Feuil1!$B:$G;4;0)

à remplacer par

=RECHERCHEV(I1;[Classeur2]Feuil1!$A:$D;3;0)

C'est une manipulation qui se passe très bien en faisant :

ctrl + H et je remplace " [Classeur1]Feuil1!$B:$G;4 " par " [Classeur2]Feuil1!$A:$D;3 " dans les formules.


Par contre c'est une manip que je dois faire tous les jours quasiment sur plusieurs colonne de trois feuilles différents avec des tables matrices qui varient à chaque fois entre les feuilles mais qui sont toujours les mêmes d'une mise à jour à l'autre.

Merci d'avance

4 réponses

Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
27 déc. 2012 à 23:27
Bonjour,
Ce n'est pas très clair, on dirait que vous récupérez des données d'un autre classeur, pouvez-vous donner plus détails ?

0
Utilisateur anonyme
28 déc. 2012 à 06:33
Bonjour,

oui je récupère les données d'une base article.
J'ai un premier classeur où j'ai une présentation avec une base articles produits finis et je veux réutiliser la même présentation mais en la remplissant avec la base articles composants.
Donc mon classeur 1 devient mon classeur 2, je peux aussi avoir un changement de feuil1 vers feuil2 ou 3 et que la base ne soit plus les même colonne comme dans mon exemple : B:G devient A:D.

Aly
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
28 déc. 2012 à 10:52
Bonjour,
Merci, mais cela n'explique pas ceci : Par contre c'est une manip que je dois faire tous les jours quasiment sur plusieurs colonne de trois feuilles différents avec des tables matrices qui varient à chaque fois entre les feuilles mais qui sont toujours les mêmes d'une mise à jour à l'autre.
Pourquoi ne pas copier directement la feuille du classeur 2 dans une nouvelle feuille du classeur 1 et ainsi votre formule fait référence à cette dernière et plus de modification ... !

0
Utilisateur anonyme
28 déc. 2012 à 14:22
Bonjour,

Mes bases de données sont des tables qui évoluent et se mettent à jour à partir de requètes (les requètes peuvent être journalières ou hebdomadaires).
Copier ma base de données composants (mon classeur 2) dans ma base de données articles produits finis (classeur 1) ne résoudra pas mon problème car lors de la mise à jour de la base, il faudra que je reprenne toutes les formules (ce que je fais actuellement à la main en utilisant le remplacer).

Ma formule de recherche ne se trouve pas dans une seule colonne, elle se trouve dans plusieurs colonnes différentes de ma page de calcul (environ 500 à 600 cellules).

Le fait d'avoir plusieurs classeurs ne me pose pas trop de problème, il s'agit plutôt de modifier ma formule de recherchev.
Elle sera déjà paramétrée une fois et je souhaite répliquer mon onglet d'origine (avec la première formule) trois fois en modifiant uniquement la table matrice et le numéro d'index de colonne en fonction de la base avec laquelle je souhaite alimenter mon onglet. Tout ça à l'aide d'une macro si c'est possible.
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
28 déc. 2012 à 15:37
Bonjour,
Eh bien c'est encore moins compréhensible et impossible de comprendre la structure de vos classeurs.
Je pense qu'il serait mieux d'avoir un exemple concret.

0
Utilisateur anonyme
2 janv. 2013 à 19:08
Bonjour,

mon code vba ressemblait à ça:

Cells.Replace What:="'[Classeur1]Feuil1!$B:$G;4", Replacement:= _
"'[Classeur2]Feuil1!$A:$D;3", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
:=False, SearchFormat:=False, ReplaceFormat:=False

et le problème était que dans Excel, le séparateur d'argument est ; (point-virgule)

et dans VBA, le séparateur d'argument devient , (virgule)

Cells.Replace What:="'[Classeur1]Feuil1!$B:$G,4", Replacement:= _
"'[Classeur2]Feuil1!$A:$D,3", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase _
:=False, SearchFormat:=False, ReplaceFormat:=False

Voilà

Merci
0