Syntaxe s’une plage RANGE : pourquoi parfois avec « : » et parfois avec « , » ?

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

Concernant la suppression de lignes, dans des instruction « complexes » du type

Code:
Rows(Range("A1").CurrentRegion.Rows.Count + 1 & ":" & Rows.Count).Delete

Je retrouve bien la syntaxe de base du type
Code:
rows("15:20").delete
, c'est-à-dire les coordonnées séparées par les deux points ( : )

Mais pour la suppression de colonnes, je ne retrouve plus mes petits. Avec une ligne complexe du style
Code:
Range(Cells(1, Range("A1").CurrentRegion.Columns.Count + 1), Cells(1, Columns.Count).EntireColumn).Delete

je ne retrouve pas du tout la syntaxe de base qu’on lit dans une expression genre
Code:
Range("a15:m20").Delete

Pourquoi a-t-on une virgule dans la formule complexe, là où un simple Range("a15:m20").Delete présente 2 points ( : ) ?

J’essaie de progresser dans la compréhension de ces formules complexes et à mesure que j’avance, je bute sur cette difficulté …


Merci d’avance pour votre aide
 

Roland_M

XLDnaute Barbatruc
Re : Syntaxe s’une plage RANGE : pourquoi parfois avec « : » et parfois avec « , » ?

bonsoir,

je comprend pas bien !?
voir avec cet essai, il n'y a aucun problème !? il y a bien les :
A$ = Rows(Range("A1").CurrentRegion.Rows.Count + 1 & ":" & Rows.Count).Address
MsgBox A$

A$ = Range(Cells(1, Range("A1").CurrentRegion.Columns.Count + 1), Cells(1, Columns.Count).EntireColumn).Address
MsgBox A$
 

Sebast

XLDnaute Impliqué
Re : Syntaxe s’une plage RANGE : pourquoi parfois avec « : » et parfois avec « , » ?

Bonsoir,

en vue d'adapter des instructions complexes mais évidemment très utiles, je les décortique en partant de l'instruction de base, de manière à mieux comprendre celles composées avec des CurrentRegion, Rows.Count etc.

Ce que je voulais dire par mon post précédent, c'est que pour la suppression des lignes, je retrouve dans l'instruction "complexe" la syntaxe qui s'applique à l'instruction de base, à savoir

Code:
Rows(Range("A1").CurrentRegion.Rows.Count + 1 & ":" & Rows.Count).Delete

reprend bien la même "grammaire" que
Code:
rows("15:20").delete

c'est à dire le signe ( : ) séparant les coordonnées

En revanche, pour la suppression des colonnes, ce n'est plus la même "logique" : autant la formule de base
Code:
Range("a15:m20").Delete
a bien les coordonnées séparées par deux points
autant la formule complexe

Code:
Range(Cells(1, Range("A1").CurrentRegion.Columns.Count + 1), Cells(1, Columns.Count).EntireColumn).Delete

a une virgule ...

Toutes les instructions citées fonctionnent, c'est bien ce qui est déroutant : pourquoi avec rows(...).delete reprend-on la même structure entre la formule simple et la formule complexe, mais pas pour range(...).delete ?

Merci d'avance si quelqu'un sait me dire pourquoi
 

Roland_M

XLDnaute Barbatruc
Re : Syntaxe s’une plage RANGE : pourquoi parfois avec « : » et parfois avec « , » ?

re

s'il s'agit de la virgule dans la syntaxe avec range(cells , cells)
c'est tout à fait normal. les deux adresses cells 1'et2' dans la syntaxe sont toujours séparées par une virgule
Range(Cells(1, 1), Cells(10, 5)).Delete

Range(Cells(1, Range("A1").CurrentRegion.Columns.Count + 1), Cells(1, Columns.Count).EntireColumn).Delete
1' Cells(1, Range("A1").CurrentRegion.Columns.Count + 1)
2' Cells(1, Columns.Count).EntireColumn)
soit Range(Cells(1'), Cells(2')).Delete

alors qu'ici il s'agit d'une adresse entre guillements et non de cellules ! d'où les deux points !
soit > Range("a15:m20").Delete
ou > Range(Cells(15, 1), Cells(20, 13)).Delete
ou > Range(Cells(15, "a"), Cells(20, "m")).Delete
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Syntaxe s’une plage RANGE : pourquoi parfois avec « : » et parfois avec « , » ?

Bonjour Sebast,Roland_M
as tu observé ce que donnes tes lignes de code en remplaçant delete par address (lire Roland)
x = Rows(Range("A1").CurrentRegion.Rows.Count + 1 & ":" & Rows.Count).Address '.Delete
x=6:65536,lignes en dehors de Range("A1").currentregion
y = Range(Cells(1, Range("A1").CurrentRegion.Columns.Count + 1), Cells(1, Columns.Count).EntireColumn).Address '.Delete
y=G:IV,colonnes en dehors de Range("A1").currentregion


Code:
Sub test()

'au départ Range("A1").CurrentRegion équivalent à Range("A1:F5")
x = Rows(Range("A1").CurrentRegion.Rows.Count + 1 & ":" & Rows.Count).Address '.Delete
y = Range(Cells(1, Range("A1").CurrentRegion.Columns.Count + 1), Cells(1, Columns.Count).EntireColumn).Address '.Delete
derl = Range("A1").CurrentRegion.Rows.Count
dercol = Range("A1").CurrentRegion.Columns.Count
Range(Cells(1, dercol), Cells(Range("A1").CurrentRegion.Rows.Count, dercol)).Delete 'efface les cellules non vides de la dernière colonne F
Range(Cells(1, Range("A1").CurrentRegion.Columns.Count), Cells(derl, Range("A1").CurrentRegion.Columns.Count)).Delete 'efface les cellules non vides de la dernière colonne E
Range("A1", "B5").Select


End Sub
 

Sebast

XLDnaute Impliqué
Re : Syntaxe s’une plage RANGE : pourquoi parfois avec « : » et parfois avec « , » ?

Bonjour Roland_M, Bebere,

avec vos précisions, tout s'éclaircit. Je ne connaissais pas la structure

Code:
Range(Cells(1, 1), Cells(10, 5)).Delete

Désormais, je comprends tout à fait le pourquoi des instructions citées plus haut, qui ne sont que des variations autour de cette syntaxe ...

Désolé Roland_M, je n'avais pas saisi le sens de ta remarque hier soir (21 h 25) avec les Address. Réflexion faite - et à la lumière de ce que je viens d'apprendre - cette proposition de remplacer .delete par .address aurait dû me mettre sur la piste.


Un grand merci à tous les deux, je vais pouvoir continuer à bosser sans "recopier" mécaniquement mais au contraire en ayant pigé ...

Cordialement
 

Discussions similaires

Réponses
3
Affichages
567

Statistiques des forums

Discussions
312 069
Messages
2 085 038
Membres
102 763
dernier inscrit
NICO26