XL 2010 Une boucle qui plante

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J’ai 2 tableaux. L’un n’a aucune mise en forme, l’autre si.
Au moyen de 2 boucles intriquées, je voudrais que le 1er tableau prenne la même mise en forme que le second.

VB:
Sub Macro1()

    Dim nblgn1 As Byte, nblgn2 As Byte, plage1 As Range, plage2 As Range, cel1 As Range, cel2 As Range
  
    nblgn1 = Application.CountA([ListeItems2].Columns(1)) 'nombre de lignes non vides de la 1ère colonne du tableau "ListeItems2"
    Set plage1 = [ListeItems2].Columns(1).Resize(nblgn1)  'plage des lignes non vides de la 1ère colonne du tableau "LiteItems2"
    nblgn2 = Application.CountA([ListeItems3])            'nombre de lignes non vides du tableau "ListeItems3"
    Set plage2 = [ListeItems3].Resize(nblgn2)             'plage des lignes non vides du tableau "LiteItems3"
  
    Application.ScreenUpdating = False
    For Each cel2 In plage2
        For Each cel1 In plage1
            If cel1.Value = cel2.Value Then
                With cel1
                    .Interior.Color = cel2.Interior.Color
                    .Font.Color = cel2.Font.Color
                End With
                Exit For
            End If
        Next
    Next
    Application.ScreenUpdating = True
End Sub

Ça plante et je me demande bien pourquoi.
 

Pièces jointes

  • Test.xlsm
    18.5 KB · Affichages: 8

OfficeNoob

XLDnaute Nouveau
Bonsoir,

J'ai essayé comme ca :

VB:
Option Explicit

Sub Macro1()

    Dim nblgn1 As Byte, nblgn2 As Byte, plage1 As Range, plage2 As Range, cel1 As Range, cel2 As Range
    Dim nbrLgn As Integer, i As Integer
   
    nblgn1 = Application.CountA([ListeItems2].Columns(1)) 'nombre de lignes non vides de la 1ère colonne du tableau "ListeItems2"
    Set plage1 = [ListeItems2].Columns(1).Resize(nblgn1)  'plage des lignes non vides de la 1ère colonne du tableau "LiteItems2"
    nblgn2 = Application.CountA([ListeItems3])            'nombre de lignes non vides du tableau "ListeItems3"
    Set plage2 = [ListeItems3].Resize(nblgn2)             'plage des lignes non vides du tableau "LiteItems3"
   
    nbrLgn = plage1.Rows.Count
   
    Application.ScreenUpdating = False
    For i = 1 To nbrLgn
        If plage1.Rows(i).Value = plage2.Rows(i).Value Then
            With plage1.Rows(i)
                .Interior.Color = plage2.Rows(i).Interior.Color
                .Font.Color = plage2.Rows(i).Font.Color
            End With
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Je ne sais pas pourquoi la 1ere proposition plante
 

laurent950

XLDnaute Accro
Bonsoir

Set plage1 = [ListeItems2].Columns(1).Resize(nblgn1) 'plage des lignes non vides de la 1ère colonne du tableau "LiteItems2"

Set plage1 = [ListeItems2].Resize(nblgn1, 2) 'plage des lignes non vides de la 1ère colonne du tableau "LiteItems2"

VB:
Sub Macro1()

    Dim nblgn1 As Byte, nblgn2 As Byte, plage1 As Range, plage2 As Range, cel1 As Range, cel2 As Range
 
    nblgn1 = Application.CountA([ListeItems2].Columns(1)) 'nombre de lignes non vides de la 1ère colonne du tableau "ListeItems2"
    Set plage1 = [ListeItems2].Resize(nblgn1, 2) 'plage des lignes non vides de la 1ère colonne du tableau "LiteItems2"
    nblgn2 = Application.CountA([ListeItems3])            'nombre de lignes non vides du tableau "ListeItems3"
    Set plage2 = [ListeItems3].Resize(nblgn2)             'plage des lignes non vides du tableau "LiteItems3"
 
    Application.ScreenUpdating = False
    For Each cel2 In plage2
        For Each cel1 In plage1
            If cel1.Value = cel2.Value Then
                With cel1
                    .Interior.Color = cel2.Interior.Color
                    .Font.Color = cel2.Font.Color
                End With
            ' Exit For ' Pas Besoin (car il y a une condition : If cel1.Value = cel2.Value Then)
            End If
        Next
    Next
    Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
298 015
Messages
1 965 154
Membres
200 865
dernier inscrit
lylia654