Quelle syntaxe me faut-il??

Ah beh je mettais le guillemet a la fin!!!!

Pour la connexion je m'était trompé de DataSource!!!

Et est-il possible de mettre ce resultat dans une liste deroulante qui evolue selon le numero de semaine choisi??

Oui bien sur.

ajoute tous les résultats de la requête dans une variable texte, chaque résultat séparé par une virgule:

Do While Not rst.EOF
        ListeClient = ListeClient & rst.Fields("NomContact") & ","
        rst.MoveNext
Loop

traduction: Tant que l'objet rst n'est pas à la fin de la liste ( EOF ) , on ajoute le résultat du champs NomContact de la BD dans la variable texte. Ensuite on passe à l'enregistrement suivant avec rst.MoveNext.

ensuite enlève la dernière virgule:

ListeClient = Left(ListeClient, Len(ListeClient) - 1)

et fait une validation de type liste dans la cellule choisi:

With Sheets("Feuil1").Range("A2").Validation
 .Delete
 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=ListeClient
end with

Re,

Petite erreur à ce niveau là:

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=ListeClient

PS: merci pour la traduction!!!

Si ca peut t'aider:

Erreur d'execution '1004'

Erreur definir par l' application ou pas l'objet.

Peux-tu poster le bout du code complet ou tu configure la validation de la cellule,

sinon tu peux essayer de configurer manuellement la validation en entrant des valeurs bidon, et ensuite :

.Modify Formula1:=ListeClient

ou bien tu joue le jeux de l'enregistreur de macro et tu fournis à Excel tous les paramêtres:

.Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=ListeClient
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True

Edit: J'ai édité le post car on avait répondu en même temps

en regardant un fois de plus j'ai vu qu'il y avait deja une saisie dans le cellule dont j'avais besoins, j'ai donc effacer ce qu'il y avait dedans et re-executer le code, pas d'erreur mais rien ne se passe!!!

C'est juste une petite erreur de frappe:

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:=ListeAffaire

Ah ui en effet

Dsl j'insiste quand je fais mes selection(choix de la semaine) le resultat ne change pas!!!

où est-ce que tu appelles t'a procedure Connection? si tu veux qu'à chaque fois que tu sélectionne une valeur en B5, la liste en C5 s'adapte, ajoute ceci dans le code de la feuille "suivi d'affaire".

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$5" Then Connection
End Sub

Ok merci!!!

Je test cela et te tiendrais au courant de mon avancement demain!!

cordialement,

Kris

Slt Math

Alors j'ai essayer d'ajouter au code que tu m'as fourni, une autre requete donc j'ai rajouter cela:

Dim strSQL2 As String

Dim rst2 As ADODB.Recodset

Dim cnn2 As ADODB.Connection

Dim VarAff As String

VarAff = Range("C5")

Set cnn2 = New ADODB.Connection

connectionString= "Data source........"

strSQL2 = "Select Nom from genex where semaine =" & VarSem " AND Affaire=" & VarAff

cnn2.Open connectionString

Set rst2 = cnn2.Execute(strSQL2)

Range("D5").CopyfromRecordset rst2

rst2.Close

cnn2.Close

set rst2 = Nothing

set cnn2 = Nothing

Mon problème là est que j'ai une erreur de syntaxe sur ma requete, je pense qu'elle vient du fait que je rajoute une condition!

Aussi je n'ai pas rajouter de connectionString, me faut-il en faire un autre avec le petit 2

j'ai tenté une modification d'ecriture et la pas d'erreur mais rien ne se passe!!!

Alors j'ai ecrit:

strSQL2 = "Select Nom from genex where Affaire='& VafAff' And Semaine=" & VarSem

Tu as oublié un symbol &

strSQL2 = "Select Nom from genex where semaine =" & VarSem & " AND Affaire=" & VarAff

si le code que tu as ajouté est dans la même procédure, tu n'es pas obligé de configuré une deuxième connection, donc tu pourrais écrire

Set rst2 = cnn.Execute(strSQL2) 

et laisser tombé cnn2. C'est la même chose pour la variable connectionstring qui en fait ne contient que l'instruction pour te connecter à ton serveur SQL. Si tu te connecte au même serveur, tu peux réutiliser la variable sans problème.

Ok, alors mon code ressemble a cela maintenant (pour la 2nde partie qui est juste a la suite de l a premiere) :

Dim strSQL2 As String

Dim rst2 As ADODB.Recodset

Dim VarAff As String

VarAff = Range("C5")

Set cnn = New ADODB.Connection

connectionString= "Data source........"

strSQL2 = "Select Nom from genex where semaine =" & VarSem & " AND Affaire= '& VarAff' "

cnn.Open connectionString

Set rst2 = cnn.Execute(strSQL2)

Range("D5").CopyfromRecordset rst2

rst2.Close

cnn.Close

set rst2 = Nothing

set cnn = Nothing

Je suis obligé apparement de mettre VarAff entre ' et ' car sinon j'ai une erreur ca doit venir du fait que c'est un String.

Mais rien ne se passe aussi

et aussi cela me fait une erreur quand je selectionne une semaine qui n'est pas dans la base de données!!![/b]

Il y a une erreur dans ta ligne :

"Select Nom from genex where semaine =" & VarSem & " AND Affaire= '& VarAff' "

- quand j'ai des variables string dans ma requête, j'utilise chr(34) ou bien tu peux aussi doubler les "

strSQL2 = "Select Nom from genex where semaine =" & VarSem & " AND Affaire= " & Chr(34) & VarAff & Chr(34)

ou bien

strSQL2 = "Select Nom from genex where semaine =" & VarSem & " AND Affaire= """ & VarAff & """"

pour me vérifier j'affiche ma variable avec msgbox strSQL2, ça permet de voir si la syntaxe est bonne.

- pour ton deuxième problème, teste si l'objet rst comporte des enregistrements avant de faire le traitement. Si la requête ne retourne rien, la position de rst sera à EOF. Donc avant ton traitement :

...
Set rst = cnn.Execute(strSQL)

if not rst.EOF then

    ... Faire ton traitement

else
    ... Message d'erreur ??
End if

...
   

Slt,

J'ai essayé avec les 2 solutions, Chr(34) et en doublant les guillemets mais ca ne marche pas, il me sors nom de colonne (avec la valeur de VafAff) non valide.

Pour la 2nde solution est-il possible de ne rien avoir plutot qu'un message d'erreur, c'est qu'il ne ne passe rien, que si je choisi une semaine et qu'il n'ont pas encore travaillé sur celle-ci, eh bien rien ne s'affiche dans la liste d'affaire?

Bonjour Kris

-Pour le premier probléme, poste moi ton code pour qu'on y voit plus clair.

- Pour le message d'erreur, tu n'es pas obligé d'en mettre, ce n'était qu'un exemple. Par contre tu devrais mettre la ligne suivante:

Sheets("Suivi d'affaire").Range("C5").Validation.Delete

pour vider ton combobox

Voila le code ou il en est actuellement

https://www.excel-pratique.com/~files/doc2/Nouveau_document_texte.txt

Et la ligne pour le "vidage" de ma comboBox je la met ou??

Il faut que tu sépare tes deux évènements, le remplissage du combobox ne doit pas se faire en même temps que le remplissage des champs nom. J'ai séparé ton code en deux procédure et modifier la procedure Change de la feuille Suivi d'affaire.

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Target.Address
    Case "$B$5"
        RemplirNoAffaire
    Case "$C$5"
        RemplirChampsNom
    End Select
End Sub

j'ai mis le reste du code dans un fichier Word ou j'ai surligner les changements. Entre autre où j'ai ajouté une vérification pour voir si la requête est vide ou non

https://www.excel-pratique.com/~files/doc2/Modification_Code.doc

Math

Rechercher des sujets similaires à "quelle syntaxe faut"