Sélectionner toute la feuille sauf tableau de données

jacks39

XLDnaute Junior
Bonsoir à tous,

Ma question est plutôt simple, mais la réponse compliqué (enfin pour moi lol).
Je pense que vous allez pouvoir m'aider...

J'ai un tableau de données sur une feuille et j'aimerais savoir si il possible en vba de sélectionner toutes cellules qui composent la feuille sauf celles qui composent mon tableau (tout sauf mon tableau).

Je pense que cela ne devrait pas être trop difficile pour les pros que vous etes ;-)

Merci d'avance,

jacks39
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Sélectionner toute la feuille sauf tableau de données

Bonsoir jacs39,

Merci pour le fichier exemple fourni gracieusement :(. Un essai dans le fichier joint pour un tableau en cellule C4. Le code est dans le module de code de Feuil1:
VB:
Sub ToutSaufTableau()
Dim tablo As Range, sel As Range, x As Range
  Set tablo = Range("c4").CurrentRegion
  On Error Resume Next
  Set x = Rows("1:" & tablo.Row - 1)
  If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
  Set x = Rows(tablo.Row + tablo.Rows.Count & ":" & Rows.Count)
  If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
  Set x = Range(Cells(1, 1), Cells(1, tablo.Column - 1)).EntireColumn
  If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
  Set x = Range(Cells(1, tablo.Column + tablo.Columns.Count), Cells(1, Columns.Count)).EntireColumn
  If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
  sel.Select
  On Error GoTo 0
End Sub
 

Pièces jointes

  • jacks39-selctionner tout sauf tableau v1.xlsm
    16.7 KB · Affichages: 32
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Sélectionner toute la feuille sauf tableau de données

re,

Un essai pour généraliser le complément à la feuille d'une zone multi-plage.

Cliquer sur le bouton bleu, sélectionner une ou des plages puis cliquer sur OK dans la boîte de dialogue de sélection.

Le code du complément est dans module1.
VB:
Function ToutSaufDesZones(mesZones As Range) As Range
'--------------------------------------------------------------------------
' retourne le range de toute la feuille sauf mesZones
' mesZones est un ensemble de plages rectangulaires
' mesZones ne doit pas être vide et ne doit pas être la feuille entière
'--------------------------------------------------------------------------
Dim xzone As Range, sel As Range, xsel As Range
  On Error Resume Next
  For Each xzone In mesZones.Areas
    Set xsel = ToutSaufUneZone(xzone)
    If sel Is Nothing Then Set sel = xsel Else Set sel = Intersect(sel, xsel)
  Next xzone
  On Error GoTo 0
  Set ToutSaufDesZones = sel
End Function

Function ToutSaufUneZone(UneZone As Range) As Range
'--------------------------------------------------------------------------
' retourne le range de toute la feuille sauf UneZone.
' UneZone est une unique plage rectangulaire de cellules contigües.
' Unezone ne doit pas être vide (on peut pas déterminer la feuille parent)
' une zone ne doit pas être la feuille entière (car le complément à la
' feuille entière est vide)
'--------------------------------------------------------------------------
Dim sel As Range, x As Range
  With UneZone.Parent
    On Error Resume Next
    Set x = .Rows("1:" & UneZone.Row - 1)
    If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
    Set x = .Rows(UneZone.Row + UneZone.Rows.Count & ":" & Rows.Count)
    If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
    Set x = .Range(.Cells(1, 1), .Cells(1, UneZone.Column - 1)).EntireColumn
    If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
    Set x = .Range(.Cells(1, UneZone.Column + UneZone.Columns.Count), .Cells(1, Columns.Count)).EntireColumn
    If sel Is Nothing Then Set sel = x Else Set sel = Union(sel, x)
    On Error GoTo 0
    Set ToutSaufUneZone = sel
  End With
End Function
 

Pièces jointes

  • jacks39-selectionner tout sauf zone complexe v1.xlsm
    22.1 KB · Affichages: 38

jacks39

XLDnaute Junior
Re : Sélectionner toute la feuille sauf tableau de données

Bonjour mapomme,

Merci pour ton code mais j'ai oublié de préciser que j'aurais voulu ne pas à avoir à sélectionner moi même le(s) tableau(x) de donnée(s).
En passant par un used.range.select par exemple. C'est un tableau qui est amené à évoluer dans le temps.
Je ne sais pas si je suis assez clair dans mes propos mais n'hésitez pas à me demander ci besoin.
Rany
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Sélectionner toute la feuille sauf tableau de données

Bonjour jacks39, mapomme,

Au post #1 on parle d'un tableau.

En supposant qu'il soit nommé Tableau placer dans un module standard :

Code:
Sub SelectionInverse()
Dim P As Range
With [Tableau]
  .Parent.Activate
  Set P = Range(Columns(.Column + .Columns.Count), Columns(Columns.Count))
  Set P = Union(P, Rows(.Row + .Rows.Count & ":" & Rows.Count))
  If .Column > 1 Then Set P = Union(P, Columns(1).Resize(, .Column - 1))
  If .Row > 1 Then Set P = Union(P, Rows(1).Resize(.Row - 1))
End With
P.Select
End Sub
A+
 
Dernière édition:

jacks39

XLDnaute Junior
Re : Sélectionner toute la feuille sauf tableau de données

Bonjour job75,
Merci pour ton code job75.
C'est presque ça sauf que j'aimerais ne pas à avoir à donner un nom à mon tableau.
Je voudrais qu'il le détecte l'emplacement du tableau tout seul sans que je lui précise en passant par UsedRange par exemple.
Jacks39
 

job75

XLDnaute Barbatruc
Re : Sélectionner toute la feuille sauf tableau de données

Re,

S'il y a des données ailleurs que dans le tableau le "UsedRange" ne sera d'aucune utilité.

Vous pouvez aussi, comme l'a fait ma pomme, utiliser "CurrentRegion".

A+
 

Discussions similaires