Excel VBA : selection de plage

Résolu
Bonjour,

Je travaille dans une macro qui me remonte des commentaire d'un fichier sur l'autre chaque jour. cette partie fonctionne très bien.
Il me faut maintenant, lorsqu'une condition est ok passer le fond des cellules de :
A à F, G à X, Z à AJ en fond vert.
Mon soucis est que je travaille dans une boucle tel que ci dessous :

Set wk1 = Workbooks.Open(Filename:= "test1.xls")
Set wk2 = Workbooks.Open(Filename:= "\test2.xls")
Set ws2 = wk2.Worksheets(1)
derlig2 = ws2.Range("AZ65536").End(xlUp).Row

Set ws1 = wk1.Worksheets(1)
derlig1 = ws1.Range("AZ65536").End(xlUp).Row

' Analyse colonne AZ du fichier 1 - recherche de la clé
For Each cel1 In ws1.Range("AZ3:AZ" & derlig1)

' Analyse colonne AZ du fichier 2 - recherche de la clé
For Each cel2 In ws2.Range("AZ3:AZ" & derlig2)
' Si les clé correspondent, alors attribuer la valeur de la cellule de la colonne L (ligne en cours) du fichier 2 dans la cellule de la colonne BN (ligne en cours)du fichier 1
If cel1.Value = cel2.Value Then

'ws1.Range("AF" & cel1.Row).Select
ws1.Range("AF" & cel1.Row).Value = ws2.Range("AF" & cel2.Row).Value
ws1.Range("AG" & cel1.Row).Value = ws2.Range("AG" & cel2.Row).Value
ws1.Range("AH" & cel1.Row).Value = ws2.Range("AH" & cel2.Row).Value

If (ws2.Range("O" & cel2.Row).Value Like "") Or (ws2.Range("O" & cel2.Row).Value > (ws1.Range("O" & cel1.Row).Value)) Then
ws1.Range("H" & cel1:"L" & cel1,"O" & cel1:"R" & cel1,"T" & cel1:"W" & cel1).Row.Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 10092288
.TintAndShade = 0
.PatternTintAndShade = 0
End With

La syntaxe en gras n'est pas correcte et je peine a trouver la bonne. Quelqu'un aurait il une idée svp ?
Merci d'avance pour votre aide.

6 réponses

  1. Bonjour Mélanie,

    Merci de ta réponse.
    Je viens de tenter la première solution et j'ai un retour "incompatibilité de type" sur la ligne : sheets(ws1).select

    Je sèche la

    Edit : Je pense avoir trouvé. J'ai remplacé le "sheets(ws1).select" par "ws1.Activate"
    et ça semble fonctionner :)

    Merci de votre aide !!!!
    1. Bonjour,

      ta syntaxe est mauvaise :
      sheets(ws1).select
      range(cells(cel1.row,1),cells(cel1.row,6)).select

      sinon, il y en a une mais je ne suis pas sure qu'elle fonctionne essaie de faire le test :
      range(sheets(ws1).cells(cel1.row,1),sheets(ws1).cells(cel1.row,6)).select
      1. Merci aussi a toi ccm81,

        l'union a l'air de bien fonctionner dans un fichier "seul".
        Mon problème vient de l'utilisation de "Workspace"

        Avec l'initialisation de la macro comme suit :
        Set wk1 = Workbooks.Open(Filename:= "test1.xls")
        Set wk2 = Workbooks.Open(Filename:= "\test2.xls")
        Set ws2 = wk2.Worksheets(1)
        derlig2 = ws2.Range("AZ65536").End(xlUp).Row

        Set ws1 = wk1.Worksheets(1)


        J'ai tenté :
        ws1.Range(("A" & cel1.Row), ("F" & cel1.Row)).Select

        et
        ws1.Range(Cells(cel1.Rows, 1), Cells(cel1.Rows, 6)).Select

        Mais rien à faire. Est ce que ma variable ws1 devrait être placé ailleurs ou ma syntaxe n'est pas la bonne ?
        1. bonjour à tous les deux

          pour réunir plusieurs plages tu peux tenter Union
          Dim plage As Range
          Set plage = Union(Range("A1:B5"), Range("C6:D8"))
          plage.Select

          bonne suite
          1. Merci beaucoup Mélanie,

            Je teste ça immédiatement.
            Si je n'abuse pas, connais tu la syntaxe correcte pour sélectionner plusieurs plage non contigües en même temps ?
            J'ai tenté avec les " : " mais ce n'est pas correct.

            L'adaptation donne :
            ws1.Range(Cells(cel1.Rows, 1), Cells(cel1.Rows, 6)).Select

            Mais la macro me retourne : Erreur d'execution 13, "Incompatibilité de type" :(
            1. Bonjour,

              En effet,

              la fonction range se définit comme ca :
              range(1èrecellule,dernière cellule).select

              toi, tu lui demandes l'impossible.

              Voici le bon code :
              range(cells(cel1.rows,1),cells(cel1.rows,24)).select 'sélectionnes la ligne de cel1 et de la 1ère la 24ème colonne
              With Selection.Interior
              .Pattern = xlSolid
              .PatternColorIndex = xlAutomatic
              .Color = 10092288
              .TintAndShade = 0
              .PatternTintAndShade = 0
              End With

              range(cells(cel1.rows,26),cells(cel1.rows,36)).select
              With Selection.Interior
              .Pattern = xlSolid
              .PatternColorIndex = xlAutomatic
              .Color = 10092288
              .TintAndShade = 0
              .PatternTintAndShade = 0
              End With

              Essaie de voir et au besoin adapte