Excel VBA

cs_derech Messages postés 4 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 1 novembre 2007 - 30 oct. 2007 à 16:54
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007 - 1 nov. 2007 à 13:14
Bonjour,

Je veux faire une table de correspondance sur excel en utilisant VB, mais je n'ai jamais fai et ne sais pas par ou commencer.

Je souhaite afficher le nom du "pays" lorsque je rentre le nom de mon client. Je souhaiterais vous envoyer un ex sur feuille excel mais je ny parviens pas.

Quelqu'un aurait t'il un exemple de code pour une table de correspondance?

Merci.

8 réponses

h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
30 oct. 2007 à 22:32
bonjour,
je pense que té pas oubligé pour faire un code VB.
le plus simple est d'utilisé directement dans ta feuille excel des
recherchev

Un problème = des solutions
programation .....
0
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
30 oct. 2007 à 22:42
Je ne vois pas tellement l'intérêt du VB pour faire ça.
Perso, j'utiliserais la fonction recherchev (ou rechercheh selon le cas) ou même index, voire indirect(adresse(equiv())).

Dans le cas, où tu souhaiterais vraiment utiliser le VB, c'est vraiment très simple. Comme tu ne donnes pas beaucoup d'éléments, je vais partir sur un cas concret que tu adapteras.
Donc, je suppose que tes clients sont répertoriés dans la "feuille 1" et que la colonne B correspond à tes clients et la colonne C, le pays correspondant.
En parallèle dans l'onglet "feuille 2", le nom du client est écrit en "D6" et tu veux indiquer le pays en "E6".

Alors :
dim client as string, pays as string
dim i as long

client = "feuille 2".Celles(6,4).value
i = 0
do
    i = i+1
    if "feuille 1".cells(i,2).value = client then
        pays = "feuille 1".cells(i,2).offset(0,1).value
        exit do
    end if
loop

"feuille 2".Celles(6,4).offset(0,1).value = pays

Voilà, ça devrait à peu près marcher
Evidemment, c'est pour du VBA sur Excel...

La haine aveugle n'est pas sourde
0
cs_derech Messages postés 4 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 1 novembre 2007
31 oct. 2007 à 09:38
Bonjour caco64,

merci pour ton aide, je suis en train d'adapter ton code.

En fait j'utilise VB dans excel pour un projet , tous mes fichiers sont automatisés. Je ne sais pas si je peux utiliser une formule excel (equiv & index ou recherche v) car je fais tout en macro. J'ai besoin que à la fin mes fichiers se modifient automatiquement juste en lançant la macro.

Si tu as des conseils à me donner n'hésite pas , je suis débutant sur VB.
0
cs_derech Messages postés 4 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 1 novembre 2007
31 oct. 2007 à 10:53
J'ai un problème, rien ne s'affiche. 
Mes clients sont répertoriés dans la feuille "Inputs"(feuil1)  la colonne B correspond à mes clients et la colonne C correspond aux pays qui s'y rapportent (matricequicommence en b2 et fini en c38).
En parallèle dans la feuille "SC-country" (feuil2), le nom du premier client est écrit en "b8" et je veux indiquer le premier pays en "a8", ainsi de suite.

 voici mon code adapté:

Sub tablecorres()



' si les tables changent alors modifier n



Dim BTN As String, country As String
Dim i As Long





BTN = Sheets("SC-country").Cells(8, 2).Value
Do
i = 0
  i = i + 1
    If Sheets("Inputs").Cells(i, 2).Value = BTN Then
        country = Sheets("Inputs").Cells(i, 2).Offset(0, -1).Value
        Exit Do
    End If
   
Loop
Sheets("SC-country").Cells(8, 2).Offset(0, -1).Value = country





End Sub

Pouvez-vous me dire ce qui ne va pas s'il vous plait? Le code fonctionne mais ne s'arrete pas (il ny a pas de beug) et rien ne s'affiche dans ma colonne A de la feuille SC-country (colonne ou je veux que mes pays apparaissent). Merci


PS: Devrais-je donner une limite à i (avec un "for" peut etre, en donnant la valeur 40 à n ) Si c'est le cas comment intégrer le "for" dans ce code. J'ai essayé plusieurs choses mais sans résultat
0

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

Posez votre question
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
31 oct. 2007 à 22:56
Réponse en 2 temps.
Tout d'abord sur la nécessité du VB.
Ecris en C8, la formule : = RECHERCHEV(B8;Inputs!$B$2:$C$38;2;FAUX)
Tu vois bien qu'il retrouve le pays correspondant sans souci et si tu modifies des noms dans le tableau, il recalcul en direct.

En revanche, je pense que maintenant que tu t'es lancé dans une macro ce serait dommage de t'arrêter en si bon chemin !

Donc, deuxième point : pourquoi ton code ne marche pas ?
Tout simplement parce que tu écris i = 0 , à l'intérieur de la boucle do. Tu regarderas, ce que je t'avais envoyé, l'initialisation se fait en amont de la boucle... sinon, il remet à 0 à chaque tour ; i n'atteint jamais la valeur de la ligne correspondant au nom de ton client et donc tu ne sors jamais de la boucle.

Tu peux éventuellement te mettre une limite si tu veux (cela n'a pas vraiment d'intérêt mais c'est une sécurité) en remplaçant loop par loop until i = 40 ou la valeur que tu veux.

Il y avait un autre problème, pour country tu faisais un décalage vers la colonne de gauche (offset(0,-1)), alors que dans ta feuille "Inputs" les pays sont en C et les clients en B => offset(0,1)

La haine aveugle n'est pas sourde
0
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
31 oct. 2007 à 23:01
Je te remets le code modifié qui fonctionne bien.
J'ai rajouté une petite fonctionnalité : une boucle sur les clients de ta page






"SC-country". Au cas où tu en aurais plusieurs à partir de la cellule B8 (j'ai fait une boucle de 1 a 6, à toi d'adapter le nombre à ton cas.









Sub tablecorres()

Dim BTN As String, country As String
Dim i As Long, j As Long
' si les tables changent alors modifier n

For j = 1 To 6
    BTN = Sheets("SC-country").Cells(7, 2).Offset(j, 0).Value
    i = 0
    Do
      i = i + 1
        If Sheets("Inputs").Cells(i, 2).Value = BTN Then
            country = Sheets("Inputs").Cells(i, 2).Offset(0, 1).Value
            Exit Do
        End If
    Loop
    Sheets("SC-country").Cells(7, 2).Offset(j, -1).Value = country
Next j

End Sub



Encore une fois, avec recherchev, on fait tout aussi bien.








La haine aveugle n'est pas sourde
0
cs_derech Messages postés 4 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 1 novembre 2007
1 nov. 2007 à 11:14
Je te remercie pour ton aide, ca fonctionne tres bien!
0
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
1 nov. 2007 à 13:14
Y'a pas de quoi.

La haine aveugle n'est pas sourde
0
Rejoignez-nous