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,

    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
    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. 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,

            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. 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 !!!!