[Résolu ]VBA - Selection d'un tableau de taille variable

NeMoS

XLDnaute Junior
Bonjour le forum, bonjour à tous,

J'aimerai pouvoir sélectionner un tableau pour le formater à ma convenance.
Ce tableau est créé à l'aide d'une macro et son nombre de colonne et de ligne peut varier fortement.

Je récupère le numéro de la dernière colonne non vide (variable fincol)
je récupère le numéro de la dernière ligne non vide (variable finlig)

J'ai vérifié les valeurs de fincol et finlig renvoyées et elles sont correctes

Voici le code
Code:
fincol = Sheets("SEARCh RESULTS").Cells(2, Cells.Columns.Count).End(xlToLeft).Column
finlig = Sheets("SEARCh RESULTS").Range("A" & Rows.Count).End(xlUp).Row
Sheets("SEARCH RESULTS").Range(Cells(2, 1), Cells(finlig, fincol)).Select
' reste du code ensuite

Je pensais avoir correctement écrit mon range mais cela ne me selectionne que la dernière ligne du tableau et non le tableau en entier.

Quelqu'un pourrait-il m'aider et/ou me dire ce qui est mal écrit dans mon code ?

Je vous remercie par avance

Gwen
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : VBA - Selection d'un tableau de taille variable

Bonjour,

essaye ceci :
Code:
Dim fincol As Long, finlig As Long
With Sheets("SEARCh RESULTS")
    fincol = .Cells(2, Columns.Count).End(xlToLeft).Column
    finlig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range(.Cells(2, 1), .Cells(finlig, fincol)).Select
End With

bon après midi
@+
 

NeMoS

XLDnaute Junior
Re : VBA - Selection d'un tableau de taille variable

Bonjour Pierrot,

Ben super, ça marche parfaitement....merci beaucoup.

En revanche, je ne comprends pas bien pourquoi cela ne fonctionnait pas de la façon dont je l'avais écrit...mais je devrais pouvoir survivre à ce douloureux questionnement :D

Merci encore !!
Gwen
 

Pierrot93

XLDnaute Barbatruc
Re : [Résolu ]VBA - Selection d'un tableau de taille variable

Re,

En revanche, je ne comprends pas bien pourquoi cela ne fonctionnait pas de la façon dont je l'avais écrit...mais je devrais pouvoir survivre à ce douloureux questionnement

A voir où était placé ton code, si dans module de feuille, sauf à préciser de façon explicite le nom de la feuille les propriétés s'appliquent à la feuille dans lequel est exécuté le code.....
 

NeMoS

XLDnaute Junior
Re : [Résolu ]VBA - Selection d'un tableau de taille variable

Re,

Vu que c'est une feuille qui se crée par macro, je précise le nom de la feuille.
Et j'ai remplacé ma syntaxe par la tienne sans changer l'emplacement dans la macro...

Mais j'ai vu que dans ta syntaxe, dans le range tu re-précises .cells(), peut être aurais-je du également re-préciser la feuille dans ma syntaxe.
Essai à faire.

Merci encore
Gwen
 

ROGER2327

XLDnaute Barbatruc
Re : [Résolu ]VBA - Selection d'un tableau de taille variable

Bonjour à tous


Du même tonneau, mais plus facile à adapter :​
VB:
Sub toto_1()
Dim FinCol As Long, FinLig As Long
    With ActiveSheet.Range("C4") '...ou tout autre feuille et cellule que l'on voudra. '***
        FinCol = .Parent.Cells(.Row, .Parent.Columns.Count).End(xlToLeft).Column
        FinLig = .Parent.Cells(.Parent.Rows.Count, .Column).End(xlUp).Row
        .Parent.Range(.Cells, .Parent.Cells(FinLig, FinCol)).Select
    End With
End Sub
Ainsi, si l'on veut opérer une sélection du même genre à partir d'autre chose que ActiveSheet.Range("C4"), la seule ligne à modifier est celle marquée ***.

Pour le cas où quelque cellule vide mal placée créerait un souci quelconque, on a :​
VB:
Sub toto_2()
Dim FinCol As Long, FinLig As Long, vf As Boolean, plg As Range, vPlg()
    With ActiveSheet.Range("C4") '...ou tout autre feuille et cellule que l'on voudra. '***
        If IsEmpty(.Cells) Then vf = True: .Value = 0
        FinCol = .Parent.Cells(.Row, .Parent.Columns.Count).End(xlToLeft).Column
        FinLig = .Parent.Cells(.Parent.Rows.Count, .Column).End(xlUp).Row
        If vf Then .Value = Empty
        .Parent.Range(.Cells, .Parent.Cells(FinLig, FinCol)).Select
    End With
End Sub

Si l'on veut raffiner un peu, on peut transformer cette procédure en une fonction fort utile :​
VB:
Function tata(Cel As Range)
Dim FinCol As Long, FinLig As Long, vf As Boolean
    With Cel
        If IsEmpty(.Cells) Then vf = True: .Value = 0
        FinCol = .Parent.Cells(.Row, .Parent.Columns.Count).End(xlToLeft).Column
        FinLig = .Parent.Cells(.Parent.Rows.Count, .Column).End(xlUp).Row
        If vf Then .Value = Empty
        Set tata = .Parent.Range(.Cells, .Parent.Cells(FinLig, FinCol))
    End With
End Function
qu'on appelle par cette procédure :​
VB:
Sub toto_3()
Dim plg As Range
    Set plg = tata(ActiveSheet.Range("C4"))
    plg.Select
End Sub
ou même simplement ainsi :​
VB:
Sub toto_4()
    tata(ActiveSheet.Range("C4")).Select
End Sub


Bonne soirée.


ROGER2327
#6101


Hunyadi 29 Gidouille 139 (hunyadi gras - Nom d’Ubu - fête Suprême Seconde)
25 Messidor An CCXX, 6,7163h - pintade
2012-W28-5T16:07:09Z
 

Discussions similaires

Réponses
3
Affichages
299
Réponses
7
Affichages
361

Statistiques des forums

Discussions
312 287
Messages
2 086 823
Membres
103 395
dernier inscrit
Laurent34