OVH Cloud OVH Cloud

dcl d'1 variable

4 réponses
Avatar
natou
Bonjour,
dans ma pr=E9c=E9dente question "=E7a se complique" on me=20
conseille de d=E9clarer une variable globale, pourrais-t'on=20
m'aider car le VBA et moi c'est tout un po=E8me, j'ai besoin=20
d'un exemple concret pour comprendre.
Alors ! j'ai un champs qui r=E9cup=E8re 6 chiffres dans un=20
champs et le reste dans un autre champs, ce que je=20
souhaite c'est savoir comment lui d=E9clarer qu'il doit=20
prendre ce qui se trouve dans "codeclient" pour l'instant=20
la formule est la suivante :
Pour la petite histoire la partie VBA de cette base =E0 =E9t=E9=20
faite par un coll=E8gue qui n'est plus l=E0 et des petites=20
modif sont intervenues ......

Function CalculCodeUPC(rstrNumArticle As String, Optional=20
Recalcul As Boolean =3D True) As CodeBarre
'
' Cr=E9e l'object CodeBarre =E0 partir d'un code ITF
' ----------------------------------------------
Dim cb As CodeBarre
With cb
If Recalcul Then
.Code =3D cstrCodenum & Mid(rstrNumArticle, 4, 2) &=20
Mid(rstrNumArticle, 7, 3)
.CodeCtrl =3D CalculUPCCtrl(cb.Code)
Else
.CodeCtrl =3D CalculUPCCtrl(rstrNumArticle)
End If
.Symbole =3D ConversionCodeBarreUPC()
End With
CalculCodeUPC =3D cb
=20
End Function

=E0 savoir que cstrCodenum est une constante qui est=20
d=E9clar=E9e mais qui ne me sert plus =E0 rien, car ce chiffre=20
maintenant est variable, je voudrais lui dire =E0 la place=20
que c'est dans mon champs "Codeclient" qu'il faut aller=20
chercher ce qui s'y trouve, le reste ne change pas.

4 réponses

Avatar
Fred M
Bonjour Natou,
Le VBA c'est pas bien grave et ça se soigne facilement...
Dans ton cas, il suffit de remplacer ta constate par la
référence de ton champs... MAIS : par "champs" entends-tu
zone de texte dans un formulaire ou champ d'une table ?

J'imagine que C le 2ème cas mais je préfère m'en assurer
pour la suite.

Fred

-----Message d'origine-----
Bonjour,
dans ma précédente question "ça se complique" on me
conseille de déclarer une variable globale, pourrais-t'on
m'aider car le VBA et moi c'est tout un poème, j'ai
besoin

d'un exemple concret pour comprendre.
Alors ! j'ai un champs qui récupère 6 chiffres dans un
champs et le reste dans un autre champs, ce que je
souhaite c'est savoir comment lui déclarer qu'il doit
prendre ce qui se trouve dans "codeclient" pour l'instant
la formule est la suivante :
Pour la petite histoire la partie VBA de cette base à été
faite par un collègue qui n'est plus là et des petites
modif sont intervenues ......

Function CalculCodeUPC(rstrNumArticle As String, Optional
Recalcul As Boolean = True) As CodeBarre
'
' Crée l'object CodeBarre à partir d'un code ITF
' ----------------------------------------------
Dim cb As CodeBarre
With cb
If Recalcul Then
.Code = cstrCodenum & Mid(rstrNumArticle, 4, 2)
&

Mid(rstrNumArticle, 7, 3)
.CodeCtrl = CalculUPCCtrl(cb.Code)
Else
.CodeCtrl = CalculUPCCtrl(rstrNumArticle)
End If
.Symbole = ConversionCodeBarreUPC()
End With
CalculCodeUPC = cb

End Function

à savoir que cstrCodenum est une constante qui est
déclarée mais qui ne me sert plus à rien, car ce chiffre
maintenant est variable, je voudrais lui dire à la place
que c'est dans mon champs "Codeclient" qu'il faut aller
chercher ce qui s'y trouve, le reste ne change pas.
.



Avatar
natou
Bonjour Fred,
c'est un champs qui vient d'une table et qui par défaut à
une valeur de 5 chiffres, mais qui selon le client peut
changer, rarement mais ça arrive, le pb c'est
qu'effectivement j'ai essayé de remplacer ma constante par
la référence de mon champs comme ci-dessous
Const cstrCodenum As String = "087561" (constante actuelle)
Const cstrCodenum As String = [CODECLIENT](ce que j'ai
essayé de faire)
et lors de ma compilation voici le mssg reçu :"erreur de
compilation, nom externe non défini" ????? voili voilà le
pb et là je fais un blocage ......
-----Message d'origine-----
Bonjour Natou,
Le VBA c'est pas bien grave et ça se soigne facilement...
Dans ton cas, il suffit de remplacer ta constate par la
référence de ton champs... MAIS : par "champs" entends-tu
zone de texte dans un formulaire ou champ d'une table ?

J'imagine que C le 2ème cas mais je préfère m'en assurer
pour la suite.

Fred

-----Message d'origine-----
Bonjour,
dans ma précédente question "ça se complique" on me
conseille de déclarer une variable globale, pourrais-
t'on


m'aider car le VBA et moi c'est tout un poème, j'ai
besoin

d'un exemple concret pour comprendre.
Alors ! j'ai un champs qui récupère 6 chiffres dans un
champs et le reste dans un autre champs, ce que je
souhaite c'est savoir comment lui déclarer qu'il doit
prendre ce qui se trouve dans "codeclient" pour
l'instant


la formule est la suivante :
Pour la petite histoire la partie VBA de cette base à
été


faite par un collègue qui n'est plus là et des petites
modif sont intervenues ......

Function CalculCodeUPC(rstrNumArticle As String,
Optional


Recalcul As Boolean = True) As CodeBarre
'
' Crée l'object CodeBarre à partir d'un code ITF
' ----------------------------------------------
Dim cb As CodeBarre
With cb
If Recalcul Then
.Code = cstrCodenum & Mid(rstrNumArticle, 4, 2)
&

Mid(rstrNumArticle, 7, 3)
.CodeCtrl = CalculUPCCtrl(cb.Code)
Else
.CodeCtrl = CalculUPCCtrl(rstrNumArticle)
End If
.Symbole = ConversionCodeBarreUPC()
End With
CalculCodeUPC = cb

End Function

à savoir que cstrCodenum est une constante qui est
déclarée mais qui ne me sert plus à rien, car ce chiffre
maintenant est variable, je voudrais lui dire à la place
que c'est dans mon champs "Codeclient" qu'il faut aller
chercher ce qui s'y trouve, le reste ne change pas.
.

.





Avatar
Fred M.
Bonjour Natou :-),

Si c'est accès à une table dont tu as besoin dans ce cas ,
il faut que tu ouvres ta table par VBA comme suit :

Dim cstrCodenum As String
Dim Cn As Connection
Dim Rs As Recordset

Set Cn = Application.CurrentProject.Connection
Set Rs = New Recordset

rs.Open "NomDeTaTable", Cn

cstrCodenum Rs.Fields(CODECLIENT).Value

set Rs = nothing
set Cn = nothing


Vlà... en espérant que cela fonctionne correctement chez
toi et q cela réponde à ta qstion.
Bon courage.

-----Message d'origine-----
Bonjour Fred,
c'est un champs qui vient d'une table et qui par défaut à
une valeur de 5 chiffres, mais qui selon le client peut
changer, rarement mais ça arrive, le pb c'est
qu'effectivement j'ai essayé de remplacer ma constante
par

la référence de mon champs comme ci-dessous
Const cstrCodenum As String = "087561" (constante
actuelle)

Const cstrCodenum As String = [CODECLIENT](ce que j'ai
essayé de faire)
et lors de ma compilation voici le mssg reçu :"erreur de
compilation, nom externe non défini" ????? voili voilà le
pb et là je fais un blocage ......



Avatar
NATOU
Bonjour Fred,
j'ai les neuronnes en effervescence soit ! mais y'a qq
chose qui me travaille, pourquoi ouvrir la table, puisque
mon travail et mes calculs se font dans un formulaire issu
d'une requête qui regroupe 3 tables, dans mon formulaire
le champs "codeclient" s'y trouve n'y a t-il pas moyen
dans le code vba en cours de supprimer cette fameuse
ligne "Const cstrCodenum As String = "087561" et la
remplacer par une autre instruction qui dirais " va
chercher dans le champs "codeclient" le chiffre qui s'y
trouve ??????? cf plus bas en fait pour t'expliquer le
mieux possible, j'ai un formulaire de saisie dans lequel
des codes barres se construisent à partir des données qui
vont être saisies, une référence, un codeclient, etc...mon
code UPC va se construire avec mon code client et une
partie de ma référence produit comme suit 08756101121 et
un calcul va me construire mon code de contrôle qui dans
le cas ci-dessus sera 8 , donc pour l'instant les 6
premiers chiffres sont écris en "dur dans mon évennement
et c'est là ou ça coince, car maintenant pour deux clients
le code est différent, j'ai donc créé un
champs "codeclient" et les opératrices le saisissent
manuellement, mais pour que le code soit pris dans mon UPC
il faut que mon évennement pour cette ligne ne soit
plus "en dur" comme il l'est actuellement je ne sais pas
si je suis clair .....regarde ci-dessous,
Option Compare Database

Option Explicit

Type CodeBarre
Code As String
CodeCtrl As String
Symbole As String
End Type
Const cstrCodenum As String = "087561"

Const cintLongITF As Integer = 14
Const cintLongITF2 As Integer = 14
Const cintLong128 As Integer = 16
Const cintLongEAN As Integer = 13
Const cintLongUPC As Integer = 12

Const cstrSepEANUPCGauche As String = """"
Const cstrSepEANUPCMilieu As String = "!"
Const cstrSepEANUPCDroite As String = "#>"

Dim tabITF() As Integer
Dim tabCodeRegion() As String

Dim intcpteur As Integer
Dim strChainepays As String

-----Message d'origine-----
Bonjour Natou :-),

Si c'est accès à une table dont tu as besoin dans ce
cas ,

il faut que tu ouvres ta table par VBA comme suit :

Dim cstrCodenum As String
Dim Cn As Connection
Dim Rs As Recordset

Set Cn = Application.CurrentProject.Connection
Set Rs = New Recordset

rs.Open "NomDeTaTable", Cn

cstrCodenum Rs.Fields(CODECLIENT).Value

set Rs = nothing
set Cn = nothing


Vlà... en espérant que cela fonctionne correctement chez
toi et q cela réponde à ta qstion.
Bon courage.

-----Message d'origine-----
Bonjour Fred,
c'est un champs qui vient d'une table et qui par défaut
à


une valeur de 5 chiffres, mais qui selon le client peut
changer, rarement mais ça arrive, le pb c'est
qu'effectivement j'ai essayé de remplacer ma constante
par

la référence de mon champs comme ci-dessous
Const cstrCodenum As String = "087561" (constante
actuelle)

Const cstrCodenum As String = [CODECLIENT](ce que j'ai
essayé de faire)
et lors de ma compilation voici le mssg reçu :"erreur de
compilation, nom externe non défini" ????? voili voilà
le


pb et là je fais un blocage ......

.