Localiser la cellule de la colonne la plus longue d'un ensemble de colonnes

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Dans une feuille j'ai plusieurs colonnes.
Ces colonnes peuvent individuellement avoir des tailles variables, autrement dit elles n'ont pas forcément toutes la même hauteur.
Je voudrais "tout simplement" sélectionner automatiquement (via macro) l'ensemble de ces colonnes.
La seule chose dont je sois sûr, c'est la localisation de la 1ère cellule de la 1ère colonne.
Évidemment... les colonnes sont stables ; entendez par là qu'elles sont toujours au même endroit.
J'ai pensé à un truc tordu et longuet (vous savez... la fatigue due au poids des latitudes... C'est lourd tout ça !), mais existerait-il une solution simple à ce problème ?

Merci pour toute proposition.

Très bonne soirée à tous.
 

job75

XLDnaute Barbatruc
Re : Localiser la cellule de la colonne la plus longue d'un ensemble de colonnes

Re,

Comme indiqué la macro précédente suppose que les noms soient définis dans le classeur.

Avec cette macro, plus compliquée, ils peuvent être définis dans la feuille :

Code:
Sub SelectColonnes(Nomcol$, deb&, fin&)
Dim mincol%, minlig&, nom As Name, n&, maxcol%, lig&, maxlig&
mincol = Columns.Count
minlig = Rows.Count
On Error Resume Next 'si une plage est vide
For Each nom In ThisWorkbook.Names
  For n = Len(nom.Name) To 1 Step -1
    If Not IsNumeric(Mid(nom.Name, n, 1)) Then Exit For
  Next
  n = Val(Mid(nom.Name, n + 1))
  If (nom.Name Like Nomcol & "*" Or nom.Name Like "*!" & Nomcol & "*") _
    And n >= deb And n <= fin Then
    With Range(nom.Name)
      If .Column < mincol Then mincol = .Column
      If .Column > maxcol Then maxcol = .Column
      If .Row < minlig Then minlig = .Row
      lig = 0
      lig = .Find("*", , xlValues, , xlByRows, xlPrevious).Row
      'lig = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row 'autre possibilité
      If lig > maxlig Then maxlig = lig
    End With
  End If
Next
Range(Cells(minlig, mincol), Cells(maxlig, maxcol)).Select
'If maxlig = 0 Then MsgBox "Aucune sélection possible..." 'facultatif
End Sub
A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Localiser la cellule de la colonne la plus longue d'un ensemble de colonnes

Bonsoir,

Pas pu répondre plus tôt, là où j'étais pas de connexion...

Encore merci job, ça marche très bien.
Comme quoi, une idée floue au départ qui se précise par la suite.

En revanche, qu'entends-tu exactement (post #30) par "les noms doivent être définis dans le classeur, pas dans la feuille" ?
Jusqu'à présent, ma foi, j'ai toujours déclaré (nommé) les cellules et/ou plages à gauche de la barre des formules.

Très bonne fin de soirée à tous.
 

job75

XLDnaute Barbatruc
Re : Localiser la cellule de la colonne la plus longue d'un ensemble de colonnes

Bonjour Magic_Doctor, le forum,

En revanche, qu'entends-tu exactement (post #30) par "les noms doivent être définis dans le classeur, pas dans la feuille" ?

Dans la boîte de dialogue du Gestionnaire de noms il y a une liste déroulante permettant de choisir entre le classeur et la feuille.

Pour lister les noms définis tes noms "Colonne" des 2 manières et exécute ces codes :

Code:
Sub Lister()
ListeNoms "Colonne", [A1]
End Sub

Sub ListeNoms(txt$, dest As Range)
Dim nom As Name, n%, a$()
For Each nom In ThisWorkbook.Names
  If nom.Name Like txt & "*" Or nom.Name Like "*!" & txt & "*" Then
    ReDim Preserve a(n) 'base 0
    a(n) = nom.Name
    n = n + 1
  End If
Next
If n Then dest.Resize(n) = Application.Transpose(a)
dest(n + 1).Resize(Rows.Count - n - dest.Row + 1) = Empty
End Sub
Bonne journée.
 

job75

XLDnaute Barbatruc
Re : Localiser la cellule de la colonne la plus longue d'un ensemble de colonnes

Re,

On peut utiliser une fonction VBA :

Code:
Function ListeNoms(txt$)
Application.Volatile 'rend la fonction volatile
Dim nom As Name, n%, a$()
For Each nom In ThisWorkbook.Names
  If nom.Name Like txt & "*" Or nom.Name Like "*!" & txt & "*" Then
    ReDim Preserve a(n) 'base 0
    a(n) = nom.Name
    n = n + 1
  End If
Next
ListeNoms = a 'vecteur ligne
End Function
Fichier joint.

A+
 

Pièces jointes

  • Liste noms(1).xlsm
    41 KB · Affichages: 38

Statistiques des forums

Discussions
312 211
Messages
2 086 295
Membres
103 171
dernier inscrit
clemm