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
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
A voir également:
- VBA je suis BLOQUER :'(
- Bloquer pub youtube - Accueil - Streaming
- Comment savoir si je suis bloqué sur messenger - Guide
- Supprimez la publicité sur YouTube avec cette solution simple et gratuite - Accueil - Streaming
- Bloquer sur messenger - Guide
- Bloquer cellule excel - Guide
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
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 :
L'autre j'ai pas compris mais il souffre sûrement aussi du même problème ^^
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 ^^
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
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
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
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
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
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
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
Et comme tu débutes en VB(A) je te conseille de commencer tous tes scripts par l'instruction
Option Explicitqui 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.
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
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
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
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
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
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
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 ?
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 ?
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
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
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, ...) ?
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, ...) ?
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
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
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
Je me tape les 500 a ecrire :s
Et je vous avoue... C'est long et emm....
Merci pour votre aide en tout cas
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 ?
- 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 ?
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
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
CQFD Tu as trouver la reponse mais ... tu le traduit comment en language vb :s
Merci Merci Merci pour ton aide
Merci Merci Merci pour ton aide
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 ?
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 ?
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.
J'espere que quelqu'un pourra me le traduire en tout cas merci bcp ShaBoo.
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 ...
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 ...