OVH Cloud OVH Cloud

Recherche dans la dernière colonne non vide d'un tableau (Excel 2003)

33 réponses
Avatar
thomas
Bonjour,

Comment faire une recherche dans la dernière colonne non vide d'un tableau?

Cette dernière colonne n'est pas toujours la même

Merci

3 réponses

1 2 3 4
Avatar
lSteph
Bonjour,
Tu devrais mettre un exemple sur cjoint
dans lequel
outre voir la g..de ton tableau
on puisse comprendre
la finalité de cette recherche
ou plutôt amha ce qui simplifierait en allant directement à la
finalité

en outre essaye de répondre aux questions (et vérifie si tu as lu les
posts précédent en entier
parce que tes retours donnent l'impression que tu t'es arrêté juste à
un premier élément qui coincerait avec l'approche de la question aussi
claire soit-elle pour toi mais pas forcément pour nous:

ton propos de départ était bien de faire une recherche dans une
colonne
donc cela devrait ramener quoi:
un numero de ligne ou la valeur d'une ligne déterminée, ou d'un
élément cherché dans une autre colonne?

Ai-je donc bien compris:....?...:

de prime abord tu veux d'abord cibler le numéro de la dernière colonne
du tableau
pour savoir dans quelle colonne effectuer ta recherche?

C'est pourquoi je t'ai suggèré qu'il y ait des titres à chaque colonn e
de tableau.
Ainsi tu peux obtenir son numéro par rapport aux titre et sans se
soucier si en dessous c'est des valeurs ou des formules rechercher son
numéro sur cette base et ensuite t'en servir pour y chercher (valeur
ou formule ou vide ..)
Suis je dans l'idée?

Merci de clarifier ces points en détail.

--
lSteph




On 16 août, 10:31, "thomas" <nomail> wrote:
merci mais comme précédemment ca me donne la dernière colonne non v ide de
formule alors que c'est non vide de valeur qu'il me faudrait et en ait c' est
plutôt un tableau que j'analyse qu'une ligne, donc dernière colonne d e ce
tableau avec des valeurs

"michdenis" a écrit dans le message de groupe d e
discussion : eF6FBk1$
La même fonction qui retourne le numéro de la ligne à la place
de la lettre :

'-------------------------------------
Function DerCol(Ligne As Long)
Dim Adr As String, Rg As Range
Application.Volatile
If Ligne < 1 And Ligne > Cells.Rows.Count Then
    MsgBox "Le numéro de la ligne demandée est inexistant"
    DerCol = "Inexistant"
    Exit Function
End If
Set Rg = Range(Ligne & ":" & Ligne).Find( _
        What:="*", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious)
If Not Rg Is Nothing Then
    DerCol = Rg.Column
Else
    DerCol = 1
End If
End Function
'-------------------------------------

"thomas" <nomail> a écrit dans le message de news:
%236FOz8y$
Merci mais la solution du classeur de Misange est plus adaptée à ce q ue je
recherche car c'est le numéro de colonne dont j'aurais plutôt besoin (pas de
la lettre de la colonne) et pour la dernière colonne contenant contenan t une
valeur. Toutes mes colonnes contiennent une formule - je veux seulement
prendre en compte la dernière colonne qui retourne des valeurs

"michdenis" a écrit dans le message de groupe d e
discussion : uEObGdy$
Tu colles cette fonction personnalisée dans un module Standard
de ton classeur.

Lorsque tu veux l'utiliser dans une cellule, tu écris :
ÞrCol(14)
14 c'est le numéro de la ligne

la fonction te retourne la "Lettre" de la dernière
colonne utilisée sur cette ligne que tu aies une
donnée ou une formule ... même si cette formule
retourne "".

'----------------------------------------
Function DerCol(Ligne As Long)
Dim Adr As String, Rg As Range
Application.Volatile
If Ligne < 1 And Ligne > Cells.Rows.Count Then
    MsgBox "Le numéro de la ligne demandée est inexistant"
    DerCol = "Inexistant"
    Exit Function
End If
Set Rg = Range(Ligne & ":" & Ligne).Find( _
        What:="*", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious)
If Not Rg Is Nothing Then
    DerCol = Split(Rg.Address, "$")(1)
Else
    DerCol = "A"
End If
End Function
'----------------------------------------

"thomas" <nomail> a écrit dans le message de news:
epjfNFt$
Ca marche !

merci

mais en fait ca me donne la dernière colonne du tableau et non la derni ère
colonne sans valeurs
dans toutes les colonnes il y a des formules.. donc non vides et c'est la
dernière colonne sans valeur que je voudrais (les valeurs sont toujours
numériques)

"Frédéric Sigonneau" a écrit dans le message de gro upe de
discussion : e7IJY#s$
Essaye plutôt comme ça :

'================
Function Derniere_Colonne(Zone)
   With ActiveSheet.Range(Zone.Address)
     Derniere_Colonne = .Column + .Columns.Count - 1
   End With
End Function
'================

ou, si tu veux récupérer la lettre de la colonne au lieu de son num éro :

'================
Function Derniere_Colonne(Zone)
Dim X
   With ActiveSheet.Range(Zone.Address)
     X = .Column + .Columns.Count - 1
   End With
   Derniere_Colonne = Split(Cells(1, X).Address, "$")(1)
End Function
'================

FS
---
Frédéric Sigonneauhttp://frederic.sigonneau.free.fr

thomas a écrit :

> J'ai essayé cela :

> Function Derniere_Colonne(Zone As Range)

> With ActiveSheet.Range(Zone)
>     Derniere_Colonne = .Column + .Columns.Count - 1
> End With

> End Function

> mais cela retourne #VALEUR

> merci

> "thomas" <nomail> a écrit dans le message de groupe de discussion :
> e2XY6yr$
> Merci

> c'est directement dans la feuille de calcul que je veux connaître la
> recherche, pas en VBA. je mets ce code dans une fonction alors? et plut ôt
> que UsedRange je passe le nom de la zone en paramètre?

> "Daniel.C" a écrit dans le message de groupe de
> discussion : Ob2t#tr$
> Bonjour.
> With ActiveSheet.UsedRange
>     Colonne = .Column + .Columns.Count - 1
> End With
> Cordialement.
> Daniel
> "thomas" <nomail> a écrit dans le message de news:
> er5Tifr$
>> Bonjour,

>> Comment faire une recherche dans la dernière colonne non vide d'un
>> tableau?

>> Cette dernière colonne n'est pas toujours la même

>> Merci


Avatar
LSteph
... au lire d'autre finalement une solution VBA te conviendrait-elle
ou reste tu sur cette exclusion?

lSteph a écrit :
Bonjour,
Tu devrais mettre un exemple sur cjoint
dans lequel
outre voir la g..de ton tableau
on puisse comprendre
la finalité de cette recherche
ou plutôt amha ce qui simplifierait en allant directement à la
finalité

en outre essaye de répondre aux questions (et vérifie si tu as lu les
posts précédent en entier
parce que tes retours donnent l'impression que tu t'es arrêté juste à
un premier élément qui coincerait avec l'approche de la question aussi
claire soit-elle pour toi mais pas forcément pour nous:

ton propos de départ était bien de faire une recherche dans une
colonne
donc cela devrait ramener quoi:
un numero de ligne ou la valeur d'une ligne déterminée, ou d'un
élément cherché dans une autre colonne?

Ai-je donc bien compris:....?...:

de prime abord tu veux d'abord cibler le numéro de la dernière colonne
du tableau
pour savoir dans quelle colonne effectuer ta recherche?

C'est pourquoi je t'ai suggèré qu'il y ait des titres à chaque colonne
de tableau.
Ainsi tu peux obtenir son numéro par rapport aux titre et sans se
soucier si en dessous c'est des valeurs ou des formules rechercher son
numéro sur cette base et ensuite t'en servir pour y chercher (valeur
ou formule ou vide ..)
Suis je dans l'idée?

Merci de clarifier ces points en détail.

--
lSteph




On 16 août, 10:31, "thomas" <nomail> wrote:
merci mais comme précédemment ca me donne la dernière colonne non vide de
formule alors que c'est non vide de valeur qu'il me faudrait et en ait c'est
plutôt un tableau que j'analyse qu'une ligne, donc dernière colonne de ce
tableau avec des valeurs

"michdenis" a écrit dans le message de groupe de
discussion : eF6FBk1$
La même fonction qui retourne le numéro de la ligne à la place
de la lettre :

'-------------------------------------
Function DerCol(Ligne As Long)
Dim Adr As String, Rg As Range
Application.Volatile
If Ligne < 1 And Ligne > Cells.Rows.Count Then
MsgBox "Le numéro de la ligne demandée est inexistant"
DerCol = "Inexistant"
Exit Function
End If
Set Rg = Range(Ligne & ":" & Ligne).Find( _
What:="*", LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious)
If Not Rg Is Nothing Then
DerCol = Rg.Column
Else
DerCol = 1
End If
End Function
'-------------------------------------

"thomas" <nomail> a écrit dans le message de news:
%236FOz8y$
Merci mais la solution du classeur de Misange est plus adaptée à ce que je
recherche car c'est le numéro de colonne dont j'aurais plutôt besoin (pas de
la lettre de la colonne) et pour la dernière colonne contenant contenant une
valeur. Toutes mes colonnes contiennent une formule - je veux seulement
prendre en compte la dernière colonne qui retourne des valeurs

"michdenis" a écrit dans le message de groupe de
discussion : uEObGdy$
Tu colles cette fonction personnalisée dans un module Standard
de ton classeur.

Lorsque tu veux l'utiliser dans une cellule, tu écris :
ÞrCol(14)
14 c'est le numéro de la ligne

la fonction te retourne la "Lettre" de la dernière
colonne utilisée sur cette ligne que tu aies une
donnée ou une formule ... même si cette formule
retourne "".

'----------------------------------------
Function DerCol(Ligne As Long)
Dim Adr As String, Rg As Range
Application.Volatile
If Ligne < 1 And Ligne > Cells.Rows.Count Then
MsgBox "Le numéro de la ligne demandée est inexistant"
DerCol = "Inexistant"
Exit Function
End If
Set Rg = Range(Ligne & ":" & Ligne).Find( _
What:="*", LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious)
If Not Rg Is Nothing Then
DerCol = Split(Rg.Address, "$")(1)
Else
DerCol = "A"
End If
End Function
'----------------------------------------

"thomas" <nomail> a écrit dans le message de news:
epjfNFt$
Ca marche !

merci

mais en fait ca me donne la dernière colonne du tableau et non la dernière
colonne sans valeurs
dans toutes les colonnes il y a des formules.. donc non vides et c'est la
dernière colonne sans valeur que je voudrais (les valeurs sont toujours
numériques)

"Frédéric Sigonneau" a écrit dans le message de groupe de
discussion : e7IJY#s$
Essaye plutôt comme ça :

'=============== >> Function Derniere_Colonne(Zone)
With ActiveSheet.Range(Zone.Address)
Derniere_Colonne = .Column + .Columns.Count - 1
End With
End Function
'=============== >>
ou, si tu veux récupérer la lettre de la colonne au lieu de son numéro :

'=============== >> Function Derniere_Colonne(Zone)
Dim X
With ActiveSheet.Range(Zone.Address)
X = .Column + .Columns.Count - 1
End With
Derniere_Colonne = Split(Cells(1, X).Address, "$")(1)
End Function
'=============== >>
FS
---
Frédéric Sigonneauhttp://frederic.sigonneau.free.fr

thomas a écrit :

J'ai essayé cela :
Function Derniere_Colonne(Zone As Range)
With ActiveSheet.Range(Zone)
Derniere_Colonne = .Column + .Columns.Count - 1
End With
End Function
mais cela retourne #VALEUR
merci
"thomas" <nomail> a écrit dans le message de groupe de discussion :
e2XY6yr$
Merci
c'est directement dans la feuille de calcul que je veux connaître la
recherche, pas en VBA. je mets ce code dans une fonction alors? et plutôt
que UsedRange je passe le nom de la zone en paramètre?
"Daniel.C" a écrit dans le message de groupe de
discussion : Ob2t#tr$
Bonjour.
With ActiveSheet.UsedRange
Colonne = .Column + .Columns.Count - 1
End With
Cordialement.
Daniel
"thomas" <nomail> a écrit dans le message de news:
er5Tifr$
Bonjour,
Comment faire une recherche dans la dernière colonne non vide d'un
tableau?
Cette dernière colonne n'est pas toujours la même
Merci









Avatar
thomas
dans mon classeur la fonction :

Function Fct_Eva3_2(Plage As Range)
Fct_Eva3_2 = Evaluate("MAX(IF(" & [Plage].Address & "<>"""",column(" &
[Plage].Address & ")))")
End Function

ne marche que si le style de référence n'est pas L1C1 alors que dans ton
classeur ça marche dans tous les cas

bizarre

"thomas" <nomail> a écrit dans le message de groupe de discussion :
uEYqLuv$
Merci à tous

J'obtiens ce que je veux, même si je ne comprends pas la formule utilisée,
ce qui reste un peu frustrant

"thomas" <nomail> a écrit dans le message de groupe de discussion :
uKlmBRv$
Dans formule =MAX(SI(tablo<>"";COLONNE(tablo))) en matriciel, par exemple
(Eval3_2) , Colonne(tablo) ramène toutes les colonnes de la zone en
principe, non? qu'est-ce qui fait que Max ne retient que la dernière ayant
des valeurs ? je ne comprends pas trop la formule conditionnelle

merci


"Misange" a écrit dans le message de groupe de
discussion : OUe#5su$
oui moi aussi mais il y a des formulistes qui sont de vrais dieux
d'excel et ça vaut vraiment la peine de faire un petit effort pour
comprendre...
Sur le sujet, on peut difficilement faire plus complet

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

thomas a écrit :
je suis athée

"Jacky" a écrit dans le message de groupe de discussion
:
u0Wj7nt$
Pourtant......Saint Thomas.....
;o)))



1 2 3 4