Recherchev en VBA

William1501 Messages postés 2 Date d'inscription jeudi 3 février 2011 Statut Membre Dernière intervention 7 février 2011 - 3 févr. 2011 à 20:24
William1501 Messages postés 2 Date d'inscription jeudi 3 février 2011 Statut Membre Dernière intervention 7 février 2011 - 7 févr. 2011 à 16:03
Bonjour !

Je suis moins que débutant en VBA... toutefois voici ce que je cherche à faire.

J'ai un chiffrier Excel. Feuille 1, des codes sur 5 colonnes. Feuille 2 une table de correspondance.

Je veux remplacer tous les codes de la feuille1 par leurs correspondance feuille2

J'ai fait ceci mais c'est une cellule à la fois et j'aimerais que ce soit fait sur une plage de cellule (genre Feuille1 de A1 à G5000). Pour y arriver, j'avoue j'ai triché, j'ai enregistré ma macro... mais j'aimerais l'automatiser sur plusieurs cellules au lieu d'une seule... J'ai aussi mis un facteur inconnu au cas où il ne trouve pas de correspondance?

Sub Macro6()

    ActiveCell.FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(RC1,Données!R1C3:R238C4,2,0)),""inconnu"",VLOOKUP(RC1,Données!R1C3:R238C4,2,0))"
End Sub


Merci pour aide précieuse...

Guillaume

6 réponses

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
3 févr. 2011 à 21:45
Bonsoir Guillaume,
J'ai un chiffrier Excel (Drole de bête)
Tu semble avoir 2 tables.
Exemple Facture (Table 1) et Client (Table 2)
et tu as un code Table client dans Facture.
Tu dois déja créer une fonction qui te renvoi la correspondance
soit le nom du client avec son code.


Function Cherche_correspondance(code_client) as string
'Exemple elle renvoi un nom_client ou un numéro de ligne
End function

Puis tu associe cette fonction a un evenement
par exemple celui ci

Private Sub Bouton1_QuandClic()
' ici dans le classeur facture ce bout de code est executé si
' un bouton créé sur la feuille est appuyé
for each cell in range("A1:A...")
cell.offset(2,0).value=Cherche_correspondance(cell.value)
next
End Sub

Ai je bien saisie ?
Bonne prog CGSI3
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
4 févr. 2011 à 09:06
Bonjour Guillaune,

Je suis moi aussi débutant, et j'ai bien du mal avec "Function"

Le problème, c'est justement d'écrire le code de Function Cherche_correspondance(code_client)...

Faisons simple : Imaginons, en feuille "Données", une liste de Noms en colonne A et une donnée associée à un Nom à reprendre en colonne B :

Quel serait le code pour Cherche_correspondance(cell.value)?

J'ai moi aussi fait comme William: Le recours à " ActiveCell.Formula=... " réserve parfois de mauvaises surprises et reste très lent... donc il faudrait éviter cette méthode.

Merci beaucoup.

Cordialement
Rataxes64
0
userrrqi115 Messages postés 181 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 4 février 2011
4 févr. 2011 à 12:45
Hello,
Pour en revenir à la demande initiale, voici comment boucler sur une plage de cellule :
Sub Macro6()
For each cell in range("A1:A5000")
    cell.FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(RC1,Données!R1C3:R238C4,2,0)),""inconnu"",VLOOKUP(RC1,Données!R1C3:R238C4,2,0))"
result=cell.value
cell.value = result
Next cell
End Sub



BR
USERRRQI115
Simple user
Great brain
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
7 févr. 2011 à 10:24
Bonjour,

A force dde chercher il semble qu'il y ait une solution plus appropriée par la fonction :
Application.WorksheetFunction.VLookup



Seulement voila, je patauge dans l'aide et ne sais pas du tout comment configurer cette fonction : établir les tables de recherche, appeler la fonction, etc...

Je vais poster spécifiquement cette question, mais je pense que cette piste pourrait aussi rendre service à William.

Merci d'avance

Cordialement
Rataxes64
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
7 févr. 2011 à 12:18
Bonjour CerberusPau,
Je n'ai pas étudié ta demande en détail mais il semble me souvenir qu'il faut avant tout bien trier la table sur lequel tu effectue ta recherche car elle ne fonctionne que comme cela.
I existe également des fonctions dans la barre excel pour effectuer des tris sur des tableaux avec des critères.
Bonne prog CGSI3
0
William1501 Messages postés 2 Date d'inscription jeudi 3 février 2011 Statut Membre Dernière intervention 7 février 2011
7 févr. 2011 à 16:03
Bonjour à tous !

Merci pour vos réponses, c'est génial! Et je comprend un peu mieux ce que je fais grâce aux tutos et à votre aide.

userrrqi115, j'ai pris ta solution car plus "user simple" pour moi.

Toutefois, j'ai une dernière question. Avec ce code que tu as ajusté,

Sub Macro6()
For each cell in range("A1:A5000")
    cell.FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(RC1,Données!R1C3:R238C4,2,0)),""inconnu"",VLOOKUP(RC1,Données!R1C3:R238C4,2,0))"
result=cell.value
cell.value = result
Next cell
End Sub


ça fonctionne super bien par contre, il fait ceci :

A B
1 Code1 Correspondance1
2 Code2 Correspondance2
3 Code3 Correspondance3

c'est à dire qu'il lit la cellule A1 pour mettre la réponse dans B1. Je m'en parçcois car dans la colonne A, il met des "0" au lieu de mettre des "inconnus". Je voudrais qu'il remplace le code par sa correspondance dans la même cellule.

Ainsi

A
1 Code1 (Remplacé par correspondance1)
2 Code2 (Remplacé par correspondance2)

et ainsi de suite. Je pense que c'est dû au "RC1" dans le code mais je ne trouve pas comment lui indiquer de lire A1 et de le remplacer dans A1 et ainsi de suite pour le range("A1:A5000")

Merci de votre aide !

Guillaume
0
Rejoignez-nous