Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

... pour les forts en vba .

3 réponses
Avatar
salut a tous, merci encore pour vos réponses, ce forum est génial...

bon, voila 10 heures que je bute sur une boucle en vba.

la boucle parcourt un recordset et s'interesse a un champ qui contient du
txt formaté comme ceci F04001,F04002,.....F05001,F05002 etc.. elle regarde
si par hasard le numero existe déja, et si c'est le cas elle l'utilise, pour
les champs qui ont le meme mois et client, si elletrouve pas de
correspondance mois client, elle fabrique un nouveau en mettant "F" &
l'année en "yy" & le dmax (right numero,3)+1... si on change d'année elle a
plus de Dmax et ça merde...

j'ai cherché et modifié et cherché... et je trouves pas , alorsje me dis
qu'il y a peut etre ici des gens tellements forts que meme avec mon code
pourri, ils pourraient arriver a voir en 2 minutes le truc (surement énorme)
qui fait que ça merde au changement d'année...
le message d'erreur est "incompatiblité de type" et le débogage amene a 2
lignes en dessous du else :
:----------
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000") ''''CETTE LIGNE LA
-------------------
a ce moment la variable strnumero prend la valeur "F05" au lieu de "001"

voila le code :

Function Synchro_numeros()
Set dbs = CurrentDb
sql = "SELECT Sync_Cal.numero, Sync_Cal.mois, Sync_Cal.client, Sync_Cal.date
FROM Sync_Cal" _
& " WHERE (((Sync_Cal.numero) Is Null)) ORDER BY Sync_Cal.date;"
'Debug.Print sql
Set rst = dbs.OpenRecordset(sql)
If rst.EOF Then Exit Function
rst.MoveFirst
While Not rst.EOF
strmois = rst!mois
strclient = rst!Client
lettre = "F"
an = Format$(rst!Date, "yy")


refexiste = DLookup("[numero]", "sync_cal", "[mois] = '" & strmois & "' AND
[client] = '" & strclient & "'")
If refexiste <> "" Then
rst.Edit
rst!numero = refexiste
rst.Update
Debug.Print "refexiste " & refexiste & " - " & strmois & " - "
& strclient
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000")
refmanquante = lettre & an & strnumero
rst.Edit
rst!numero = refmanquante
rst.Update
Debug.Print "refmanquante " & refmanquante & " - " & strmois &
" - " & strclient
End If
rst.MoveNext
'If Format$(rst!Date, "yy") <> an Then Debug.Print "changement d'année"
Wend
rst.Close

End Function

3 réponses

Avatar
Eric
Bonjour Camille,

Si tu changes d'année, DMax(...) te retourne Null donc mets :
strnumero = Nz(DMax("right([numero],3)", "sync_cal", "left([numero],3) =
'" & lettre & an & "'"),0)

De même DLookUp(...) peut retourner Null donc plutot que de faire

If refexiste <> "" Then
je ferai
If Not IsNull(refexiste) Then

--
A+
Eric
Un petit tour ici : http://users.skynet.be/mpfa/
Accès aux archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

salut a tous, merci encore pour vos réponses, ce forum est génial...

bon, voila 10 heures que je bute sur une boucle en vba.

la boucle parcourt un recordset et s'interesse a un champ qui contient du
txt formaté comme ceci F04001,F04002,.....F05001,F05002 etc.. elle regarde
si par hasard le numero existe déja, et si c'est le cas elle l'utilise, pour
les champs qui ont le meme mois et client, si elletrouve pas de
correspondance mois client, elle fabrique un nouveau en mettant "F" &
l'année en "yy" & le dmax (right numero,3)+1... si on change d'année elle a
plus de Dmax et ça merde...

j'ai cherché et modifié et cherché... et je trouves pas , alorsje me dis
qu'il y a peut etre ici des gens tellements forts que meme avec mon code
pourri, ils pourraient arriver a voir en 2 minutes le truc (surement énorme)
qui fait que ça merde au changement d'année...
le message d'erreur est "incompatiblité de type" et le débogage amene a 2
lignes en dessous du else :
:----------
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000") ''''CETTE LIGNE LA
-------------------
a ce moment la variable strnumero prend la valeur "F05" au lieu de "001"

voila le code :

Function Synchro_numeros()
Set dbs = CurrentDb
sql = "SELECT Sync_Cal.numero, Sync_Cal.mois, Sync_Cal.client, Sync_Cal.date
FROM Sync_Cal" _
& " WHERE (((Sync_Cal.numero) Is Null)) ORDER BY Sync_Cal.date;"
'Debug.Print sql
Set rst = dbs.OpenRecordset(sql)
If rst.EOF Then Exit Function
rst.MoveFirst
While Not rst.EOF
strmois = rst!mois
strclient = rst!Client
lettre = "F"
an = Format$(rst!Date, "yy")


refexiste = DLookup("[numero]", "sync_cal", "[mois] = '" & strmois & "' AND
[client] = '" & strclient & "'")
If refexiste <> "" Then
rst.Edit
rst!numero = refexiste
rst.Update
Debug.Print "refexiste " & refexiste & " - " & strmois & " - "
& strclient
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000")
refmanquante = lettre & an & strnumero
rst.Edit
rst!numero = refmanquante
rst.Update
Debug.Print "refmanquante " & refmanquante & " - " & strmois &
" - " & strclient
End If
rst.MoveNext
'If Format$(rst!Date, "yy") <> an Then Debug.Print "changement d'année"
Wend
rst.Close

End Function




Avatar
Ok, merci éric ça marche !

Eric wrote:
Bonjour Camille,

Si tu changes d'année, DMax(...) te retourne Null donc mets :
strnumero = Nz(DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'"),0)

De même DLookUp(...) peut retourner Null donc plutot que de faire

If refexiste <> "" Then
je ferai
If Not IsNull(refexiste) Then

--
A+
Eric
Un petit tour ici : http://users.skynet.be/mpfa/
Accès aux archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

salut a tous, merci encore pour vos réponses, ce forum est génial...

bon, voila 10 heures que je bute sur une boucle en vba.

la boucle parcourt un recordset et s'interesse a un champ qui
contient du txt formaté comme ceci F04001,F04002,.....F05001,F05002
etc.. elle regarde si par hasard le numero existe déja, et si c'est
le cas elle l'utilise, pour les champs qui ont le meme mois et
client, si elletrouve pas de correspondance mois client, elle
fabrique un nouveau en mettant "F" & l'année en "yy" & le dmax
(right numero,3)+1... si on change d'année elle a plus de Dmax et ça
merde... j'ai cherché et modifié et cherché... et je trouves pas ,
alorsje me
dis qu'il y a peut etre ici des gens tellements forts que meme avec mon
code pourri, ils pourraient arriver a voir en 2 minutes le truc
(surement énorme) qui fait que ça merde au changement d'année...
le message d'erreur est "incompatiblité de type" et le débogage
amene a 2 lignes en dessous du else :
:----------
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000") ''''CETTE
LIGNE LA -------------------
a ce moment la variable strnumero prend la valeur "F05" au lieu de
"001" voila le code :

Function Synchro_numeros()
Set dbs = CurrentDb
sql = "SELECT Sync_Cal.numero, Sync_Cal.mois, Sync_Cal.client,
Sync_Cal.date FROM Sync_Cal" _
& " WHERE (((Sync_Cal.numero) Is Null)) ORDER BY Sync_Cal.date;"
'Debug.Print sql
Set rst = dbs.OpenRecordset(sql)
If rst.EOF Then Exit Function
rst.MoveFirst
While Not rst.EOF
strmois = rst!mois
strclient = rst!Client
lettre = "F"
an = Format$(rst!Date, "yy")


refexiste = DLookup("[numero]", "sync_cal", "[mois] = '" & strmois &
"' AND [client] = '" & strclient & "'")
If refexiste <> "" Then
rst.Edit
rst!numero = refexiste
rst.Update
Debug.Print "refexiste " & refexiste & " - " & strmois
& " - " & strclient
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000")
refmanquante = lettre & an & strnumero
rst.Edit
rst!numero = refmanquante
rst.Update
Debug.Print "refmanquante " & refmanquante & " - " &
strmois & " - " & strclient
End If
rst.MoveNext
'If Format$(rst!Date, "yy") <> an Then Debug.Print "changement
d'année" Wend
rst.Close

End Function




Avatar
Eric
Bonjour Camille,

Pour info, ton problème d'array, c'est résolu ?
(Post : boucler sur un tableau)
--
A+
Eric
Un petit tour ici : http://users.skynet.be/mpfa/
Accès aux archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Ok, merci éric ça marche !

Eric wrote:

Bonjour Camille,

Si tu changes d'année, DMax(...) te retourne Null donc mets :
strnumero = Nz(DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'"),0)

De même DLookUp(...) peut retourner Null donc plutot que de faire

If refexiste <> "" Then
je ferai
If Not IsNull(refexiste) Then

--
A+
Eric
Un petit tour ici : http://users.skynet.be/mpfa/
Accès aux archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


salut a tous, merci encore pour vos réponses, ce forum est génial...

bon, voila 10 heures que je bute sur une boucle en vba.

la boucle parcourt un recordset et s'interesse a un champ qui
contient du txt formaté comme ceci F04001,F04002,.....F05001,F05002
etc.. elle regarde si par hasard le numero existe déja, et si c'est
le cas elle l'utilise, pour les champs qui ont le meme mois et
client, si elletrouve pas de correspondance mois client, elle
fabrique un nouveau en mettant "F" & l'année en "yy" & le dmax
(right numero,3)+1... si on change d'année elle a plus de Dmax et ça
merde... j'ai cherché et modifié et cherché... et je trouves pas ,
alorsje me
dis qu'il y a peut etre ici des gens tellements forts que meme avec mon
code pourri, ils pourraient arriver a voir en 2 minutes le truc
(surement énorme) qui fait que ça merde au changement d'année...
le message d'erreur est "incompatiblité de type" et le débogage
amene a 2 lignes en dessous du else :
:----------
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000") ''''CETTE
LIGNE LA -------------------
a ce moment la variable strnumero prend la valeur "F05" au lieu de
"001" voila le code :

Function Synchro_numeros()
Set dbs = CurrentDb
sql = "SELECT Sync_Cal.numero, Sync_Cal.mois, Sync_Cal.client,
Sync_Cal.date FROM Sync_Cal" _
& " WHERE (((Sync_Cal.numero) Is Null)) ORDER BY Sync_Cal.date;"
'Debug.Print sql
Set rst = dbs.OpenRecordset(sql)
If rst.EOF Then Exit Function
rst.MoveFirst
While Not rst.EOF
strmois = rst!mois
strclient = rst!Client
lettre = "F"
an = Format$(rst!Date, "yy")


refexiste = DLookup("[numero]", "sync_cal", "[mois] = '" & strmois &
"' AND [client] = '" & strclient & "'")
If refexiste <> "" Then
rst.Edit
rst!numero = refexiste
rst.Update
Debug.Print "refexiste " & refexiste & " - " & strmois
& " - " & strclient
Else
strnumero = DMax("right([numero],3)", "sync_cal",
"left([numero],3) = '" & lettre & an & "'")
strnumero = Format$(strnumero + 1, "000")
refmanquante = lettre & an & strnumero
rst.Edit
rst!numero = refmanquante
rst.Update
Debug.Print "refmanquante " & refmanquante & " - " &
strmois & " - " & strclient
End If
rst.MoveNext
'If Format$(rst!Date, "yy") <> an Then Debug.Print "changement
d'année" Wend
rst.Close

End Function