Excel VBA : selection de plage

Résolu
Eaheru Messages postés 205 Statut Membre -  
Eaheru Messages postés 205 Statut Membre -
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. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. Eaheru Messages postés 205 Statut Membre 20
     
    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" :(
    0
  4. Eaheru Messages postés 205 Statut Membre 20
     
    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 ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
    0
  7. Eaheru Messages postés 205 Statut Membre 20
     
    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 !!!!
    0