Macro: Récupérer nom d'une colonne à partir d'un indice précis

Résolu/Fermé
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015 - Modifié par pijaku le 8/07/2014 à 11:13
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015 - 8 juil. 2014 à 14:55
Bonjour les génies :) ,

Je voudrai svp savoir comment sur Excel avec VBA faire pour récupérer les noms des colonnes à droite à partir d'une colonne précise (F1) et coller ces noms dans des onglets automatiquement crées.

La génération des onglets se fait correctement sauf que la récupération des noms ne marche pas chez moi.
J'ai essayé en dur ça marche avec : Tot = Cells(1, 6)
mais je veux qu'a chaque fois une colonne se crée que son nom apparait dans l'onglet généré.

voici le code (voir les flèches où ça pose pb) :

-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-

    With Sheets(4)
         'initialisations
         .Range("A1:E1").Copy
         Ligfin = Columns("A").Find("*", , , , , xlPrevious).Row
         Tot = Cells(1, 6)                            '<---------------------------- En dur le nom de la col 6
         'nombre de choix
         Nbre_chx = Application.CountIf(Rows(1), Tot)
         'mémorisation feuil4
         T_base = .Range(.Cells(2, 1), .Cells(Ligfin, 5 + Nbre_chx))
         For Chx = 1 To Nbre_chx
              ReDim T_test(5, 1)
              Cptr_test = 0
    'sélection des "USED" pour les TOT
              For Idx = 1 To UBound(T_base)
                   If (T_base(Idx, 5 + Chx) = "USED") Then
                         Cptr_test = Cptr_test + 1
                        ReDim Preserve T_test(5, Cptr_test)
                        For Col = 1 To 5
                             T_test(Col, Cptr_test) = T_base(Idx, Col)
                        Next
                       
                   End If
              Next
              .Range("A1:E1").Copy
    'construction feuille Tots
    
              Sheets.Add After:=Sheets(Sheets.Count)
              With ActiveSheet
                   .Name = Tot                          '<--------------------------------- l'appel du nom de col
                   .Paste
                   Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
    'restitution des tests
                   .Range("A2").Resize(Cptr_test, 5) = Application.Transpose(T_test)
                   .Range("A2:E" & Cptr_test + 1).Borders.Weight = xlThin
              End With
         Next
    End With


-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
A voir également:

4 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 juil. 2014 à 19:02
Bonjour,

Un exemple à adapter :
Dim ws As Worksheet
Dim nwSh As Worksheet
Dim col As Long
Dim i As Long


    Set ws = Sheets(1)
    col = ws.Range("F1").End(xlToRight).Column
    For i = 6 To col
        Set nwSh = Worksheets.Add(After:=Sheets(Sheets.Count))
        nwSh.Name = ws.Cells(1, i).Value
        Set nwSh = Nothing
    Next i 

2
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
7 juil. 2014 à 17:23
Bonjour skk201

J'ai testé avec ta ligne, mais ça ne me génère plus aucune feuille :(

pour le moment je teste avec les colonnes F1 (aaa), G1(bbb), H1(mm), I1(yyy)

Il faut que j'ajoute une boucle pour pourvoir m'afficher tous les noms des colonnes venant après F1,
genre:
Tot = Cells(1, F1.xlNext)
Je sais que cette instruction est incorrecte, mais y'a t -il quelque chose de pareil?

Merci
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
8 juil. 2014 à 10:47
A pardon j'ai mal compris votre demande.

Le Code de Polux31 est parfais pour ça :)
0
cs_douda06 Messages postés 67 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 1 avril 2015
8 juil. 2014 à 14:55
Merci beaucoup Polux31 et skk201, j'ai adapté la boucle a mon code et ça marche enfin..

Merci infiniment :)
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
7 juil. 2014 à 17:09
Bonjour,

Tot = CHR(64 + Cells(1, 6).Column)& Cells(1, 6).Row


Mais ça marche uniquement pour les colonnes de A à Z

Si vous voulez plus il faut faire différement je peux vous expliquer si vous voulez.
-1