Rendre REF plage automatic

Bonjour,

Sur une feuille Data j'ai mes donnés de base mais qui peux changé de place sans cesse mais le mot clé est "cumulatif"

dans un Onglet Tri je tri ces Datas auquel je vais faire remonter des valeurs associés

est-il possible de rendre la chose automatisé, en gros de cree la plage à partir de cumulatif et compté le nombre de ligne existant non nul

Merci d'avance pour votre support

10ref-auto.zip (55.54 Ko)

Bonjour,

Essayer :

Sub Test()
    Dim k%, n%, c As Range
    With Worksheets("DATA")
        Set c = .Rows(1).Find("Cumulatif")
        If Not c Is Nothing Then
            ThisWorkbook.Names.Add "REFI", "=DATA!" & Range(c.Cells(2, 1), _
             c.End(xlDown)).Address
        End If
    End With
End Sub

Cordialement.

Bonjour Barachoie, Môssieur FERRAND, bonjour le forum,

Je te propose le code ci-dessous mais je ne comprends pas comment avec 1322 lignes de données, tu te retrouves avec 1643 lignes à la fin ?!...

Le code :

Sub Macro1()
Dim D As Worksheet 'déclare la variable D (onglet Data)
Dim T As Worksheet 'déclare la variable T (onglet Tri)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TVT() As Variant 'déclare la variable TVT (Tableau des Valeurs Transformées)

Set D = Worksheets("DATA") 'définit l'onglet D
Set T = Worksheets("TRI") 'définit l'onglet T
T.Cells.Clear 'vide l'onglet T
Set R = D.Rows(1).Find("Cumulatif", , xlValues, xlWhole) 'définit la recherceh R (recherche "Cumulatif" dans la ligne 1 de l'onglet D)
If R Is Nothing Then Exit Sub Else COL = R.Column 'si aucune occurrence trouvée sort de la procédure sinon définit la colonne COL
DL = D.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet D
TV = D.Range(D.Cells(3, COL), D.Cells(DL, COL + 2)) 'définit le tableau des valeurs TV de l'onglet D
NL = UBound(TV, 1) 'définit le nombre de ligne NL du tableau des valeurs TV
ReDim TVT(1 To NL, 1 To 3) 'redimensionne le tableau des valeur transformées TVT
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV
    TVT(I, 1) = Split(TV(I, 1), "~")(0) 'récupères dans la ligne I colonne 1 du tableau des valeurs transformée TVT la partie avant le tilde "~" de la donnée en ligne I, colonne 1 de TV
    TVT(I, 2) = Split(TV(I, 1), "~")(1) 'récupères dans la ligne I colonne 2 du tableau des valeurs transformée TVT la partie après le tilde "~" de la donnée en ligne I, colonne 1 de TV
    TVT(I, 3) = TV(I, 3) 'récupères dans la ligne I colonne 3 du tableau des valeurs transformée la donnée en ligne I, colonne 3 de TV
Next I 'prochaine ligne de la boucle
T.Cells(1, COL).Value = "TRI CROISSANT" 'écrit"TRI CROISSANT" dans la cellule ligne 1 colonne COL
T.Cells(2, COL).Resize(NL, 3) = TVT 'renvoie le tableau TVT dans la cellule redimensionnée ligne 2 colonne COL
T.Cells(1, COL).CurrentRegion.Offset(1, 0).Sort key1:=T.Cells(2, COL + 1), order1:=xlAscending, Header:=xlNo 'tri croissant des valeurs après le tilde "~"
DL = T.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet T
TV = T.Range(T.Cells(2, COL), T.Cells(DL, COL + 2)) 'définit le tableau des valeurs TV de l'onglet T
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV
    TV(I, 1) = TV(I, 1) & "~" & TV(I, 2) 'récupère dans la ligne I colonne 1 les valeurs concatenées séparées par un tilde "~"
    TV(I, 2) = TV(I, 3) 'récupère dans la ligne I colonne 2 la fréquence
    TV(I, 3) = "" 'efface la donnée en colonne 3
Next I 'prochaine ligne de la boucle
T.Cells(2, COL).Resize(NL, 3) = TV 'renvoie le tableau TV dans la cellule redimensionnée ligne 2 colonne COL de l'onglet T
T.Columns(COL).HorizontalAlignment = xlCenter 'centrage de la colonne COL
End Sub

Hello ThauThème !

Tu me rends dubitatif ! Je m'étais persuadé que le sujet portait sur la localisation de la plage du fait qu'elle était mouvante !

(Et aussi sans doute parce que le précédent sujet de l'intéressé portait sur le tri... )

A suivre

Bonjour le fil, bonjour le forum,

@MFerrand,

En fait quand j'ai fini et que j'allais répondre j'ai vu ta réponse et je me suis dit : Bon sang mais c'est bien dur ! (comme disait ma sœur en mettant sa main dans la culotte d'un zouave...). Tu as bien raison j'ai fait tout ça pour rien. Mais pour avoir l'air moins bête je dirais que c'est pour la foune (le fun en Sétois moderne)...

Salut ThauThème !

Rien de grave ! Peut-être as-tu eu raison ! Ce type de tri, dans des conditions un peu différentes, avait fait l'objet d'un sujet précédent... Tu y ajoutes une solution ! Pour moi il était normal que je m'oriente autrement, m'étant déjà penché sur le tri ailleurs.

Je n'ai d'ailleurs, en excluant le tri, pas totalement répondu à la question, mais c'est volontaire !

Pour l'instant, je suis envahi de messages !! Ma boîte chez mon ex-FAI qui a mis la clé sous la porte, qui avait cessé de fonctionner depuis près d'une semaine (je craignais une fermeture totale et avais commencé à modifier les adresses fournies ici ou là) vient de se réactiver (son serveur qui devait être en rideau et ils n'ont pas mis beaucoup de célérité à le rétablir), et j'ai une masse qui se déverse... On va tâcher d'éliminer tout ça !

Bonne journée.

MFerrand et ThauThème bonjour et Merci pour vos soluces

Rapide et efficace comme chaque fois

MFerrand pour la plage je l'ai étendu à "=DATA!" & Range(c.Cells(2, 3), (car il restait sur une colonne)

Merci !!!!!!!

ThauThème c'est une autre Soluce de tri très détaillé et vraiment Cool Merci beaucoup

Bien cordialement

MFerrand pour la plage je l'ai étendu à "=DATA!" & Range(c.Cells(2, 3), (car il restait sur une colonne)

Ça, c'était volontaire, une plage sur une colonne est beaucoup plus souple à l'utilisation en VBA :

Tu veux les 3 colonnes : [REFI].Resize(, 3)

Tu ne veux que la 3e : [REFI].Offset(, 2)

etc.

Ce n'est pas à cela que je faisais allusion en disant que je n'avais pas répondu complètement...

Bonne soirée

Merci infiniment

Bonne soirée

Rechercher des sujets similaires à "rendre ref plage automatic"