Erreur d'execution 1004 sur objet Range

lombriiik

XLDnaute Nouveau
Bonjour à tous,

encore une fois je sollicite vos lumières. J'ai écris une petite fonction pour comparer 2 onglets d'un même classeur et remplacer les lignes existantes de l'un avec celles de l'autre. Ca marchait plutôt bien jusqu'à ce que je me rende
compte que je devais quand même garder un bout de la ligne que je supprimais.
Depuis, j'obtiens une erreur 1004 : La méthode 'Range' de l'objet '_worksheet' a échoué sur la ligne où je copie un range de cellules.

Si quelqu'un a une idée, je suis preneur.

Merci d'avance à tous

Code:
Sub Comparer_Fusionner_Feuille(ByVal FeuilleDepart As Worksheet, ByVal FeuilleArrivee As Worksheet)
Dim i, l, L_Trouve As Integer
Dim l1 As Range
Dim Code As String

    l = FeuilleDepart.Range("A1").CurrentRegion.Rows.Count + 1
    i = 2
    
    While i < l
        Code = FeuilleDepart.Cells(i, 1).Value
        Set l1 = FeuilleArrivee.Columns("A").Find(Code, LookIn:=xlValues, lookat:=xlWhole)
        If Not l1 Is Nothing Then
            L_Trouve = FeuilleArrivee.Columns("A").Find(Code, LookIn:=xlValues, lookat:=xlWhole).Row
            MsgBox ("L_Trouve=" & L_Trouve & Chr(10) & "i=" & i)
            [COLOR="Red"][B]FeuilleArrivee.Range(Cells(L_Trouve, 70), Cells(L_Trouve, 81)).Copy ' erreur ici[/B][/COLOR]
            FeuilleDepart.Range(Cells(i, 70), Cells(i, 81)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            l1.EntireRow.Delete Shift:=xlUp
            End If
        i = i + 1
    Wend
    
    Call CopierLignes(FeuilleDepart, FeuilleArrivee)
    Call Suppr_feuille(FeuilleDepart)

End Sub
 

lombriiik

XLDnaute Nouveau
Re : Erreur d'execution 1004 sur objet Range

En fait, j'ai modifié la ligne où j'avais mon erreur de
Code:
FeuilleArrivee.Range(Cells(L_Trouve, 70), Cells(L_Trouve, 81)).Copy
En
Code:
FeuilleArrivee.Range("BR" & L_Trouve & ":CC" & L_Trouve).Copy

Et maintenant, ça marche ...:confused: mais si quelqu'un veux bien m'expliquer mon erreur ce serait avec plaisir. Il me semblait qu'on pouvait définir un Range avec 2 cellules ...

Bonne journée à tous
 
G

Guest

Guest
Re : Erreur d'execution 1004 sur objet Range

Bonjour Lombriiik, le forum,

Déjà L_Trouve puisqu'il doit contenir un numéro de ligne, il faut le déclarer

Dim L_Trouve as Long

Ensuite:

A tester:

Code:
with FeuilleArrivee
   .Range(.Cells(L_Trouve, 70), .Cells(L_Trouve, 81)).Copy 
End Xith

Cells sans le point devant pour faire référence aux cellules de FeuilleArrivee, fait référence à la feuille active même si tu as mis FeuilleArrivee.Range(Cell1,Cell2).
En écriture sans with cela donnerait:
Code:
 FeuilleArrivee.Range(FeuilleArrivee.Cells(L_Trouve, 70), FeuilleArrivee.Cells(L_Trouve, 81)).Copy

A+
 
G

Guest

Guest
Re : Erreur d'execution 1004 sur objet Range

Lombriiik,

Déclarer en Integer une variable pour un travail sur les n° de ligne est une habitude que j'ai longtemps gardé, des premières versions de VB. J'usqu'à une discussion ici même avec l'ami Staple.

Les numéros de lignes pour les versions <2007 vont de 1 à 65536 et les variables integer vont de -32 768 et 32 767.

Donc excel traduit automatiquement en long dès qu'il s'agit de variables faisant référence aux numéros de ligne pour ses calculs internes. Ce qui fait une opération de plus. Alors autant lui éviter cette conversion, qui sur un très grand nombre de lignes peut représenter un poids supplémentaire de traitement.

A+
 

lombriiik

XLDnaute Nouveau
Re : Erreur d'execution 1004 sur objet Range

Merci pour l'information Hasco,

en effet je devais faire le même raisonnement que toi avant d'avoir l'info : on taille la variable au plus juste mais on ignore le genre de traitement que Excel fait derrière ...

Merci pour l'info en tout cas, j'en prends bonne note et merci de ton aide sur mon problème.

Bonne après midi
 

Discussions similaires

Réponses
2
Affichages
129