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 , pas seulement à cause de l'indentation !

Cordialement.

Rechercher des sujets similaires à "erreur 1004 vba quelle solution"