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 !

Rechercher des sujets similaires à "probleme vba boucle while"