Erreur 1004 VBA ... Quelle solution
Bonjour à tous,
Je suis débutant en VBA, j'ai du mal à trouver la solution au problème suivant.
J'ai la macro suivante :
"Sub Rappro_IG()
Range("A2:V10000").Select
Selection.Clear
Range("A1").Select
'1/ Recopie des feuilles du classeur protégé sur un nouveau classeur
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Synthese = ActiveWorkbook.Name
ShSynthese = ActiveSheet.Name
ActiveWindow.ActivateNext
IntraG = ActiveWorkbook.Name
ShIntraG = "Feuil1" 'ActiveSheet.Name
Set ShDest = Workbooks(Synthese).Sheets(ShSynthese)
Set ShSour = Workbooks(IntraG) '.Sheets(ShIntraG)
LigneEc = 2
'3/ Création d'une feuille unique qui empile les données de toutes les feuilles
ShSour.Activate
For i = 1 To 20
For c = 1 To 10
If Cells(i, c).Value = "Entity" Then
LigneDébut = Cells(i, c).Row
ColEntity = Cells(i, c).Column
End If
If Cells(i, c).Value = "Partner" Then
ColPartner = Cells(i, c).Column
End If
If Cells(i, c).Value = "Account" Then
ColAccount = Cells(i, c).Column
End If
If Cells(i, c).Value = "Custom1" Then
ColCustom1 = Cells(i, c).Column
End If
If Cells(i, c).Value = "Custom3" Then
ColCustom3 = Cells(i, c).Column
End If
If Cells(i, c).Value = "Custom4" Then
ColCustom4 = Cells(i, c).Column
End If
If Cells(i, c).Value = "Entity Amount" Then
ColEAmount = Cells(i, c).Column
End If
If Cells(i, c).Value = "Partner Amount" Then
ColPAmount = Cells(i, c).Column
End If
If Cells(i, c).Value = "Difference" Then
ColDifference = Cells(i, c).Column
End If
Next c
Next i
ColEntité = ColDifference + 1
ColPartenaire = ColDifference + 2
ColEcarts = ColDifference + 3
ColClasse = ColDifference + 4
LastCol = Cells(LigneDébut, 256).End(xlToLeft).Column
LastCell = Cells(65536, ColEntity).End(xlUp).Row '-1 = si en-tête
For i = LigneDébut + 1 To LastCell
If (Abs(Cells(i, ColEAmount).Value + Cells(i, ColPAmount).Value) < 1 Or IsEmpty(Cells(i, ColAccount).Value) = True) Then GoTo Suite Else
ShDest.Cells(LigneEc, ColEntity).Value = Cells(i, ColEntity).Value
ShDest.Cells(LigneEc, ColPartner).Value = Cells(i, ColPartner).Value
ShDest.Cells(LigneEc, ColAccount).Value = Cells(i, ColAccount).Value
ShDest.Cells(LigneEc, ColCustom1).Value = Cells(i, ColCustom1).Value
ShDest.Cells(LigneEc, ColCustom3).Value = Cells(i, ColCustom3).Value
ShDest.Cells(LigneEc, ColCustom4).Value = Cells(i, ColCustom4).Value
ShDest.Cells(LigneEc, ColEAmount).Value = Cells(i, ColEAmount).Value
ShDest.Cells(LigneEc, ColPAmount).Value = Cells(i, ColPAmount).Value
ShDest.Cells(LigneEc, ColEntité).FormulaR1C1 = "=IF(RC3="""","""",IF(RC7<>"""",RC1,RC2))"
ShDest.Cells(LigneEc, ColPartenaire).FormulaR1C1 = "=IF(RC3="""","""",IF(RC7<>"""",RC2,RC1))"
ShDest.Cells(LigneEc, ColEcarts).FormulaR1C1 = "=IF(RC10="""",0,IF(OR(LEFT(RC3,2)=""R7"",LEFT(RC3,3)=""RG7""),RC7+RC8,RC7-RC8))"
ShDest.Cells(LigneEc, ColClasse).FormulaR1C1 = "=VLOOKUP(RC3,Comptes!R1C1:R2000C6,6,0)"
LigneEc = LigneEc + 1
Suite:
Next i
ShDest.Activate
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub"
Excel fait apparaître une erreur 1004...
Le debogueur s'arrête sur :
If (Abs(Cells(i, ColEAmount).Value + Cells(i, ColPAmount).Value) < 1 Or IsEmpty(Cells(i, ColAccount).Value) = True) Then GoTo Suite Else
Une solution sur ce que je dois remplacer sur la ligne ?
Mille mercis pour vos réponses, elles me seront d'un grand secours !
Bonne journée.
Bonjour,
indente et sélectionne ton code et utilise la balise 'Code' pour le mettre en forme. Là c'est désagréable à lire.
Et sans fichier on ne peut pas tester en situation...
A quoi sont égales tes variables ? Elles ne sont initialisées nulle part...
Je n'aime pas trop ton :
If ... then goto suite
else
Fais plutôt un truc comme ça :
If Not (Abs(Cells(i, ColEAmount).Value + Cells(i, ColPAmount).Value) < 1 Or IsEmpty(Cells(i, ColAccount).Value)) Then
' ton code
Next i
eric
Bonsoir,
Pas évident de deviner sans fichier, tout dépend du contenu de cellule et du chargement des variables.
Dans les piste une colonne à 0 !
Si tu ne sais pas utiliser les espions et le débogage de code (mode pas à pas...), voici une astuce pour t'aider à déceler les premiers symptômes :
Utilise soit Application.StatusBar, soit MsgBox pour identifier un problème de variable non initialisée :
Application.StatusBar = i & "/" & LastCell & "..... ColEAmount=" & ColEAmount & ", ColPAmount=" & ColPAmount & ", ColAccount=" & ColAccount
Sinon
Msgbox ColEAmount=" & ColEAmount & ", ColPAmount=" & ColPAmount & ", ColAccount=" & ColAccount
Cela t'aidera certainement à voir quelle variable est en erreur.
Bonsoir,
Bonsoir à tous,
La première chose à faire en cas d'erreur d'exécution est (après avoir cliqué sur débogage) de relever les valeurs des variables en cause. Ce n'est pas bien sorcier, la valeur s'affiche dans une info-bulle au survol de la variable...
Cela te permet de voir immédiatement si ça plante dès le début de la boucle ou à aul moment du déroulement, et si une variable a une valeur manifestement anormale ou incompatible avec le déroulement de l'exécution...
Il faut savoir aussi qu'une erreur 1004 n'est pas une erreur VBA mais une erreur Excel, résultant d'une action inadéquate sur Excel, par exemple pointer une cellule qui n'existe pas... C'est le plus souvent moins facile à trouver qu'une erreur de syntaxe VBA, mais dans ton cas, penche-toi déjà sur ta variable ColEntity, qui semble devenir fugacement ColEntité pour recevoir une affectation, en conséquence de quoi ColEntity pourrait ne plus avoir une valeur adéquate par la suite.
Je n'en rajoute pas sur l'illisibilité de ton code
Cordialement.