Probleme VBA boucle while
Bonjour à tous,
J'ai un message d'erreur dans ma boucle quand j'atteind "while" "Run error 1004 application defined or object defined error". le voici :
'Error de ligne parfois detecté
While GlobalCost.Cells(19, myCol) <> "COTJVE"
myCol = myCol + 1
D'ailleurs celui que j'ai remplacé avait déjà remarqué l'erreur (d'où le commentaire : 'Error de ligne parfois detecté)
De plus quand j'enlève cotjve le code continue a runné et un autre problème apparait le message d'erreur suivant > Syntax error in INSERT INTO statement.
myreq = "INSERT INTO C_Retrieve_PnL Values(" & AsOf & ",'" & RtrPnl.Cells(18, i) & "','" & DicoPnLType(RtrPnl.Cells(iRow, 5) & Trim(RtrPnl.Cells(iRow, 3)) & "_" & Trim(RtrPnl.Cells(iRow, 8 ))) & "'," & RtrPnl.Cells(iRow, i) & ")"
rs.Open myreq, connexion
A noter que le debug mets en surbrillance "rs.open Myreq, connexion"
N'hésitez pas a me poser des questions si ce n'est pas clair. Je suis débutant en VBA donc je ne sais pas encore quelles infos pertinentes donner.
En vous remerciant grandement !!! )))
Ip
bonsoir,
mets nous ton fichier ou au moins tout le code de la macro et pas un extrait.
'Option du module
Option Explicit
Option Base 0
'Variables Publics
Public GizehItem As String
Public gizeh_utilisateur As String
Public gizeh_MDP As String
Public RC_Path As String
Public RC As String
Public Sub InsertData(ByVal AsOf As Long)
'Déclaration des Variables
Dim rs As New ADODB.Recordset
Dim Keys As Variant
Dim FirstRow As Long, FirstCol As Long, iRow As Long, iCol As Long, myCol As Long, i As Long
Dim myType As String, myreq As String, Perim
Dim DicoType As New Scripting.Dictionary, DicoPnLType As New Scripting.Dictionary, DicoSum As New Scripting.Dictionary
'On supprime les données à la date du AsOf
myreq = " Delete * from C_Retrieve where Asof=" & AsOf
rs.Open myreq, connexion
'On rempli les dicos:
myreq = "Select Bristol_Item, Gizeh_Family from C_CostType"
rs.Open myreq, connexion
While Not rs.EOF
DicoType.Add rs.Fields(0).Value, rs.Fields(1).Value
If Not DicoSum.Exists(rs.Fields(1).Value) Then
DicoSum.Add rs.Fields(1).Value, 0
End If
rs.MoveNext
Wend
rs.Close
myreq = "Select Original_Name, TypeName from C_PnlType"
rs.Open myreq, connexion
While Not rs.EOF
DicoPnLType.Add rs.Fields(0).Value, rs.Fields(1).Value
rs.MoveNext
Wend
rs.Close
iCol = 8
While OwnCost.Cells(9, iCol) <> ""
Perim = Replace(OwnCost.Cells(19, iCol), "RC_", "")
iRow = 20
While OwnCost.Cells(iRow, iCol) <> ""
If Not DicoType.Exists(Trim(OwnCost.Cells(iRow, 7))) Then
'On inclue en BDD les données du nouvelle indicateur
GizehItem = Trim(OwnCost.Cells(iRow, 7))
NewGizehItem.Show
End If
myType = DicoType(Trim(OwnCost.Cells(iRow, 7)))
DicoSum(myType) = DicoSum(myType) + OwnCost.Cells(iRow, iCol)
iRow = iRow + 1
Wend
'On insert en base
For Each Keys In DicoSum
myreq = "Insert Into C_Retrieve Values(" & AsOf & ",'" & Perim & "','" & Keys & "'," & DicoSum(Keys) & ")"
rs.Open myreq, connexion
Next Keys
'On remet le DicoSum a zero
For Each Keys In DicoSum
DicoSum(Keys) = 0
Next Keys
iCol = iCol + 1
Wend
iCol = 7
While PCCost.Cells(13, iCol) <> ""
Perim = "GIZ_PC_" & PCCost.Cells(16, iCol)
iRow = 24
While PCCost.Cells(iRow, iCol) <> ""
If Not DicoType.Exists(Trim(PCCost.Cells(iRow, 6))) Then
'On inclue en BDD les données du nouvelle indicateur
GizehItem = Trim(PCCost.Cells(iRow, 6))
NewGizehItem.Show
End If
myType = DicoType(Trim(PCCost.Cells(iRow, 6)))
DicoSum(myType) = DicoSum(myType) + PCCost.Cells(iRow, iCol)
iRow = iRow + 1
Wend
For Each Keys In DicoSum
myreq = "Insert Into C_Retrieve Values(" & AsOf & ",'" & Perim & "','" & Keys & "'," & DicoSum(Keys) & ")"
rs.Open myreq, connexion
Next Keys
For Each Keys In DicoSum
DicoSum(Keys) = 0
Next Keys
iCol = iCol + 1
Wend
'Allocated Costs
myCol = 1
'Error de ligne parfois detecté
While GlobalCost.Cells(40, myCol) <> "COTJVE"
myCol = myCol + 1
Wend
myreq = "Insert Into C_Retrieve Values(" & AsOf & ",'CTY','Allocated Costs'," & GlobalCost.Cells(25, 10) - GlobalCost.Cells(25, myCol) & ")"
rs.Open myreq, connexion
'Retrieve PnL
myreq = " Delete * from C_Retrieve_PNL where Asof=" & AsOf
rs.Open myreq, connexion
i = 9
While RtrPnl.Cells(15, i) <> ""
iRow = 24
While RtrPnl.Cells(iRow, 5) <> ""
If DicoPnLType(RtrPnl.Cells(iRow, 5) & Trim(RtrPnl.Cells(iRow, 3)) & "_" & Trim(RtrPnl.Cells(iRow, 8 ))) = "" Then
MsgBox RtrPnl.Cells(iRow, 5) & Trim(RtrPnl.Cells(iRow, 3)) & "_" & Trim(RtrPnl.Cells(iRow, 8 ))
End If
myreq = "INSERT INTO C_Retrieve_PnL Values(" & AsOf & ",'" & RtrPnl.Cells(18, i) & "','" & DicoPnLType(RtrPnl.Cells(iRow, 5) & Trim(RtrPnl.Cells(iRow, 3)) & "_" & Trim(RtrPnl.Cells(iRow, 8 ))) & "'," & RtrPnl.Cells(iRow, i) & ")"
rs.Open myreq, connexion
iRow = iRow + 1
Wend
i = i + 1
Wend
End Sub
Problème en gras et soulignés. encore merci j'investigue dessus ce soir je dois réparer le truc pour demain ahah
Bonsoir,
es-tu sûr que owncost et globalcost sont bien initialisées ? je ne vois pas dans ton code que tu leur as mis une valeur.
oui (je n'ai pas mis tout le code), le problème n'est pas là, j'ai un bug a partir de "RS open connexion". La macro stoppe et me dit qu'il y a une error a partir de ca. Bizarre franchement... et j'ai essayé avec close cnx et ensuite rs open cnx et pas de résultats...
(merci pour ton attention et ta réponse by the way)
problème régle sur la partie rsopen, my req cnx > Insert into plutot que INSERT INTO
mais un autre la, c'est sur la premiere ligne en gras ("COTJVE")
encore merci !
Bonsoir,
ou bien globalcost n'est pas intialisée ou bien cette cellule contient une erreur. (#N/A, ou quelque chose de similaire).
BOnjour,
merci pour votre réponse!
qu'entendez vous par initialiser ? je suis débutant en vba je ne connais pas encore tout le jargon )
merci
bonne journée
J'ai normalement réglé le problème. Je reviendrais sur le forum plus tard pour vous confirmer, en mettant les solutions et en (j'espère) cochant le bouton vert !
Bonne journée a tous
Ipman a écrit :BOnjour,
merci pour votre réponse!
qu'entendez vous par initialiser ? je suis débutant en vba je ne connais pas encore tout le jargon )
merci
bonne journée
initialiser = donner une valeur à une variable. Sur base du code fourni, la variable globalcost ne contient aucune valeur. alors qu'elle devrait contenir la référence à une feuille.
Hello, merci H2o4 pour tes réponses.
Problème règlé du coup : curieusement en utilisant le fichier de base (qui n'a pas été copié collé) tout roule. Le pb avec cotjve n'est plus.
En revanche ce que je n'avais pas fait c'est une modification sur un onglet qui sert à faire les extractions pour obtenir mes chiffres. Sinon j'avais demandé à l'ancien stagiaire qui était à ma place, la macro fonctionne meme si il faut parfois fermer et ré-ouvrir le fichier pour limiter les bugs.
Merci à tous pour votre aide et mention particulière pour H2O4.
TRès bonne journée !
see you !