VBA je suis BLOQUER :'(

Résolu/Fermé
Katarinas - 11 sept. 2007 à 16:45
Katarinas Messages postés 26 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 8 février 2008 - 13 sept. 2007 à 11:28
Bonjour

Voila maintenant 6h que je cherche une solution et je me decide enfin a demander de l'aide.
Tous d'abords je suis un tout nouvequ dans le monde du Vba... Pardon d'avance de mon ignorance ou des questions bete que je pourais poser.

Je vous explique mon probleme:

Je suis sous exel j'ai programmer un ComboBox afin de repertorier une liste de client (A, B, C, ...) une fois le client choisis, j'aimerai qu'en fonction du choix je puisse mettre dans une autre cellule une texte associe
ex:

Client A paiement sous 10 jours
Client B paiement sous 30 jours
Client C paiement sous 15 jours
...

If Range("A1") = "Client A" then
Range ("D4") = "paiement sous 10 jours"
End If

Ceci etai le premier probleme.
Voici le second:

Suite a un choix dans une ComboBox encore une fois il faudrait y associer une formule
ex:

Cuivre dia 8mm lg 1000m POIDS?
Alu
...


If Range("A1") = Cuivre then
Range("POIDS") = aire du cercle par la lg .... x densité !!! (ya que sa qui change) / ......


j'espere que je me suis fais comprendre.

Merci d'avance pour vos reponses

24 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
11 sept. 2007 à 22:09
Bonsoir Katarinas,


Pour le premier problème c'est parce que tu compares l'objet cellule avec le texte "Client A", ce qui fait qu'il n'entre jamais dans la condition. Tu devrais invoquer le texte de l'objet cellule par sa propriété Text :
 If Range("A1").Text = "Client A" Then
        Range("D4") = "paiement sous 10 jours"
 End If

L'autre j'ai pas compris mais il souffre sûrement aussi du même problème ^^
1
en pseudo code cela devrait te donner ceci :


Range("D4") = fReturnConditionForClient(ValeurChoixTexteDeLaComBoxClient)


avec

Function fReturnConditionForClient(sClient As String) As String
'sClient = ChoixValeurTexteDansComboClient

Dim sCondition

'Rechercher dans la feuille pour la colonne A (liste des Clients) l'occurence sClient
'utilisation boucle : For, While, Until ... au choix ...

'lorsque l'occurence est trouvé ;

'if sClient = Range("Feuil(n)!A(i)").text => n = numero de la feuille, i numero de la cellule

'sCondition = Range("Feuil(n)!B(i)").text
' Break

'EndIf

'Return sCondition

EndFunction

CQFD ? avec un p'tit RTFM quand meme
1
Katarinas Messages postés 26 Date d'inscription jeudi 13 septembre 2007 Statut Membre Dernière intervention 8 février 2008 2
13 sept. 2007 à 11:28
Les fonctions INDEX et EQUIV
La fonction précédente comme vous le constatez à ces limites : la colonne de recherche doit se trouver à gauche de la colonne de résultat. Pour palier à ceci vous pouvez utilisez conjointement 2 fonctions :

EQUIV, qui va vous donner l'emplacement d'une valeur dans une colonne ou une ligne,
INDEX, qui renvoie une donnée d'une liste (en ligne ou colonne) à partir de sa position dans la liste.
Reprenons l'exemple précédent :

Date Produit Prix unitaire Taux TVA Nombre
01/10/2004 aa 10,50 5,5% 10
02/10/2004 zz 2,50 5,5% 125
05/11/2004 bb 3,00 19,6% 23
03/10/2004 dd 50,25 19,6% 5

Si vous voulez savoir quel est le produit vendu à 3,00 € (attention cela ne me donnera que le 1er produit à ce prix s'il y en a plusieurs tout comme RECHERCHEV), procédez ainsi :

Dans une cellule, par exemple F1, tapez 3 (c'est à dire la valeur à rechercher)
Dans une autre cellule, par exemple G1, tapez la formule suivante en considérant que le tableau ci-dessus se trouve en A1:E5 :
=EQUIV(F1;C1:C5;0)
F1 est la valeur que vous recherchez
C2:C5 est le tableau dans lequel vous recherchez la valeur, ici je n'inclue pas les titres
0 doit être mis pour rechercher une valeur exacte (pour les autres valeurs voir l'aide)
Cette formule vous renverra 3 car la valeur 3 se trouve en 3ème position dans la plage C2:C5
Dans une cellule, par exemple H1, tapez la formule suivante :
=INDEX(B2:B5;G1)
B2:B5 est le tableau dans lequel je veux lire le résultat (tout comme pour la recherche je n'inclue pas les titres). Ce tableau doit avoir la même dimension que celui dans lequel on a effectué la recherche.
G1 représente la position où je dois lire la donnée dans ce tableau, ici la 3ème position. Ce qui vous donne bien bb
Vous pouvez combiner ces 2 fonctions en utilisant la formule suivante :
=INDEX(B2:B5;EQUIV(F1;C1:C5;0))

SOURCE : https://www.excel-exercice.com/

Ben je me suis pris la tete pour rien :s

Merci a tout le monde !!!
Grace a vous j'en ai appris beaucoup
1
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
11 sept. 2007 à 22:17
Sinon hein, de manière générale, écrire une formule dans une cellule par programmation se fait de la même façon que directement dans le tableur avec Range("la cellule") = "=A9*A11*A10" admettant que A9, A11 et A10 représentent respectivement l'aire, la longueur (ou largeur) et la densité...

Et comme tu débutes en VB(A) je te conseille de commencer tous tes scripts par l'instruction
Option Explicit
qui force à déclarer les variables. Ainsi tu as moins de chances de faire une erreur de frappe, l'interpréteur te signalera une erreur là où tu utilises une variable que tu n'as pas déclarée.
0

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

Posez votre question
Merci bcp Posotaz
tu m'aide beaucoup sur le point du : .text que je n'avais pas vu

Maintenant dans le meme principe je voudrais:

If Range("A1").Text = "Client A" Or "Client Z" Or "Client DE" ... Then
Range("D4") = "paiement sous 10 jours"
End If

Helas cela ne fonctionne pas
0
Me revoila en pleine recherche :)

If Range("A1").Text = "Client A" Then
Range("D4") = "paiement sous 10 jours"
End If
If Range("A1").Text = "Client Z" Then
Range("D4") = "paiement sous 10 jours"
End If

Jusque la sa marche mais j'ai une liste de 500 Client y aurait il quelque chose de plus simple?

Merci d'avance
0
Bonjour,

Tu peux essayer d'automatiser ta recherche de condition en passant par une fonction :

ex :

dans ton code générale tu aurais ceci :

Range("D4") = fReturnCondition (Range("D1").Text)

et la fonction aurait cette tete :

Function fReturnCondition (sClient As String) As String

Dim sCondition As String

Evaluate sClient

When "Client A"
sCondition = "paiement sous 10 jours"

When "Client B"
sCondition = "paiement sous 20 jours"

When "Client C"
sCondition = "paiement sous 10 jours"

.
.
.
.

When "Client Z"
sCondition = "paiement sous 10 jours"

Else
sCondition = "Client inexistant"

EndEvaluate

Return sCondition

EndFunction
0
Sa m'eleve deja beaucoup de ligne je te remercie.
Helas il me reste tou de meme 500 clientS a taper
Existe il une limite de taille (je m'explique):

If Range("A1").Text = "Client A" Or Range("A1").Text= "Client Z" Or Range("A1").Text ="Client DE" ... Then
Range("D4") = "paiement sous 10 jours"
End If

j'ai vu que cela marchait pour 10 x Or mais puis je mettre les 500 ?
0
Ou peu etre me mettre en relation avec les données de la combobox non ?
Existe il un code pour:

Combobox ---> Rowsource Feuil1!A1:A500
et mettre en relation avec Feuil1!B1:B500
Avec A1 correspond a B1

J'espere que je me suis fais comprendre :s
0
Le plus simple serait qu'a la création de ton client tu lui associe un code condition.

Lors de la creation de ta combo ce code lui serait affecté.

Il ne te suffiras plus qu'à faire une fonction qui te retourneras le libélle du code condition associé à ton Client.
0
Sûr que tu peux le faire, mais je ne t'explique pas la lisibilté et le maintient de ton code par la suite.

Si je comprend bien tu as plusieurs Clients auquels tu veux accorder une et une seule condition.

Tu as une liste de Client dans une combobox. A partir de Quoi construis cette combo (fichier Excel, Table Clients d'une Base de donnée, ...) ?
0
j'ai une liste de client sous exel en feuil3!A1:A500

En Feuil3!B1:B500 jai leurs conditions de paiement

En Feuil3!C1:C500 j'ai encore une donnee

j'ai construit la combobox sous exel afin que le choix defini par l'operateur remplisse un tableau sous la feuille 2
0
Pas trouver de solution :'(
Je me tape les 500 a ecrire :s
Et je vous avoue... C'est long et emm....

Merci pour votre aide en tout cas
0
Je viens de relire ton pb de depart et je l'associe à ton dernier post. Voilà ce que j'en ai compris :

- Dans la meme feuille excel tu as une liste de client en colonne A associé à des conditions en colonne B. La colonne A permet de construire ta ComboBox.

- Le Choix d'un client effectué dans la ComboBox doit te retourner la condition associé de la colonne B qui doit etre affiché dans une cellule spécifique.

Ai je compris ton pb ?
0
Tout a fait
0
Eh bien voilà ... tt les éléments sont rassemblés ...

Le choix dans la ComboBox te retourne le Client. Avec le Client retourné tu recherches la ligne correspondante dans la colonne A. Lorsque tu as la ligne correspondante tu te deplace de +1 pour etre sur la colonne B et d'avoir la condition associée pour ce Client. Il te suffit de recupérer cette valeur pour l'afficher dans la cellule spécifique ... CQFD
0
CQFD Tu as trouver la reponse mais ... tu le traduit comment en language vb :s
Merci Merci Merci pour ton aide
0
Aïe ...

Je ne suis pas très expert en VBA ...

Mais grosso modo cela devrait donner ceci :

- Choix dans la ComboBox du Client te retourne la valeur texte.

- Avec cette valeur texte, rechercher en colonne A de la feuille contenant la liste des Clients la ligne correspondante.

- Lorsque la ligne est trouvé, incrémenté de +1 sur la colonne pour se positionné en colonne B => correspondance avec la condition associé à ce Client.

- retourné la valeur texte de la colonne B dans la celulle spécifique.

CQFD ?
0
Sa ma lair correct mais je ne sais pas le faire en vb

J'espere que quelqu'un pourra me le traduire en tout cas merci bcp ShaBoo.
0
rhooo ...

Allez ... un ch'ti t'effort ... tu as tt les éléments ...

il te suffit d'ecrire la fonction de recherche en utilisant une boucle de recherche d'un Client pour retrouver sa condition ...

(Tape F1 pour plus de renseignement ... ;p)
0
lool je ne me connecterai plus jamais avec ce pseudo quand je taurai montrer ou j'en suis ^^ :

Private Sub Recherche()

Dim sClient As String

Range("R1").Text = sClient

sClient.Find ("feuil3!J1:J500")

If sClient = Range("Feuil3!J(i)").Text Then
With 0 < i < 500
End If

End sub


laisser moi au moin une excuse:
Je me suis mis au vb depuis moin de 10 jours mais je vais y arriver ...
0
'Sub Recherche()
'Dim Plage As Range
'Dim sClient As String
'Range("R1")=sClient
'Set Plage = sClient.Find("Feuil3!J1:J500")
'Plage.Select
'Do Until Plage Is Nothing
'If Is Nothing Then
'Exit Do
'Loop
'End Sub


Bon j'espere que je progresse :s
0
Pas mal pour un debut ... tu n'es pas loin de la boucle infini ... ;p
0