Excel VBA : selection de plage
Résolu
Eaheru
Messages postés
205
Statut
Membre
-
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.
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:
- Excel VBA : selection de plage
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
6 réponses
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
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
bonjour à tous les deux
pour réunir plusieurs plages tu peux tenter Union
bonne suite
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
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" :(
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" :(
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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 !!!!
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 !!!!