Excel VBA : selection de plage

Résolu/Fermé
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 26 mai 2011 à 16:09
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 - 27 mai 2011 à 08:39
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.
A voir également:

6 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 16:50
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
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
26 mai 2011 à 17:24
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
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
Modifié par Eaheru le 26/05/2011 à 17:18
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
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
27 mai 2011 à 08:23
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
27 mai 2011 à 08:30
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
Eaheru Messages postés 197 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 12 mars 2018 20
Modifié par Eaheru le 27/05/2011 à 08:43
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