VBA excel ,

Loulou_92 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   4 724
 
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
loulou_92
 
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   Statut Contributeur Dernière intervention   4 724
 
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