VBA excel ,

Fermé
Loulou_92 Messages postés 1 Date d'inscription mercredi 19 mars 2008 Statut Membre Dernière intervention 19 mars 2008 - 19 mars 2008 à 15:35
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 21 mars 2008 à 11:41
Bonjour à tous ! :-).

Je pratique déjà VBA depuis un petit moment..mais plutot sous access. Je rencontre un souci pour mettre à execution l'idée suivante :

- Importer des données à partir d'une requete d'une base access et les copier dans une feuille excel (=> cette étape là est OK).

- Proposer la possibilité de modifier les données via une table de correspondance qui serait dans un deuxième onglet.
Ex :

Valeur base: Valeur choisies ( par l'utilisateur) :
val1 val1bis
val2 val2bis
val3 val3bis
val2 val2bis
val4 val4bis

et un bouton cliquable "MAJ la base", qui remplacerait chaque occurence des valeurs de la base par les valeurs de l'utilisateur.

Cela peut se faire, via des boucles simples mais le temps de calcul est long (de l'ordre de n², où n est le nombre de ligne de la base).


Existe t'il un moyen plus simple pour procéder ? ( j'ai vu dans d'autres code l'utilisation de la fonction "offset"...mais je ne sais pas à quoi elle sert).

Si mon explication n'est pas claire, je peux vous envoyer le fichier en question .

Merci d'avance pour votre aide.

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
21 mars 2008 à 09:27
bonjour

j'ai vu dans d'autres code l'utilisation de la fonction "offset"...mais je ne sais pas à quoi elle sert).

Si tu prends l'aide VBA, tu verras que "cette propriété renvoie un objet Range qui représente une plage décalée de la plage spécifiée" c'est-à-dire que quand tu écris :

range("a1").offset(2,3) => tu es en D3 = colonne A décalée de 3 et ligne 1 décalée de 2

Cela te permet de trouver l'équivalence :
si valeur cherchée = cells(ligne,1) le résultat est cells(ligne,1) .offset(0,1) dans ton exemple.
0
Salut gbinforme!

Merci pour ta réponse...c'est clair maintenant. Mais malheuresement cela ne m'aide pas à résoudre mon problème, à savoir prendre en compte les mises à jour sur la base, tel qu'expliqué dans mon premier message...

Si quelqu'un a des idées...

Merci d'avance.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 704
21 mars 2008 à 11:41
bonjour

Désolé, j'avais bien vu que je ne répondais qu'à une partie pour le reste comme je n'ai qu'une vague idée de ton fichier, je te suggères d'essayer de le faire avec :
Cells.Replace What:="val1 ", Replacement:="val1bis", ...

Mais tu dois faire une boucle sur les valeurs, à toi de tester selon tes données et le nombre de substitutions à faire.
for i = 1 to ubound(ancien)
Cells.Replace What:=ancien(i), Replacement:=nouveau(i), ...
next i
0