Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sélectionner plusieurs cellules en vba

5 réponses
Avatar
Versatile
Bonjour,
Imaginons que sur une ligne de vba ,j'ai cette s=E9lection :
Range("D13").Select
et que je veuille continuer sur les lignes suivantes =E0 poursuivre
cette s=E9lection, la ligne suivante annulerait la s=E9lection
pr=E9c=E9dente :
Range("D14").Select
Alors comment faire ?... Le probl=E8me est que je ne peux savoir =E0
l'avance qu'elle partie doit =EAtre s=E9lectionn=E9e, cela d=E9pend de
plusieurs facteurs au sein d'une boucle. Deuxi=E8me chose, le nombre de
cellules =E0 s=E9lectionner peut =EAtre assez important...
Merci beaucoup !

5 réponses

Avatar
michdenis
Bonjour,

Tu peux utiliser ceci :

Sub test()
For a = 1 To 10
Range("D13").Resize(a).Select
Next
End Sub

Pour sélectionner les lignes entires

Sub test()
For a = 1 To 10
Range("A5").Resize(a).EntireRow.Select
Next
End Sub

Si tu connais déjà avant l'entrée en boucle le nombre
de ligne à sélectionner, tu peux utiliser seulement ceci,
nul besoin d'employer une boucle

A = 10
Range("A5").Resize(a).EntireRow.Select






"Versatile" a écrit dans le message de news:

Bonjour,
Imaginons que sur une ligne de vba ,j'ai cette sélection :
Range("D13").Select
et que je veuille continuer sur les lignes suivantes à poursuivre
cette sélection, la ligne suivante annulerait la sélection
précédente :
Range("D14").Select
Alors comment faire ?... Le problème est que je ne peux savoir à
l'avance qu'elle partie doit être sélectionnée, cela dépend de
plusieurs facteurs au sein d'une boucle. Deuxième chose, le nombre de
cellules à sélectionner peut être assez important...
Merci beaucoup !
Avatar
Versatile
Merci beaucoup pour toutes ces infos.
J'ai retravaillé ma macro et maintenant je réussis à avoir la chaîn e
au format texte à sélectionner. Malheureusement, cela me donne parfois
des plages trop longues, exemple :

D13:D16,D18:D22,D24:D29,D32:D33,D35:D36,D38:D40,D42,D44:D45,D47:D49,D51:D58 ,D60:D61,D63:D65,D69:D72,D74:D77,D79:D82,D84:D87,D89:D90,D92:D95,D98:D100,D 103:D107,D111:D115,D117:D119,D121:D123,D125:D126,D129:D133,D135:D137,D139:D 140,D142:D143,D145:D147,D149,D151,D153:D154,D156:D158,D161:D166,D171:D174,D 176:D190,D192,D194

La méthose :
Range(LaPlage).Select
ne marche pas car elle semble trop longue... Comment faire ?
Avatar
michdenis
Tu peux toujours faire comme ceci :

Attention, chacune des lignes se termine par "_"
'------------------------------------
Sub test()
Dim Arr(), Elt As Variant

Arr = Array("D13:D16", "D18:D22", "D24:D29", "D32:D332", "D35:D362", _
"D38:D40", "D42", "D44:D45", "D47:D49", "D51:D58", _
"D60:D61", "D63:D65", "D69:D72", "D74:D77", "D79:D82", _
"D84:D87", "D89:D90", "D92:D95", "D98:D100", "D103:D107", _
"D111:D115", "D117:D119", "D121:D123", "D125:D126", _
"D129:D133", "D135:D137", "D139:D140", "D142:D143", _
"D145:D147", "D149,D151", "D153:D154", "D156:D158", _
"D161:D166", "D171:D174", "D176:D190", "D192,D194")

'Une boucle sur chacune des plages de cellules que tu as définis
'L'option "EntireRow" seulement si besoin

For Each elt In Arr
Range(elt).EntireRow.Select
'Le traitement avec la plage de cellules
Next

End Sub
'-------------------------------------



"Versatile" a écrit dans le message de news:

Merci beaucoup pour toutes ces infos.
J'ai retravaillé ma macro et maintenant je réussis à avoir la chaîne
au format texte à sélectionner. Malheureusement, cela me donne parfois
des plages trop longues, exemple :

D13:D16,D18:D22,D24:D29,D32:D33,D35:D36,D38:D40,D42,D44:D45,D47:D49,D51:D58,D60:D61,D63:D65,D69:D72,D74:D77,D79:D82,D84:D87,D89:D90,D92:D95,D98:D100,D103:D107,D111:D115,D117:D119,D121:D123,D125:D126,D129:D133,D135:D137,D139:D140,D142:D143,D145:D147,D149,D151,D153:D154,D156:D158,D161:D166,D171:D174,D176:D190,D192,D194

La méthose :
Range(LaPlage).Select
ne marche pas car elle semble trop longue... Comment faire ?
Avatar
Hervé
Bonsoir,

Une possibilité, scinde ta chaîne en plusieurs ranges et fait une union :

Sub Selectionner()

Union(Range("D13:D16,D18:D22,D24:D29,D32:D33,D35:D36,D38:D40"), _
Range("D42,D44:D45,D47:D49,D51:D58,D60:D61,D63:D65,D69:D72"), _
Range("D74:D77,D79:D82,D84:D87,D89:D90,D92:D95,D98:D100,D103:D107"),
_
Range("D111:D115,D117:D119,D121:D123,D125:D126,D129:D133,D135:D137"),
_
Range("D139:D140,D142:D143,D145:D147,D149,D151,D153:D154,D156:D158"),
_
Range("D161:D166,D171:D174,D176:D190,D192,D194")).Select

End Sub


Hervé.


"Versatile" a écrit dans le message de
news:
Merci beaucoup pour toutes ces infos.
J'ai retravaillé ma macro et maintenant je réussis à avoir la chaîne
au format texte à sélectionner. Malheureusement, cela me donne parfois
des plages trop longues, exemple :

D13:D16,D18:D22,D24:D29,D32:D33,D35:D36,D38:D40,D42,D44:D45,D47:D49,D51:D58,D60:D61,D63:D65,D69:D72,D74:D77,D79:D82,D84:D87,D89:D90,D92:D95,D98:D100,D103:D107,D111:D115,D117:D119,D121:D123,D125:D126,D129:D133,D135:D137,D139:D140,D142:D143,D145:D147,D149,D151,D153:D154,D156:D158,D161:D166,D171:D174,D176:D190,D192,D194

La méthose :
Range(LaPlage).Select
ne marche pas car elle semble trop longue... Comment faire ?
Avatar
LSteph
Bonjour,

1-Si tes plages sont multiples et variées mais qu'il y a régulièremen t
des plages type
tu peux définir des noms.
comme pris dans ton exemple
ainsi
D13:D16,D18:D22,D24:D29,D32:D33,D35:D36,D38:D40,D42,D44:D45,D47:D49
pourrait aussi bien s'appeler "toto" ou "plagetruc"

[toto].select te permettra de l'atteindre mais en général
Select est tout à fait inutile surtout s'il est suivi de suite apres
d'une instruction Selection.copy ou tout autre
Selection.fairececi ou selection.fairecela

autant ecrire [maplage].faitledirect


2-S'il n'y a pas de plages type mais différents cas de figure qui font
que dans une même plage à considérer certaines cellules n'ont pas à
être traitées tantôt lesunes tantôt d'autres.

Alors il faut toujours désigner ta plage globale et être capable
d'identifier celles qui minoritairement ont cette fameuse bonne raison
d'être écartées.

exemple

for each c in [maplage].cells
if c>14 then
'...onfait ceci cela

ou encore

Select case c

Case "x","y", "z"
'on fait rien
Case "a","b"
'on fait ceci
Case else
'on fait cela
End select

ou même que ce soit par if ou select case choisir celles à écarter

.. D27,D25,D..

Bref tout dépend de l'objectif et de ce qui coute le moindre effort.

Cordialement.

--
LSteph






On 3 mai, 17:04, Versatile wrote:
Bonjour,
Imaginons que sur une ligne de vba ,j'ai cette sélection :
    Range("D13").Select
et que je veuille continuer sur les lignes suivantes à poursuivre
cette sélection, la ligne suivante annulerait la sélection
précédente :
    Range("D14").Select
Alors comment faire ?... Le problème est que je ne peux savoir à
l'avance qu'elle partie doit être sélectionnée, cela dépend de
plusieurs facteurs au sein d'une boucle. Deuxième chose, le nombre de
cellules à sélectionner peut être assez important...
Merci beaucoup !