Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Discussion fermée Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/07/2011, 01h11   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Inscrire le résulat :"1" ou "2" ou "3" à l'aide de VBA

Bonjour,

J' inscrit manuellement c'est à dire 'RAS' ou 'CC' ou 'X' entre le champs C52 et C1 de mon formulaire sa marche manuellement impec. mais cependant je voudrais :

Si le champs le plus près de C52 =RAS inscrire = "1" dans le champ variation automatiquement sur la même ligne simplement.
Si le champs le plus près de C52 =CC inscrire = "2" dans le champ variation automatiquement sur la même ligne simplement.
Si le champs le plus près de C52 =X inscrire = "3" dans le champ variation automatiquement sur la même ligne simplement.

Qui peut m'aider ? pour insérer un select case ou autre le plus simple possible merci les pros

Code :
1
2
3
4
5
6
7
8
9
10
11
Function Equivalence(strTypeVariation As String) As String
 
Select Case strTypeVariation
Case "RAS"
Equivalence = "1"
Case "CC"
Equivalence = "2"
Case "X"
Equivalence = "3"
End Select
End Function
Voici la requête qui est limitée à C49 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Variation:PremVrai
([C52]="RAS";"1";[C52]="CC";"2";[C52]="X";"3";
[C51]="RAS";"1";[C51]="CC";"2";[C51]="X";"3";
[C50]="RAS";"1";[C50]="CC";"2";[C50]="X";"3";
[C49]="RAS";"1";[C49]="CC";"2";[C49]="X";"3";
[C48]="RAS";"1";[C48]="CC";"2";[C48]="X";"3";
[C47]="RAS";"1";[C47]="CC";"2";[C47]="X";"3";
[C46]="RAS";"1";[C46]="CC";"2";[C46]="X";"3";
[C45]="RAS";"1";[C45]="CC";"2";[C45]="X";"3";
[C44]="RAS";"1";[C44]="CC";"2";[C44]="X";"3";
[C43]="RAS";"1";[C43]="CC";"2";[C43]="X";"3";
[C42]="RAS";"1";[C42]="CC";"2";[C42]="X";"3";
[C41]="RAS";"1";[C41]="CC";"2";[C41]="X";"3";
[C40]="RAS";"1";[C40]="CC";"2";[C40]="X";"3";
[C39]="RAS";"1";[C39]="CC";"2";[C39]="X";"3";
[C38]="RAS";"1";[C38]="CC";"2";[C38]="X";"3";
[C37]="RAS";"1";[C37]="CC";"2";[C37]="X";"3";
[C36]="RAS";"1";[C36]="CC";"2";[C36]="X";"3";
[C35]="RAS";"1";[C35]="CC";"2";[C35]="X";"3";
[C34]="RAS";"1";[C34]="CC";"2";[C34]="X";"3";
[C33]="RAS";"1";[C33]="CC";"2";[C33]="X";"3";
[C32]="RAS";"1";[C32]="CC";"2";[C32]="X";"3";
[C31]="RAS";"1";[C31]="CC";"2";[C31]="X";"3";
[C30]="RAS";"1";[C30]="CC";"2";[C30]="X";"3";
[C29]="RAS";"1";[C29]="CC";"2";[C29]="X";"3";
[C28]="RAS";"1";[C28]="CC";"2";[C28]="X";"3";
[C27]="RAS";"1";[C27]="CC";"2";[C27]="X";"3";
[C26]="RAS";"1";[C26]="CC";"2";[C26]="X";"3";
[C25]="RAS";"1";[C25]="CC";"2";[C25]="X";"3";
[C24]="RAS";"1";[C24]="CC";"2";[C24]="X";"3";
[C23]="RAS";"1";[C23]="CC";"2";[C23]="X";"3";
[C22]="RAS";"1";[C22]="CC";"2";[C22]="X";"3";
[C21]="RAS";"1";[C21]="CC";"2";[C21]="X";"3";
[C20]="RAS";"1";[C20]="CC";"2";[C20]="X";"3";
[C19]="RAS";"1";[C19]="CC";"2";[C19]="X";"3";
[C18]="RAS";"1";[C18]="CC";"2";[C18]="X";"3";
[C17]="RAS";"1";[C17]="CC";"2";[C17]="X";"3";
[C16]="RAS";"1";[C16]="CC";"2";[C16]="X";"3";
[C15]="RAS";"1";[C15]="CC";"2";[C15]="X";"3";
[C14]="RAS";"1";[C14]="CC";"2";[C14]="X";"3";
[C13]="RAS";"1";[C13]="CC";"2";[C13]="X";"3";
[C12]="RAS";"1";[C12]="CC";"2";[C12]="X";"3";
[C11]="RAS";"1";[C11]="CC";"2";[C11]="X";"3";
[C10]="RAS";"1";[C10]="CC";"2";[C10]="X";"3";
[C9]="RAS";"1";[C9]="CC";"2";[C9]="X";"3";
[C8]="RAS";"1";[C8]="CC";"2";[C8]="X";"3";
[C7]="RAS";"1";[C7]="CC";"2";[C7]="X";"3";
[C6]="RAS";"1";[C6]="CC";"2";[C6]="X";"3";
[C5]="RAS";"1";[C5]="CC";"2";[C5]="X";"3";
[C4]="RAS";"1";[C4]="CC";"2";[C4]="X";"3";
[C3]="RAS";"1";[C3]="CC";"2";[C3]="X";"3";
[C2]="RAS";"1";[C2]="CC";"2";[C2]="X";"3";
[C1]="RAS";"1";[C1]="CC";"2";[C1]="X";"3")
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 17/07/2011, 07h27   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
Qu'entends-tu par "le champs le plus près" ?
Une requête Mise à jour pourrait peut-être faire l'affaire
Code :
1
2
 
DoCmd.RunSQL "UPDATE NomTable SET NomTable.variation= IIf([strTypeVariation]=""RAS"",1,IIf([strTypeVariation]=""CC"",2,3));"
à adapter
helas est déconnecté   Envoyer un message privé 00
Vieux 17/07/2011, 14h58   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Presque bon

MERCI Helas pour votre visibilité car c'est presque bon !!!

mais j'ai un message qui me dit erreur de synthaxe, pouvez vous m'aiguiller ?

d'ailleur à quel moment et ou je dois insérer la commande

Code :
DoCmd.RunSQL "UPDATE NomTable SET NomTable.variation= IIf([strTypeVariation]=""RAS"",1,IIf([strTypeVariation]=""CC"",2,3));"
1-/ Qu'entends-tu par "le champs le plus près" ?
--> c'est celui qui est en ordre décroissant le plus près de C52 qui sera traduit dans le champ variation exemple C36= CC et C35 = RAS prendre C36 =2

1-/ Faut-il insérer cette commande dans le script VBA ou créer une requête ?

2-/ est ce que le code VBA que j'ai d'écrit et bon ?

Merci pour votre retour car c'est presque bon
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 17/07/2011, 17h51   #4
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
2 possibilités :
soit inclure dans le code VBA la commande RunSQL
soit créer une requête avec le code entre guillemets
Pour ma part, je ne vois pas d'erreurs. Attention au nombre de guillemets qui sont doublés pour entourer une chaine de caractères.
helas est déconnecté   Envoyer un message privé 00
Vieux 17/07/2011, 23h14   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut sa fonctionne presque !

Bonjour Helas,

Merci pour votre aide mais après avoir insérer le code DoCmd.RunSQL cela fonctionne pas j'ai ajouté dans le formulaire dans le champs C40 = CC et j'ai rien du tout dans le champ variation. Voici la pièce jointe merci pour votre aide

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function Equivalence(strTypeVariation As String) As String
 
Select Case strTypeVariation
Case "RAS"
Equivalence = "1"
Case "CC"
Equivalence = "2"
Case "X"
Equivalence = "3"
DoCmd.RunSQL "UPDATE Table_planification SET Table_planification.variation= IIf([strTypeVariation]=""RAS"",1,IIf([strTypeVariation]=""CC"",2,3));"
 
End Select
 
End Function
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 18/07/2011, 09h39   #6
Membre régulier
 
Homme Michaël
Développeur .NET
Inscription : avril 2008
Messages : 80
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : avril 2008
Messages : 80
Points : 84
Points : 84
Je pense n'avoir rien compris à ta question mais peut-être que si...

tout d'abord:
Code :
1
2
 
DoCmd.RunSQL "UPDATE Table_planification SET Table_planification.variation= IIf([strTypeVariation]=""RAS"",1,IIf([strTypeVariation]=""CC"",2,3));"
Cette requete sert a modifier ta table et remplacer la valeur du champs "variation" par 1 si le champs strTypeVariation de ta table Table_planification = RAS, 2 si CC et 3 si X. Il te faut donc une colonne variation et il ne faut surtout pas la placer là, car elle sera lancé que lorsque strTypeVariation = "X"

Mais comme je l'ai compris, ce que tu appelles champs, ce sont des TextBox?
Auquel cas lorsque tu mettrais à jour un des C° la textbox variation à coté afficherait la valeur correspondante?

Est ce que j'ai rien compris?
mkl238 est déconnecté   Envoyer un message privé 00
Vieux 18/07/2011, 13h33   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Placer dans le formulaire

Bonjour MKL

Mon objectif de cette base c'est de pouvoir la faire fonctionner via le formulaire : nom du formulaire est "Table_planification Requête1" (voir pièce jointe).

Les utilisateurs devront via le formulaire capitaliser entre le champ C1 et C52 trois choses :

'RAS' ou 'CC' ou 'X' (C1 = semaine 1 ect...Jusqu'a C52..)

Je souhaite en fonction de ce vont capitaliser les utilisateurs entre C1 et C52
à chaque ligne avoir dans la colonne variation :

à chaque ligne Si le dernier champ =RAS inscrire = "1" au bout de la ligne dans le champ variation simplement.

à chaque ligneSi le dernier champ =CC inscrire = "2" au bout de la ligne dans le champ variation simplement.

à chaque ligne Si le dernier champ =X inscrire = "3" au bout de la ligne dans le champ variation simplement.

Quelle est la démarche à faire ? requête ? VBA ?
Merci de votre aide car je voudrais faire qq chose de simple avoir un résultat 1 ou 2 ou 3 au bout de chaque ligne en colonne variation simplement (merci de voir la pièce jointe).
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 18/07/2011, 21h25   #8
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonsoir,
Je comprends maintenant
sur l'évement BeforeUpdate du formulaire écrire ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
 For i = 52 To 1 Step -1    
   Select Case Nz(Me("S" & CStr(i)), "")  'teste la valeur du champ S52, S51, ...
  Case "RAS"
   Me("variation") = 1   
   Exit For                 'sortie de la boucle, les autres champs ne sont pas testés
  Case "CC"
   Me("variation") = 2
   Exit For
  Case "X"
   Me("variation") = 3
   Exit For
  End Select
 Next i
End Sub
Dès que l'on rentre une donnée dans un champ S.. , variation est mis à jour en fonction de la valeur du champ S.. le plus près de 52
dans le formulaire supprimer le lien avec la table T1 qui n'est pas utile
La source du formulaire sera simplement la table Table_planification
helas est déconnecté   Envoyer un message privé 10
Vieux 18/07/2011, 23h26   #9
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Message d'erreur

Bonsoir Helas,

J'ai suivi votre instruction sur l'évement BeforeUpdate du formulaire j'ai écrit le code avec une petite adaptation comme je le voulais : "C" au lieu de "S"


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_BeforeUpdate(Cancel As Integer)
 For i = 52 To 1 Step -1    
   Select Case Nz(Me("C" & CStr(i)), "")  'teste la valeur du champ C52, C51, ...
  Case "RAS"
   Me("variation") = 1   
   Exit For                 'sortie de la boucle, les autres champs ne sont pas testés
  Case "CC"
   Me("variation") = 2
   Exit For
  Case "X"
   Me("variation") = 3
   Exit For
  End Select
 Next i
End Sub

Ensuite dès que l'on rentre une donnée dans un champ C.. rien ne se passe sauf pour les champs C52, C51,C50,C49
Avez vous réussi à le faire fonctionner de votre côté ?
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 19/07/2011, 19h25   #10
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
la valeur retournée dans variation dépend du champ renseigné le plus près du champ C52
si C48 contient "CC" et les champs suivant sont vides variation vaudra 2, les champs C47 à C1 ne sont donc pas reardés
quelle erreur se produit ?
helas est déconnecté   Envoyer un message privé 10
Vieux 19/07/2011, 22h46   #11
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Message : Erreur d'execution 3164

Bonsoir Helas

la valeur retournée dans variation dépend du champ renseigné le plus près du champ C52 --> OK pour le champs de C52 à C49



si C48 contient "CC" et les champs suivant sont vides variation vaudra 2, les champs C47 à C1 ne sont donc pas reardés
quelle erreur se produit ? --> Ne fonctionne pas, je vous ai fait une copie d'écran en pièce jointe j'ai un message d'erreur d'execution
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 20/07/2011, 21h28   #12
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 304
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 304
Points : 18
Points : 18
Par défaut Besoin d'aide pour une simplification en VBA

Quelqu'un peut m'aider à résoudre mon switch car il est limité à C49,

Comment le traduire en VBA ? ACCESS est limité pour les imbrications vraifaux et premvrai. Y-a-t-il une solution ?

MERCI à vous


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 Variation:PremVrai
([C52]="RAS";"1";[C52]="CC";"2";[C52]="X";"3";
[C51]="RAS";"1";[C51]="CC";"2";[C51]="X";"3";
[C50]="RAS";"1";[C50]="CC";"2";[C50]="X";"3";
[C49]="RAS";"1";[C49]="CC";"2";[C49]="X";"3";
[C48]="RAS";"1";[C48]="CC";"2";[C48]="X";"3";
[C47]="RAS";"1";[C47]="CC";"2";[C47]="X";"3";
[C46]="RAS";"1";[C46]="CC";"2";[C46]="X";"3";
[C45]="RAS";"1";[C45]="CC";"2";[C45]="X";"3";
[C44]="RAS";"1";[C44]="CC";"2";[C44]="X";"3";
[C43]="RAS";"1";[C43]="CC";"2";[C43]="X";"3";
[C42]="RAS";"1";[C42]="CC";"2";[C42]="X";"3";
[C41]="RAS";"1";[C41]="CC";"2";[C41]="X";"3";
[C40]="RAS";"1";[C40]="CC";"2";[C40]="X";"3";
[C39]="RAS";"1";[C39]="CC";"2";[C39]="X";"3";
[C38]="RAS";"1";[C38]="CC";"2";[C38]="X";"3";
[C37]="RAS";"1";[C37]="CC";"2";[C37]="X";"3";
[C36]="RAS";"1";[C36]="CC";"2";[C36]="X";"3";
[C35]="RAS";"1";[C35]="CC";"2";[C35]="X";"3";
[C34]="RAS";"1";[C34]="CC";"2";[C34]="X";"3";
[C33]="RAS";"1";[C33]="CC";"2";[C33]="X";"3";
[C32]="RAS";"1";[C32]="CC";"2";[C32]="X";"3";
[C31]="RAS";"1";[C31]="CC";"2";[C31]="X";"3";
[C30]="RAS";"1";[C30]="CC";"2";[C30]="X";"3";
[C29]="RAS";"1";[C29]="CC";"2";[C29]="X";"3";
[C28]="RAS";"1";[C28]="CC";"2";[C28]="X";"3";
[C27]="RAS";"1";[C27]="CC";"2";[C27]="X";"3";
[C26]="RAS";"1";[C26]="CC";"2";[C26]="X";"3";
[C25]="RAS";"1";[C25]="CC";"2";[C25]="X";"3";
[C24]="RAS";"1";[C24]="CC";"2";[C24]="X";"3";
[C23]="RAS";"1";[C23]="CC";"2";[C23]="X";"3";
[C22]="RAS";"1";[C22]="CC";"2";[C22]="X";"3";
[C21]="RAS";"1";[C21]="CC";"2";[C21]="X";"3";
[C20]="RAS";"1";[C20]="CC";"2";[C20]="X";"3";
[C19]="RAS";"1";[C19]="CC";"2";[C19]="X";"3";
[C18]="RAS";"1";[C18]="CC";"2";[C18]="X";"3";
[C17]="RAS";"1";[C17]="CC";"2";[C17]="X";"3";
[C16]="RAS";"1";[C16]="CC";"2";[C16]="X";"3";
[C15]="RAS";"1";[C15]="CC";"2";[C15]="X";"3";
[C14]="RAS";"1";[C14]="CC";"2";[C14]="X";"3";
[C13]="RAS";"1";[C13]="CC";"2";[C13]="X";"3";
[C12]="RAS";"1";[C12]="CC";"2";[C12]="X";"3";
[C11]="RAS";"1";[C11]="CC";"2";[C11]="X";"3";
[C10]="RAS";"1";[C10]="CC";"2";[C10]="X";"3";
[C9]="RAS";"1";[C9]="CC";"2";[C9]="X";"3";
[C8]="RAS";"1";[C8]="CC";"2";[C8]="X";"3";
[C7]="RAS";"1";[C7]="CC";"2";[C7]="X";"3";
[C6]="RAS";"1";[C6]="CC";"2";[C6]="X";"3";
[C5]="RAS";"1";[C5]="CC";"2";[C5]="X";"3";
[C4]="RAS";"1";[C4]="CC";"2";[C4]="X";"3";
[C3]="RAS";"1";[C3]="CC";"2";[C3]="X";"3";
[C2]="RAS";"1";[C2]="CC";"2";[C2]="X";"3";
[C1]="RAS";"1";[C1]="CC";"2";[C1]="X";"3")
Debutant10 est déconnecté   Envoyer un message privé 00
Vieux 24/07/2011, 18h17   #13
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
Le code sur l'evenement Form_BeforeUpdate doit fonctionner.
Tu dis que cela fonctionne sur les cellules C49 à C52 mais pas avant.
Pour savoir ce qui se passe, il faut
1) ajouter le code en bleu. Si une erreur se produit taper ?error dans la fenêtre d'execution pour connaitre l'erreur
2) faire du pas à pas pour comprendre ce qui se passe.
Mettre un point d'arrêt sur For , entrer une valeur en C27 par exemple lors de la mise à jour le code s'arrête au point d'arrêt, taper F8 pour executer chaque ligne de code
On peut voir ainsi si i passe de 52 à 27, on peut constater si variation est mis à jour si i=27 et quel valeur il y met
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Form_BeforeUpdate(Cancel As Integer)
 On Error goto erreur
 For i = 52 To 1 Step -1    
  Select Case Nz(Me("C" & CStr(i)), "")
  Case "RAS"
   Me("variation") = 1   
   Exit For   
  Case "CC"
   Me("variation") = 2
   Exit For
  Case "X"
   Me("variation") = 3
   Exit For
  End Select
 Next i


Exit Sub
erreur:
 Stop
 Resume
End Sub
helas est déconnecté   Envoyer un message privé 00
Vieux 26/07/2011, 15h32   #14
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Il y a une autre discussion sur le même sujet par la même personne dans le forum.

Nous sommes proche d'une solution dans celle-ci.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé 00
Discussion fermée Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h11.


 
 
 
 
Partenaires

Hébergement Web