|
|
|
|
[VBA] tester l'existence d'une variable
Dernière réponse le 28 aoû 2008 à 15:27:02 LiMpi, le 26 aoû 2008 à 11:30:27Bonjour,
J'ai une table qui contient une colonne donc les champs contiennent eux-même plusieurs valeurs séparés par des "~"
Exemple :
Marque~Type~Modèle~Numéro de série
J'ai donc séparé les valeurs grace à Split(), et lorsque j'ai voulu inséré les différentes données dans une nouvelle table, j'ai eu un problème.
J'avais en effet des champs qui ne contenaient que
Marque~Type~Numéro de série
J'ai donc voulu faire une condition pour savoir si le champ contenait 3 ou 4 valeurs différentes et les insérer selon.
voilà ma condition :
If Test(3) <> "" Then
Debug.Print " 4 valeurs "
Else
Debug.Print " 3 valeurs "
End If
Ca marche bien pour les champs à 4 valeurs, mais lorsqu'il arrive sur un champ a 3 valeurs, j'ai une "Runtime Error 9 : Subscript out of range"
En effet, dans les champs a 3 valeurs, Test(3) n'existe pas. Il ne peux donc pa sla repérer.
Existe-t-il une fonction qui peux vérifier si la variable Test(3) existe ? du genre Isset en PHP ?
Ou un autre moyen d'arriver au même résultat ? :p
Merci !
Configuration: Windows XP Internet Explorer 7.0
Bonjour,
Sub Essai()
Dim strMots As String, strMessage
Dim Boite As Variant
Dim Limite As Integer, Boucle As Integer
strMots = "Table~Chaise~Banc"
Boite = Split(strMots, "~")
Limite = UBound(Boite)
'MsgBox Limite
For Boucle = 0 To Limite
strMessage = strMessage & vbLf & _
"Boucle : " & Boucle & _
" : " & Boite(Boucle)
Next
MsgBox strMessage
End Sub
'
Lupin |
Salut A.Lupin :)
|
Ups,
|
Bon finalement j'ai trouvé une autre solution, qui est censée marcher mais qui marche pas :p
Set dbTestForm = CurrentDb
strSQL = "SELECT COUNT(*) as plop FROM tblAsset"
Set rstTest = dbTestForm.OpenRecordset(strSQL)
CurrentDb.Execute "DELETE * FROM tblPC;"
i = 1
While (i <= rstTest("Plop"))
strSQL2 = "SELECT lIDAsset, sAssetTag, sLoginID FROM tblAsset WHERE lIDAsset = " & i & ""
Set rstTest2 = dbTestForm.OpenRecordset(strSQL2)
If IsEmpty("rstTest2") Then
Stop
Else
Tag = rstTest2(1)
Test = Split("" & Tag & "", "~")
Limite = UBound(Test)
If Limite = 3 Then
SN = Split("" & Test(3) & "", ".")
DoCmd.SetWarnings False
strSQL3 = "INSERT INTO tblPC(IDAsset, Shortname, Marque, Type, Modele, Serial_Number) Values('" & rstTest2(0) & "', '" & rstTest2(2) & "', '" & Test(0) & "', '" & Test(1) & "', '" & Test(2) & "', '" & SN(0) & "')"
DoCmd.RunSQL strSQL3
DoCmd.SetWarnings True
Final = Test(0)
Final2 = Test(1)
Final3 = Test(2)
Final4 = Test(3)
Debug.Print Final
Debug.Print Final2
Debug.Print Final3
Debug.Print Final4
i = i + 1
Else
SN = Split("" & Test(2) & "", ".")
DoCmd.SetWarnings False
strSQL3 = "INSERT INTO tblPC(IDAsset, Shortname, Marque, Type, Serial_Number) Values('" & rstTest2(0)& "', '" & rstTest2(2) & "', '" & Test(0) & "', '" & Test(1) & "', '" & SN(0) & "')"
DoCmd.RunSQL strSQL3
DoCmd.SetWarnings True
Final = Test(0)
Final2 = Test(1)
Final3 = Test(2)
Debug.Print Final
Debug.Print Final2
Debug.Print Final3
i = i + 1
End If
End If
Wend
End Sub
Vla, excuse moi pour l'incrémentation pourrie mais je vient de la faire spécialement pour toi :) Sinon, Maintenant à la place d'utiliser i, j'ai trouvé plus simple : strSQL = "SELECT lIDAsset FROM tblAsset" ''' On sélectionne les ID de la table Set rstTest = dbTestForm.OpenRecordset(strSQL) ''' On mets le résultats dans un recordset Donc là j'ai récupérer tout les ID ensuite la boucle devient un For : For Each lIDAsset In rstTest Execute Next Comme ca plus de problèmes d'ID inexistant ! Par contre ma boucle For foire, "runtime Error 3251 : Operation is not supported for this type of object" :/ Merci ! |
Re :
|
Salut !
|

