Erreur la méthode range de l'objet _global a échoué

Bonjour tout le monde,

Je suis en train de faire un code qui n'aboutit pas…

J'ai changé les variables de "Integer" à "Double" car je faisais face à l'erreur "Dépassement de capacité". Maintenant le problème est plus bas dans le code et je ne trouve pas la solution.

Le doc comporte des infos plutôt confidentiel donc je vais mettre le code. S'il faut, pour la compréhension, j'allégerai le classeur et le joindrait.

Le but du code est d'extraire les données ou la police est rouge de 3 classeurs sources à un seul classeur "Premium".

Merci d'avance

Ci dessous le code:

Sub MAJ_Premium()

    Range("AZ2:BJ65356").Select
    Selection.ClearContents
    Range("AX1").Select

' Met à jour le tableau "premium" selon les données en rouge

    Dim i As Double
    Dim i1 As Double
    Dim i2 As Double
    Dim j As Double
    Dim k As Double
    Dim l As Long
    Dim m As Double
    Dim derniere As Double
    Dim derniere1 As Double
    Dim derniere2 As Double

    k = 2
    derniere = Range("Recueil!A2").End(xlDown).Row

    l = Worksheets("Recueil").Range("Recueil!AZ2").End(xlDown).Row
    derniere1 = Range("Recueil!O2").End(xlDown).Row

    m = Range("Recueil!AZ2").End(xlDown).Row
    derniere2 = Range("Recueil!AC2").End(xlDown).Row

     ' Extrait les données en rouge du tableau 1 au tableau premium

    For i = 2 To derniere
        If Range("Recueil!A" & i).Font.ColorIndex = 3 Then
            Range("Recueil!AZ" & k).Value = Range("Recueil!A" & i).Value
            Range("Recueil!BA" & k).Value = Range("Recueil!B" & i).Value
            Range("Recueil!BB" & k).Value = Range("Recueil!C" & i).Value
            Range("Recueil!BC" & k).Value = Range("Recueil!D" & i).Value
            Range("Recueil!BD" & k).Value = Range("Recueil!E" & i).Value
            Range("Recueil!BE" & k).Value = Range("Recueil!F" & i).Value
            Range("Recueil!BF" & k).Value = Range("Recueil!G" & i).Value
            Range("Recueil!BG" & k).Value = Range("Recueil!H" & i).Value
            Range("Recueil!BH" & k).Value = Range("Recueil!I" & i).Value
            Range("Recueil!BI" & k).Value = Range("Recueil!J" & i).Value
            Range("Recueil!BJ" & k).Value = Range("Recueil!K" & i).Value
            k = k + 1
        End If

       Next

        ' Extrait les données en rouge du tableau 2 au tableau premium

        For i1 = 2 To derniere1
        If Range("Recueil!O" & i1).Font.ColorIndex = 3 Then
            Range("Recueil!AZ" & l).Value = Range("Recueil!O" & i1).Value
            Range("Recueil!BA" & l).Value = Range("Recueil!P" & i1).Value
            Range("Recueil!BB" & l).Value = Range("Recueil!Q" & i1).Value
            Range("Recueil!BC" & l).Value = Range("Recueil!R" & i1).Value
            Range("Recueil!BD" & l).Value = Range("Recueil!S" & i1).Value
            Range("Recueil!BE" & l).Value = Range("Recueil!T" & i1).Value
            Range("Recueil!BF" & l).Value = Range("Recueil!U" & i1).Value
            Range("Recueil!BG" & l).Value = Range("Recueil!V" & i1).Value
            Range("Recueil!BH" & l).Value = Range("Recueil!W" & i1).Value
            Range("Recueil!BI" & l).Value = Range("Recueil!X" & i1).Value
            Range("Recueil!BJ" & l).Value = Range("Recueil!Y" & i1).Value
            l = l + 1

        End If

       Next

       ' Extrait les données en rouge du tableau 3 au tableau premium

        For i2 = 2 To derniere2
        If Range("Recueil!AC" & i2).Font.ColorIndex = 3 Then
            Range("Recueil!AZ" & m).Value = Range("Recueil!AC" & i2).Value
            Range("Recueil!BA" & m).Value = Range("Recueil!AD" & i2).Value
            Range("Recueil!BB" & m).Value = Range("Recueil!AE" & i2).Value
            Range("Recueil!BC" & m).Value = Range("Recueil!AF" & i2).Value
            Range("Recueil!BD" & m).Value = Range("Recueil!AG" & i2).Value
            Range("Recueil!BE" & m).Value = Range("Recueil!AH" & i2).Value
            Range("Recueil!BF" & m).Value = Range("Recueil!AI" & i2).Value
            Range("Recueil!BG" & m).Value = Range("Recueil!AJ" & i2).Value
            Range("Recueil!BH" & m).Value = Range("Recueil!AK" & i2).Value
            Range("Recueil!BI" & m).Value = Range("Recueil!AL" & i2).Value
            Range("Recueil!BJ" & m).Value = Range("Recueil!AM" & i2).Value
            m = m + 1
        End If

       Next

    MsgBox ("Mise à jour faite ! ")

End Sub

Cordialement,

Bonjour,

Quelques remarques :
- Eviter de mettre des instructions avant de déclarer les variables
- Eviter d'utiliser .Select et .Activate, si l'objet (par exemple la feuille) concerné est précisé, c'est inutile
- Une variable utilisée dans une boucle peut être réemployée dans une autre (tant qu'elles ne sont pas imbriquées)

Un essai à tester :

Sub MAJ_Premium()

Dim Lig As Double, Col As Integer, k As Integer

With Sheets("Recueil") 'Tout ce qui commence par "." se rapporte à cette feuille
    .Range("AZ2:BJ65356").ClearContents 'Suppressions des données en colonnes AZ à BJ

    'Extrait les données en rouge du tableau 1 au tableau premium
    k = 2
    For Lig = 2 To .Range("A" & Rows.Count).End(xlUp).Row
        If .Range("A" & Lig).Font.ColorIndex = 3 Then
            For Col = 1 To 11
                .Cells(k, Col + 51).Value = .Cells(Lig, Col).Value
            Next Col
            k = k + 1
        End If
    Next Lig

    'Extrait les données en rouge du tableau 2 au tableau premium
    k = .Range("AZ" & Rows.Count).End(xlUp).Row + 1 'Première ligne vide
    For Lig = 2 To .Range("O" & Rows.Count).End(xlUp).Row
        If .Range("O" & Lig).Font.ColorIndex = 3 Then
            For Col = 1 To 11
                .Cells(k, Col + 52).Value = .Cells(Lig, Col + 14).Value
            Next Col
            k = k + 1
        End If
    Next Lig

    'Extrait les données en rouge du tableau 3 au tableau premium
    k = .Range("AZ" & Rows.Count).End(xlUp).Row + 1 'Première ligne vide
    For Lig = 2 To .Range("AC" & Rows.Count).End(xlUp).Row
        If .Range("AC" & Lig).Font.ColorIndex = 3 Then
            For Col = 1 To 11
                .Cells(k, Col + 51).Value = .Cells(Lig, Col + 28).Value
            Next Col
            k = k + 1
        End If
    Next Lig
    MsgBox ("Mise à jour faite ! ")
End With

End Sub

Bonjour Pedro22,

Merci pour ta réponse!

Je viens de tester le code que tu as envoyé, et j'ai une erreur "expression trop complexe" sur cette ligne

For Lig = 2 To .Range("A" & Rows.Count).End(xlUp).Row

Sais-tu d'où cela provient ? Je pense que ça sera pareil pour d'autres lignes ?

Merci beaucoup pour ton temps

EDIT: Mon code fonctionne (ci-dessous)

Merci Pedro22

Sub MAJ_Premium()

' Met à jour le tableau "premium" selon les données en rouge

    Dim i As Double
    Dim j As Double
    Dim k As Double
    Dim l As Long
    Dim m As Double
    Dim derniere As Double
    Dim derniere1 As Double
    Dim derniere2 As Double

    Range("AZ2:BJ65356").Select
    Selection.ClearContents
    Range("AX1").Select

    k = 2
    derniere = Range("Recueil!A2").End(xlDown).Row

    derniere1 = Range("Recueil!O2").End(xlDown).Row

    derniere2 = Range("Recueil!AC2").End(xlDown).Row

     ' Extrait les données en rouge du tableau 1 au tableau premium

    For i = 2 To derniere
        If Range("Recueil!A" & i).Font.ColorIndex = 3 Then
            Range("Recueil!AZ" & k).Value = Range("Recueil!A" & i).Value
            Range("Recueil!BA" & k).Value = Range("Recueil!B" & i).Value
            Range("Recueil!BB" & k).Value = Range("Recueil!C" & i).Value
            Range("Recueil!BC" & k).Value = Range("Recueil!D" & i).Value
            Range("Recueil!BD" & k).Value = Range("Recueil!E" & i).Value
            Range("Recueil!BE" & k).Value = Range("Recueil!F" & i).Value
            Range("Recueil!BF" & k).Value = Range("Recueil!G" & i).Value
            Range("Recueil!BG" & k).Value = Range("Recueil!H" & i).Value
            Range("Recueil!BH" & k).Value = Range("Recueil!I" & i).Value
            Range("Recueil!BI" & k).Value = Range("Recueil!J" & i).Value
            Range("Recueil!BJ" & k).Value = Range("Recueil!K" & i).Value
            k = k + 1
        End If

       Next

        ' Extrait les données en rouge du tableau 2 au tableau premium

         l = Worksheets("Recueil").Range("Recueil!AZ2").End(xlDown).Row + 1

        For i = 2 To derniere1
        If Range("Recueil!O" & i).Font.ColorIndex = 3 Then
            Sheets("Recueil").Range("AZ" & l).Value = Sheets("Recueil").Range("O" & i).Value
            Range("Recueil!BA" & l).Value = Range("Recueil!P" & i).Value
            Range("Recueil!BB" & l).Value = Range("Recueil!Q" & i).Value
            Range("Recueil!BC" & l).Value = Range("Recueil!R" & i).Value
            Range("Recueil!BD" & l).Value = Range("Recueil!S" & i).Value
            Range("Recueil!BE" & l).Value = Range("Recueil!T" & i).Value
            Range("Recueil!BF" & l).Value = Range("Recueil!U" & i).Value
            Range("Recueil!BG" & l).Value = Range("Recueil!V" & i).Value
            Range("Recueil!BH" & l).Value = Range("Recueil!W" & i).Value
            Range("Recueil!BI" & l).Value = Range("Recueil!X" & i).Value
            Range("Recueil!BJ" & l).Value = Range("Recueil!Y" & i).Value
            l = l + 1

        End If

       Next

       ' Extrait les données en rouge du tableau 3 au tableau premium

       m = Range("Recueil!AZ2").End(xlDown).Row + 1

        For i = 2 To derniere2
        If Range("Recueil!AC" & i).Font.ColorIndex = 3 Then
            Range("Recueil!AZ" & m).Value = Range("Recueil!AC" & i).Value
            Range("Recueil!BA" & m).Value = Range("Recueil!AD" & i).Value
            Range("Recueil!BB" & m).Value = Range("Recueil!AE" & i).Value
            Range("Recueil!BC" & m).Value = Range("Recueil!AF" & i).Value
            Range("Recueil!BD" & m).Value = Range("Recueil!AG" & i).Value
            Range("Recueil!BE" & m).Value = Range("Recueil!AH" & i).Value
            Range("Recueil!BF" & m).Value = Range("Recueil!AI" & i).Value
            Range("Recueil!BG" & m).Value = Range("Recueil!AJ" & i).Value
            Range("Recueil!BH" & m).Value = Range("Recueil!AK" & i).Value
            Range("Recueil!BI" & m).Value = Range("Recueil!AL" & i).Value
            Range("Recueil!BJ" & m).Value = Range("Recueil!AM" & i).Value
            m = m + 1
        End If

       Next

    MsgBox ("Mise à jour faite ! ")

End Sub

Bonjour,

Jamais vu cette erreur ! Et pourtant j'ai utilisé un paquet de fois ce type d'instruction...
Si tu divises cette instruction en 2, ça donne quoi ?

DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
For Lig = 2 To DerLig

Re,

Je sais pas si tu as vu mon EDIT ?

Je pense que ça fonctionnera comme ça, j'essayerai quand j'aurai un peu de temps et je te redirai !

Merci encore

Tant mieux s'il fonctionne, mais tu fais abstraction de tout ce que j'ai raconté plus haut... Comme un sentiment de parler dans le vide

Non du tout ! J'ai justement testé ton code ce matin et il fonctionne également !

Merci bcp pour ton temps, bonne journée et bonne semaine

Rechercher des sujets similaires à "erreur methode range objet global echoue"