cs_derech
Messages postés4Date d'inscriptionmardi 30 octobre 2007StatutMembreDernière intervention 1 novembre 2007
-
30 oct. 2007 à 16:54
caco64
Messages postés69Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention14 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?
caco64
Messages postés69Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention14 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...
cs_derech
Messages postés4Date d'inscriptionmardi 30 octobre 2007StatutMembreDerniè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.
cs_derech
Messages postés4Date d'inscriptionmardi 30 octobre 2007StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
caco64
Messages postés69Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention14 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)
caco64
Messages postés69Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention14 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.