Vba excel sélectionner une plage non définie?
Résolu/Fermé
platinium
-
10 oct. 2007 à 00:13
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 20 oct. 2007 à 11:01
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 20 oct. 2007 à 11:01
A voir également:
- Vba excel sélectionner une plage non définie?
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Calculer une moyenne sur excel - Guide
- Word et excel gratuit - Guide
- Si et excel - Guide
3 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 257
20 oct. 2007 à 11:01
20 oct. 2007 à 11:01
Bonjour,
Tu peux sélectionner ta zone en cours avec .currentregion :
Range("A17").CurrentRegion.Select
La selection s'étend tant que les cellules autour ne sont pas vides.
eric
Tu peux sélectionner ta zone en cours avec .currentregion :
Range("A17").CurrentRegion.Select
La selection s'étend tant que les cellules autour ne sont pas vides.
eric
Bonjour BloodyAngel,
Merci pour ta réponse, que je consulte tard car je n'ai pas eu le temps de la consulter plus tôt.
J'ai essayer ta méthode, mais ça n'a pas pas fonctionner, et je n'ai pas réussi à l'adapter. J'ai cependant trouver une autre solution, bien plus lourde que celle que tu m'as proposer mais qui fonctionne.
Voici le principe que j'ai utilisé dans un module :
Sub bordure()
Sheets("devis").Range("a17:i18" & i & "").Select
If Sheets("devis").[a19].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i19" & i & "").Select
If Sheets("devis").[a20].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i20" & i & "").Select
If Sheets("devis").[a21].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i21" & i & "").Select
' ........
End If
End If
End If
fin:
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Voilà, je sais que la partie & i & "") du code Sheets("devis").Range("a17:i18" & i & "").Select ne doit pas servir à grand chose car i n'est pas défini, mais ça fonctionne pour le moment. je ferai le tri plus tard.
Merci BloodyAngel, et excuse-moi pour la réponse très tardive !
Merci pour ta réponse, que je consulte tard car je n'ai pas eu le temps de la consulter plus tôt.
J'ai essayer ta méthode, mais ça n'a pas pas fonctionner, et je n'ai pas réussi à l'adapter. J'ai cependant trouver une autre solution, bien plus lourde que celle que tu m'as proposer mais qui fonctionne.
Voici le principe que j'ai utilisé dans un module :
Sub bordure()
Sheets("devis").Range("a17:i18" & i & "").Select
If Sheets("devis").[a19].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i19" & i & "").Select
If Sheets("devis").[a20].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i20" & i & "").Select
If Sheets("devis").[a21].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i21" & i & "").Select
' ........
End If
End If
End If
fin:
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End Sub
Voilà, je sais que la partie & i & "") du code Sheets("devis").Range("a17:i18" & i & "").Select ne doit pas servir à grand chose car i n'est pas défini, mais ça fonctionne pour le moment. je ferai le tri plus tard.
Merci BloodyAngel, et excuse-moi pour la réponse très tardive !
BloodyAngel
Messages postés
1482
Date d'inscription
mardi 21 juin 2005
Statut
Contributeur
Dernière intervention
21 juin 2018
403
10 oct. 2007 à 00:44
10 oct. 2007 à 00:44
J'ai pas trop compris ton histoire mais je crois avoir fais un truc un peu semblable donc je t'envoie toujours le code que j'ai fais...
Je dis pas que c'est LA méthode mais c'est une méthode...
Explications :
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeBottom).Weight = xlThick
-> Feuille numéro1, Range à partir de A3 jusqu'à la prochaine cellule vide en verticle et jusque K3 en horizontal,
Bordure du bas en xlThick
Les autres lignes suivent le même principe. Après je fais une boucle pour terminer le boulot...
Pour que cette façon de procéder fonctionne, il faut que dans ton tableau il y ait au moins une colonne où il n'y a pas de cellule vide (colonne A chez moi).
CODE
-------
'''''''''''''''''''''''''''
' Formattage de la grille '
'''''''''''''''''''''''''''
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeBottom).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeRight).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeLeft).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlInsideHorizontal).Weight = xlThin
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlInsideVertical).Weight = xlThin
i = 3 ' i est un Integer
While Cells(i, 2) <> ""
Cells(i, 1).Borders(xlEdgeLeft).Weight = xlThick
Cells(i, 1).Borders(xlEdgeRight).Weight = xlThin
Cells(i, 1).Borders(xlEdgeBottom).Weight = xlThin
i = i + 1
Wend
Cells(i, 1).Borders(xlEdgeTop).Weight = xlThick
Je dis pas que c'est LA méthode mais c'est une méthode...
Explications :
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeBottom).Weight = xlThick
-> Feuille numéro1, Range à partir de A3 jusqu'à la prochaine cellule vide en verticle et jusque K3 en horizontal,
Bordure du bas en xlThick
Les autres lignes suivent le même principe. Après je fais une boucle pour terminer le boulot...
Pour que cette façon de procéder fonctionne, il faut que dans ton tableau il y ait au moins une colonne où il n'y a pas de cellule vide (colonne A chez moi).
CODE
-------
'''''''''''''''''''''''''''
' Formattage de la grille '
'''''''''''''''''''''''''''
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeBottom).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeRight).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeLeft).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlInsideHorizontal).Weight = xlThin
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlInsideVertical).Weight = xlThin
i = 3 ' i est un Integer
While Cells(i, 2) <> ""
Cells(i, 1).Borders(xlEdgeLeft).Weight = xlThick
Cells(i, 1).Borders(xlEdgeRight).Weight = xlThin
Cells(i, 1).Borders(xlEdgeBottom).Weight = xlThin
i = i + 1
Wend
Cells(i, 1).Borders(xlEdgeTop).Weight = xlThick