IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro vba exporter des colonnes selon titres [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Macro vba exporter des colonnes selon titres
    Bonjour,
    Je souhaite créer une macro vba qui sélectionnera des colonnes d'une feuil1 pour les copier dans une feuil2 selon le titre qu'ils ont dans la feuil1. (J'appel titre une chaine de caractère situé dans une colonne (pas nécessairement dans la cellule la plus haute, mais une cellule au hasard).
    Admettons que j'ai une feuil1 comportant 10 colonnes avec 10 titres de types (titre 1 _ titre 2 .....jusqu'à titre 10" et que dans ma colonne 2 je souhaite obtenir titre 5 et titre 7.
    Voilà ce que j'ai écris jusqu'à présent mais je ne pense pas avoir la bonne méthode, merci à ceux qui voudront bien m'aider.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub rassemblement() 
    Dim derL As Long 
    derL = Sheets("feuil1").[B65536].End(xlUp).Row 
    Dim derC As Long 
    derColonne = Sheets("feuil1").[B65536].End(xlUp).Column 
     
    For j = derC To 1 Step -1 
    For i = derL To 1 Step -1 
    If Feuil1.Cells(i, j) = "titre5" Then j = "Bontitre" 
    Next 
    Cells(i, 1) = Feuil1.Cells(i, Bontitre) 
    Next 
     
    For j = derC To 1 Step -1 
    For i = derL To 1 Step -1 
    If Feuil1.Cells(i, j) = "titre5" Then j = "Bontitre" 
    Next 
    Cells(i, 2) = Feuil1.Cells(i, Bontitre) 
    Next 
     
    End Sub

    Cordialement
    RomainG

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Si c'est juste pour copier les titres dans la feuille 2, comme tu les connais tu peux aussi bien faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook.Worksheets("Feuil2")
         .cells(1,1) = "Titre5"
         .cells(i,2) = "Titre7"
    End with


    C'est exactement, en plus simple, ce que tu as essayé de faire de façon compliquée et avec des erreurs.

    Il faudrait que tu expliques mieux ce que tu veux.

    Cordialement,

    PGZ

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour pgz

    Pardon de m'être mal exprimé mais mon intention est plutôt de copier toutes les colonnes en fonction de leur titre. Le problème n'est pas de séléctionner une cellule mais une colonne toute entière selon ce qu'est inscrit dans une de ses cases.

    Est ce que cela est un peu claire ? Merci beaucoup de ton aide

    Cdt
    Romain

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Comme on cherche dans toute la feuille 1, on peut trouver un "titre" n'importe où, et éventuellement plusieurs fois le même...

    Je te propose ce code qui utilise des variables tableaux pour accélérer l'exécution. Pour choisir le titre à chercher, tu modifies la déclaration de sTitre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub ron13()
    Dim oSh1 As Excel.Worksheet, oSh2 As Excel.Worksheet, oRng As Excel.Range
    Dim iPrem As Long, iDer As Long, jPrem As Integer, jDer As Integer
    Dim vTab As Variant, vCol As Variant, i As Long, k As Long, j As Integer, jCompt As Integer, jCol As Integer
    Const sTitre = "tutu"
     
    Set oSh1 = ThisWorkbook.Worksheets("Feuil1")
    Set oSh2 = ThisWorkbook.Worksheets("Feuil2")
    oSh2.UsedRange.ClearContents
    Set oRng = oSh1.UsedRange
     
    iPrem = oRng.Row
    iDer = iPrem + oRng.Rows.Count - 1
    jPrem = oRng.Column
    jDer = jPrem + oRng.Columns.Count
     
    vTab = oRng.Value
    jCompt = 1
     
    For i = 1 To UBound(vTab, 1)
        For j = 1 To UBound(vTab, 2)
            If vTab(i, j) = sTitre Then
                jCol = jPrem + j - 1
                Set oRng = oSh2.Range(oSh2.Cells(iPrem, jCompt), oSh2.Cells(iDer, jCompt))
                vCol = oRng.Value
                For k = 1 To UBound(vTab, 1)
                    vCol(k, 1) = vTab(k, j)
                Next k
                oRng.Value = vCol
                jCompt = jCompt + 1
            End If
        Next j
    Next i
     
    Set oSh1 = Nothing
    Set oSh2 = Nothing
    Set oRng = Nothing
    vTab = Empty
    vCol = Empty
     
    End Sub
    C'est un peu compliqué, mais ça prévoit pas mal de configuration de la feuille 1.

    Cordialement,

    PGZ

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut merci
    Bonjour pgz,

    Merci à toi pour cette macro dont le fonctionnement est parfait. Je suis en train d'essayer d'étendre son action en permettant de séléctionner plusieurs colonnes à partir des "titres".
    Pour l'instant 1 seul titre peut être affiché en sheet2. Comment faire pour en afficher un nombre plus important 8 ou 10 ?
    J'ai essayer de copier la boucle en modifiant les indices mais cela ne parait pas fonctionner.
    Est il possible de faire apparaitre plusieurs titres en n'effectuant qu'une boucle ?

    Une fois de plus merci pour cette aide précieuse.

    RomainG

  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Pour traiter plusieurs titre en même temps, il suffit de modifier le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If vTab(i, j) = sTitre Then
    Pour cela tu peux faire, par exemple pour 2 titres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (vTab(i, j) = sTitre1) or (vTab(i,j) = sTitre2) Then
    S'il y a beaucoup de titres, il peux être plus agréable d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If "|Titre1|Titre2|Titre3|...|Titren|" Like "*|" & vTab(i,j) & "|*" Then
    Cordialement,

    PGZ

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour pgz,

    Très bien, le problème est résolu. Merci bien. Lorsque je fais un test sur uen feuille calcul simple avec 10 colonnes tout fonctionne très bien.
    En revanche lorsque j'applique la macro sur la feuille de calcul dans le cadre de mon étude, cela coince.. Il y'a une "erreur d'execution 13 Incompatibilité de type". La feuille de calcul sur lequel je compte appliquer la macro comporte de nombreuses cellules fusionnées et je soupconne ces "fusions" de ne pas être en adéquation avec les tableaux utilisés dans la macro. Qu'en pensez vous ?
    La fusion des cellules pourrait elle avoir un lien avec cela ?

    Bonne journée.

    RomainG

    Re bonjour,

    C'est bon je me suis arrangé. Il n'y avait aucun problème avec le fusionnement des cellules. J'ai réusis à appliquer la macro exactement comme je le souhaitais sur mon fichier.
    Je tiens donc à te remercier une fois de plus et pour de bon cette fois !

    RomainG

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro VBA : Exporter des paramètres pièce CATIA vers Excel
    Par fehmous dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/10/2014, 12h30
  2. Réponses: 1
    Dernier message: 25/12/2012, 21h04
  3. comment faire l'export des données selon une période
    Par hadid dans le forum Administration
    Réponses: 9
    Dernier message: 28/08/2007, 11h30
  4. Réponses: 8
    Dernier message: 29/09/2006, 14h40
  5. Exporter des colonnes précises dans excel
    Par uloaccess dans le forum Access
    Réponses: 8
    Dernier message: 30/12/2005, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo