Forum Clubic

Rechercher/remplacer avec une macro dans Excel

Bonjour à tous,
ça paraît tout bête mais j’ai l’impression que la fonction rechercher/remplacer n’est pas valable pour les requêtes web.
J’ai plus de 7600 cellules à paramétrer individuellement…
Si c’est possible, quelle serait le code à écrire dans Visual basic pour modifier automatiquement les requêtes de toutes les lignes d’une colonne?
Par exemple modifier:
www.toto.fr…
www.toto.fr…
www.toto.fr…
et.
En:
www.toto.fr…
www.toto.fr…
www.toto.fr…
etc.

Merci.

Tu peux expliquer un peu plus ?
C’est le contenu de la cellule ou un lien associé que tu veux modifier ?

Salut gcc,
tu fais :
Données/Données externes/Nouvelle requête sur le web…
Là j’ai un lien différent par cellule, par exemple:
toto.fr/excel/majuscules.php?annuaire=68&candidat=101&ID=2

J’ai 200 lignes que j’ai configuré une à une, et je vais faire un copier/coller de cette colonne de 200 cellules dans la colonne suivante.
Dans cette colonne je veux donc faire un rechercher/remplacer de ceci par exemple:
Rechercher: 102&ID=2
Remplacer par 102&ID=3

Et j’ai 38 colonnes à faire ainsi…

Enregistrer une macro ne fonctionne pas, il faudrait donc créer cela avec Visual basic?

Si j’ai bien compris, dans la deuxième colonne, ID=2 deviendra partout ID=3,
et dans la suivante, il deviendra ID=4 etc …
Dans ce cas, au lieu de copier ta colonne1 dans les suivantes, tu utilises une formule pour incrémenter la valeur, et ensuite tu fais un copier/Collage spécial > valeurs pour retrouver du texte.

Je connais pratiquement pas Excel: on peut donc faire une formule pour les requêtes? Peux-tu me donner grosso modo la marche à suivre?
On est bien d’accord, mes cellules sont vides s’il n’y a rien dans mes tables sql…

Ah non, il n’y avait écrit nulle part que les colonnes (2, 3 …) étaient des résultats de requête.
Moi j’avais lu que tu les créais par copier/coller, puis modification depuis la première :

Euh…j’ai bien spécifié que c’était des requêtes web…ça prêtait à confusion?
Bon, désolé si je ne me suis pas bien expliqué.

Par le copier/coller, je peux quand même effectivement dupliquer ces requêtes “cachées”.

Donc pour l’instant j’en suis au même point :confused:

J’avais mal compris
En je ne pensais pas qu’en recopiant une cellule on recopiait la requête associée
Tu peux me dire comment tu fais ?

Sinon, je ne vois que la solution de passer par le VBA.
tu utilises ActiveSheet.QueryTables.connection() pour identifier la requête associée à ta cellule, puis tu réinjectes après modification.

Enfin, ca, c’est la théorie, je n’ai jamais pratiqué ce genre de chose.
Si ca ne marche pas, il faudra que tu me fournisses quelques données réelles pour voir ce qui ne va pas

ctrl+c puis ctrl+v :lol:
En fait c’est bizarre, lors de la création d’une requête j’ai une ligne perdue en-dessous qui contient aussi un paramétrage de la requête: je n’ai jamais compris pourquoi il y a toujours cette interligne.
Donc si je copie 1 requête il faut sélectionner la ligne en-dessous aussi, sinon le collage ne se fait pas.

Bon, je pense que sans lignes de codes visual basic, ce n’est pas possible de faire ce que je recherche…

En fait, il y a une option pour soit interdire, soit autoriser l’actualisation des données de la requête.
Et quand on accepte l’actualisation, c’est là qu’il doit stocker la requête par elle-même

Sinon, oui, il va bien falloir passer par le vba, mais comme tes requêtes sont déjà recopiées à leur place, du coup ca n’est pas très compliqué :
tu fais une boucle et tu déduis tes paramètres


for i = 1 to activesheet.querytables.count
  oldURL = activesheet.querytables.item(i).connection
  set R = activesheet.querytables.item(i).destination
  ' deduire le nouveau parametres 
  newId = R.column +1   
  'mettre à jour la requête
  activesheet.querytables.item(i).connection = left(oldURL, len(oldURL)-1) + mid(str(newId),2)
next

Pour la nouvelle valeur du paramètre, c’est bien sûr un exemple, il faut voir si cela correspond à la réalité

Ok merci, mais le problème c’est que je n’ai jamais touché à ces codes VBA…

En fait je modifie quoi pour adapter ton code à ce que je recherche?
A savoir remplacer
…toto.fr/excel/majuscules.php?annuaire=68&candidat=101&ID=2
par
…toto.fr/excel/majuscules.php?annuaire=68&candidat=101&ID=3
?

Normalement, rien, mais comme je ne l’ai pas testé, je te suggère de faire un fichier avec simplement quelques lignes et de voir ensuite cellule par cellule comment ça s’est comporté

J’ai bien essayé, mais il me surligne en jaune (mode débugage) cette ligne:
Set R = ActiveSheet.QueryTables.Item(i).Destination


J'ai oublié: il m'indique avant erreur 1004.

Difficile à savoir d’où ca vient sans voir le code
Tu as écrit ta fonction dans un module ou dans le code de la feuille ?
Et comment accèdes-tu à l’exécution du code ? par Outils > Macros ?

Eh bien je suis allé dans le vba, j’ai enregistré et ensuite j’ai fait effectivement appel au code enregistré via outils> Macros…


Oui, c'est le module1.

Je viens de tester, chez moi, ca marche (excel 2003)
… Sur un fichier constitué pour l’occasion, bien sûr

Après, difficile d’en dire plus sans avoir vu le fichier sur lequel tu travailles

Bon, je devais avoir des cellules qui parasitaient le bon déroulement de la macro.
J’ai fait un copier/coller de la colonne dans une nouvelle feuille vierge et ça a modifié le lien! :super:
Par contre le lien se finissait par 4 et il est remplacé par un 2? J’ai fait un boulette encore?


Ok, j'ai pigé, le chiffre se modifie selon la colonne! Je vois tout ça et te tiens au courant...merci pour tout!

Ok, ça marche!
Un dernier point.
Pour changer un autre paramètre de la requête, comme par exemple majuscules.php par espacessuppr.php, je change quoi dans le code?

Ca doit pouvoir se faire en rajoutant une ligne :

'mettre à jour la requête
oldURL = replace(oldURL, “majuscules.php”, “espacessuppr.php”)
activesheet.querytables.item(i).connection = left(oldURL, len(oldURL)-1) + mid(str(newId),2)