nommer une colonne de taille dynamique, par macro

zored

XLDnaute Nouveau
Bonjour le forum,

suite à ma question sur ce topic

Pour vous expliquer j'ai mon fichier qui fonctionne de la manière suivante (il analyse les erreurs), tous par macros

On colle l'extraction (environ 15k lignes de 36 colonnes) sur le feuillet extraction puis:

1. l'extraction est trié par code agence (1 code agence = 1 nom d'agence). ça fonctionne
2. on sépare les agences par ongletsça fonctionne
3. on nomme 6 colonnes sur chaque onglet avec le nom de l'agence après: ça ne fonctionne que pour la période que j'ai pris pour mon test, pas pour d'autres, car les autres périodes n'ont pas la même longueur donc le nb de ligne sera différent

"poids1"
"q1"
cpdep1"
etc... jusqu'à 9 pour mes 9 agences

et c'est là que ça coince.

Le soucis c'est que chaque colonne de chaque agence n'a jamais la même longueur. J'ai ouvert un topic à ce sujet (lien plus haut) pour sélectionner la colonne entière. Le problème est que pour me nommer (par macro) la colonne... ben ça ne me selectionne pas ce que je voulais mais uniquement ce qui a été enregistré lors de la dernière macro :confused::confused:

Range("C3").Select
Range(selection, selection.End(xlDown)).Select
ActiveWorkbook.Names.Add Name:="cpdep", RefersToR1C1:= _
"=synthèse!R25C18:R33C18"

pourquoi referstoR1C1:=_"synthèse! etc"

Normalement il aurai pu me prendre refertoR1C1= Range(selection, selection.End(xlDown) ou quelque chose du genre ?

je comprends pas pourquoi ça me fais cette erreur et c'est la même pour chaque colonnes (de chaque agences)
du coup rien ne fonctionne :( je désespère

L'objectif est de coller son extraction et analyser les données d'un coup, pour éviter de nommer 54 colonnes à la main >.<
Le pbm est qu'en cas de différence de longueur d'une de mes colonnes nommées (par macro) ça me plante toute mon analyse (vu qu'il ne me nomme que ce qui aura été enregistré, pas toute la colonne malgré la selection avec alt et shift lors de l'enregistrement)

je vous joint un fichier avec tout dedans et des données lambda et surtout je remercie beaucoup tout ceux qui voudraient m'aider :eek:

Cordialement
H.

EDIT: avec la pièce jointe c'est mieux ... si vous avez des questions j'y répondrais ASAP, je vous invite à cliquer sur analyser.
 

Pièces jointes

  • anomalies chiffrés test lambda.xlsm
    135.5 KB · Affichages: 37
  • anomalies chiffrés test lambda.xlsm
    135.5 KB · Affichages: 45
  • anomalies chiffrés test lambda.xlsm
    135.5 KB · Affichages: 50
Dernière édition:
G

Guest

Guest
Re : nommer une colonne de taille dynamique, par macro

Bonjour,

Voici qui le fait sur le classeur joint:
Code:
Sub testaaaaaaaaaaaaa()
'
' testaaaaaaaaaaaaa Macro
'
Dim arrNoms As Variant: arrNoms = Array("cpdep1", "cparr1", "poids1", "distance1", "quantité1", "datedeb1", "datefin1", "reference1")
Dim i As Integer
With Sheets("agence 1")
    For i = 1 To UBound(arrNoms) + 1
        ThisWorkbook.Names.Add Name:=arrNoms(i - 1), RefersToR1C1:="='agence 1'!" & .Range(.Cells(3, i), .Cells(.Rows.Count, i).End(xlUp)).Address(True, True, xlR1C1)
    Next
End With
End Sub

A+
 

Modeste

XLDnaute Barbatruc
Re : nommer une colonne de taille dynamique, par macro

Bonjour zored,

De ce que j'ai compris (ça reste à confirmer!) tu aurais ta feuille "Synthèse" en première position, puis 9 feuilles (une par agence) et tu voudrais, dans chacune des feuilles "agence" nommer des plages de hauteurs variables, en faisant en sorte que le nom de chaque feuille soit ajouté dans la référence, ainsi que la plage réellement occupée en hauteur (et ce, pour chacune des huit premières colonnes)? La cerise sur le gâteau étant que les noms des plages soient identiques, à l'exception d'un chiffre ajouté à la fin?
Tu garantis, de ton côté, que le contenu, l'ordre et la position de ces huit colonnes sera identique dans chaque feuille agence?

Il te faudra ajouter une boucle, pour passer en revue les 9 feuilles concernées, mais voyons déjà si j'ai compris jusque là! Dans le code suivant, j'ai considéré la feuille qui figure en deuxième position ... et ce que j'ai expliqué ci-dessus :rolleyes: Commence par supprimer les noms existants (avec ta procédure "nettoyage"), puisque le noms qui vont être créés seront identiques, puis exécute le code qui suit:
VB:
Sub testaaaaaaaaaaaaa()
    tabloNoms = Array("cpdep", "cparr", "poids", "distance", "quantité", "datedeb", "datefin", "reference")
    f = 1
    With Sheets(f + 1)
        For col = 1 To 8
            ActiveWorkbook.Names.Add Name:=tabloNoms(col - 1) & f, _
                RefersToR1C1:="='" & .Name & "'!R3C" & col & ":R" & .Cells(50000, col).End(xlUp).Row & "C" & col
        Next col
    End With
    'Sheets("synthèse").Select
    'Range("D6").Select
End Sub

[Edit:] Oupsss! Salut Hasco :):)
 

zored

XLDnaute Nouveau
Re : nommer une colonne de taille dynamique, par macro

Bonjour Hasco, Modeste

Merci pour vos 2 retours et effectivement c'est bien ça dont j'ai besoin.
Le code de HASCO fonctionne mais je ne sais pas comment l'adapter à mes autres agences (onglets).

De mon côté pour te répondre Modeste:

j'ai une première feuille "extraction" (que je n'ai pas mis dans l'exemple car mes manipulations fonctionne pour cette feuille) qui va me décomposer pour chaque agence (onglet) les données de chacune.
J'ai 36 colonnes, qui ne sont malheureusement pas dans cet ordre (je ne vous ai mis que celles qui m’intéressait)

De ce que j'ai compris (ça reste à confirmer!) tu aurais ta feuille "Synthèse" en première position, puis 9 feuilles (une par agence) et tu voudrais, dans chacune des feuilles "agence" nommer des plages de hauteurs variables, en faisant en sorte que le nom de chaque feuille soit ajouté dans la référence, ainsi que la plage réellement occupée en hauteur

exactement ça
(et ce, pour chacune des huit premières colonnes)? La cerise sur le gâteau étant que les noms des plages soient identiques, à l'exception d'un chiffre ajouté à la fin?
j'ai remplacé le chiffre par une agence, mais si prendre un chiffre est plus simple (et c'est sans doute le cas) alors je réadapterais tout, c'est pas un soucis :)
Tu garantis, de ton côté, que le contenu, l'ordre et la position de ces huit colonnes sera identique dans chaque feuille agence?
j'ai joint un fichier avec l'ordre exact de mes colonnes, qui est le même pour mes 9 agences (onglets)

Il te faudra ajouter une boucle, pour passer en revue les 9 feuilles concernées, mais voyons déjà si j'ai compris jusque là! Dans le code suivant, j'ai considéré la feuille qui figure en deuxième position ... et ce que j'ai expliqué ci-dessus Commence par supprimer les noms existants (avec ta procédure "nettoyage"), puisque le noms qui vont être créés seront identiques, puis exécute le code qui suit
ça fonctionne pour l'exemple, mais comme tu l'as fais, justement, remarqué l'ordre n'est pas exactement celui là, je vous rejoint un fichier avec l'ordre exact dans l'onglet "agence 2"

Merci beaucoup d'avance :D

EDIT:
j'ai mis au bon endroit les données pour l'onglet agence 1 également

Bien à vous,
H.
 

Pièces jointes

  • anomalies chiffrés test lambda.xlsm
    140.3 KB · Affichages: 48
  • anomalies chiffrés test lambda.xlsm
    140.3 KB · Affichages: 54
  • anomalies chiffrés test lambda.xlsm
    140.3 KB · Affichages: 46
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : nommer une colonne de taille dynamique, par macro

Re-bonjour,

À nouveau pas certain d'avoir bien compris: l'ordre et l'emplacement des colonnes sera le même dans les 9 feuilles?? Si c'est le cas, essaye le code suivant:
VB:
Sub testaaaaaaaaaaaaaBis()
    tabloNoms = Array("cpdep", "cparr", "poids", "distance", "quantité", "datedeb", "datefin", "reference")
    tabloCol = Array(10, 14, 31, 20, 30, 3, 4, 34)
    For f = 3 To Sheets.Count
        With Sheets(f)
            For col = 0 To 7
                ActiveWorkbook.Names.Add Name:=tabloNoms(col) & f - 2, _
                    RefersToR1C1:="='" & .Name & "'!R3C" & tabloCol(col) & ":R" & .Cells(50000, tabloCol(col)).End(xlUp).Row & "C" & tabloCol(col)
            Next col
        End With
    Next f
    'Sheets("synthèse").Select
   'Range("D6").Select
End Sub

Le même principe peut s'appliquer au code proposé par Hasco, évidemment!
 

zored

XLDnaute Nouveau
Re : nommer une colonne de taille dynamique, par macro

Bonjour modeste, Mapomme,

Je n'avais pas vu vos réponses ! Je vais tester les 2 je vous remercie énormément (je ne comprends pas pourquoi je n'ai pas reçu de mail me prévenant d'une réponse) excusez le déterrage de topic, mais je le fait pour vous dire merci :eek: :)

EDIT: S P L E N D I D E (comme dirais Jim Carrey), ça fonctionne impécablement avec mes 9 onglets et mes propres données... c'est bluffant. Un grand merci !!! ;););)

Bien à vous,
H.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch