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 :

Repérer une colonne par son titre et recopier son contenu dans une autre feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité - Bénévole
    Inscrit en
    Octobre 2018
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité - Bénévole
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 81
    Par défaut Repérer une colonne par son titre et recopier son contenu dans une autre feuille
    Bonjour

    Me voilà, novice, à seulement quelques mois de la retraite propulsé dans le mode des macros avec une exigence de résultats dans un délai très court. Je suis aux abois!
    Mon problème est le suivant:
    Je reçois périodiquement un fichier "Bilan" qui a 2 feuilles: "Download", dont le nombre et l'ordre des colonnes varient à chaque application (La colonne titre du tableau est en ligne 1) et "Predata" qui possède un tableau à 3 colonnes 'N°Bateau", "Proddate" et "SeaMiles", dont l'ordre ne change pas et dont les titres sont en ligne 9).
    Le nombre de ligne de la feuille "Download" varie suivant les analyses
    Je souhaiterais disposer d'une macro permettant de repérer chacune des 3 colonnes dans la feuille "Download" et les recopier dans l'ordre précis de la feuille "Predata".

    J'espère que le fichier joint aidera à clarifier mon besoin.
    Merci par avance à la communauté, déjà d'avoir pris le temps de lire ce message et de voir ce qu'elle peut faire pour moi.

    Bien cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ozabois Voir le message
    Bonjour,

    Voilà ce que j'utilise :
    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
     
    Option Explicit
     
    Public DetectionColonnes As String
    Public ColBateau As Long, ColProddate As Long, ColSeaMiles As Long
     
    Function ColonneFeuille(ByVal FeuilleTitre As Worksheet, ByVal LigneTitre As Long, ByVal TitreRecherche As String) As Long
     
    Dim NbColonnesTitre As Long
    Dim Cellule As Range, Aire As Range
     
        With FeuilleTitre
     
             ColonneFeuille = 0
             NbColonnesTitre = .Cells(LigneTitre, .Columns.Count).End(xlToLeft).Column
             Set Aire = .Range(.Cells(LigneTitre, 1), .Cells(LigneTitre, NbColonnesTitre))
     
             For Each Cellule In Aire
                 Select Case Mid(Cellule.Value, 1, Len(TitreRecherche))
                        Case TitreRecherche
                             ColonneFeuille = Cellule.Column
                             Exit For
                 End Select
             Next
     
             If ColonneFeuille = 0 Then DetectionColonnes = DetectionColonnes & Chr(10) & TitreRecherche
     
             Set Aire = Nothing
     
        End With
     
    End Function
    Sans erreur de syntaxe dans les titres :
    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
     
    Sub Test1ColonneFeuille()
     
        DetectionColonnes = "Absence colonnes : " & Chr(10)
     
        ColBateau = ColonneFeuille(Sheets("Download"), 1, "N°Bateau")
        ColProddate = ColonneFeuille(Sheets("Download"), 1, "Proddate")
        ColSeaMiles = ColonneFeuille(Sheets("Download"), 1, "SeaMiles")
     
        If DetectionColonnes <> "Absence colonnes : " & Chr(10) Then
           MsgBox DetectionColonnes, vbCritical
           Exit Sub
        End If
     
        Debug.Print ColBateau & "," & ColProddate & "," & ColSeaMiles
        ' Suite du code....
     
    End Sub

    Avec erreur de syntaxe dans un des titres (On suppose que N Bateau est le libellé à trouver...)
    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
     
    Sub Test2ColonneFeuille()
     
        DetectionColonnes = "Absence colonnes : " & Chr(10)
     
        ColBateau = ColonneFeuille(Sheets("Download"), 1, "N Bateau")
        ColProddate = ColonneFeuille(Sheets("Download"), 1, "Proddate")
        ColSeaMiles = ColonneFeuille(Sheets("Download"), 1, "SeaMiles")
     
        If DetectionColonnes <> "Absence colonnes : " & Chr(10) Then
           MsgBox DetectionColonnes, vbCritical
           Exit Sub
        End If
     
        ' Suite du code....
     
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonsoir

    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
    Sub test()
        recup_colonne Array("N°Bateau", "Proddate", "SeaMiles")
    End Sub
    '
    '
    Sub recup_colonne(nomcol)
        Dim cel As Range, Rng As Range, CC As Range, X As Range, c&
        With Sheets("Download")
            Set X = .Range("A1", .Cells(1, .Columns.Count).End(xlToLeft))
            For c = LBound(nomcol) To UBound(nomcol)
                Set cel = X.Find(nomcol(c), Lookat:=xlWhole)
                If Not cel Is Nothing Then
                    Set CC = .Range(cel.Address, .Cells(Rows.Count, cel.Column).End(xlUp))
                    If Rng Is Nothing Then
                        Set Rng = CC
                    Else
                        Set Rng = Union(Rng, CC)
                    End If
                Else
                MsgBox "la colonne """ & nomcol(c) & """ n'existe pas": Exit Sub
                End If
            Next
            Debug.Print Rng.Address
            Rng.Copy Destination:=Sheets("Predata").Cells(9, 1)
        End With
    End Sub
    testé sur ton fichier

    edit:
    dommage que ce qui t'envoie ces fichiers n'ai pas utilisé des tableaux structurés a coder ca aurait été plus simple
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité - Bénévole
    Inscrit en
    Octobre 2018
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité - Bénévole
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 81
    Par défaut Merci beaucoup Eric !
    Eric
    Merci beaucoup pour le temps passé sur ma problématique et la réponse express.
    Je ne suis pas encore parvenu à faire fonctionner la macro. Il va me falloir un peut de temps pour comprendre le contenu car je pars de 0 et il me faut apprendre la structure du langage.
    Je vais pouvoir travailler sur cette et me permettrai peut être de revenir vers vous si je bute trop longtemps
    Bonne soirée

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité - Bénévole
    Inscrit en
    Octobre 2018
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité - Bénévole
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 81
    Par défaut Merci beaucoup Patrick !
    Merci beaucoup Patrick.
    Je viens de tester la macro et effectivement ça fonctionne bien.
    Je n'ai pas tout compris du code et vais prendre un peu de temps avant de l'intégrer.
    Bravo en tout cas.
    Je viens de découvrir cette plateforme; c'est vraiment un outil formidable; grace à ceux comme vous et Eric qui m'a répondu précédemment, qui donnez votre temps pour une cause.
    Mille Merci.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    ton fichier

    de rien
    Fichiers attachés Fichiers attachés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité - Bénévole
    Inscrit en
    Octobre 2018
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Retraité - Bénévole
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2018
    Messages : 81
    Par défaut Repérer une colonne par son titre et recopier son contenu dans une autre feuille (suite)
    Bonsoir Patrick
    J'ai bien testé ta macro qui fonctionne parfaitement (avec le petit bouton comme cerise sur le gateau) mais en revanche il y a un point que je souhaiterais corrigé qui est les suivant:
    L'ordre des colonnes de l'onglet "Predata" doit rester fixe (N°Bateau - Proddate - SeaMiles) pour conserver la cohérence avec l'historique et permettre le traitement.
    La macro qui tu me proposes repère très bien les colonnes mais les recopie dans l'ordre où il les trouve dans l'onglet "Download". (c'est ordre change suivant les fichiers qui peuvent venir de sources différentes).
    J'ai essayé de réunir mes maigres connaissances pour trouver une solution mais sans succès.
    Saurais-tu, stp, me proposer quelques lignes de codes supplémentaires pour m'aider à résoudre mon problème ?
    Merci par avance

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour OzaBOIs
    on procede legerement differement qu'avec union alors
    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
     
    Sub test()
        recup_colonne Array("Proddate", "N°Bateau", "SeaMiles")' pas dans l'ordre 
    End Sub
    '
    '
    Sub recup_colonne(nomcol)
        Dim cel As Range, CC As Range, X As Range, c&, col&
        With Sheets("Download")
            Set X = .Range("A1", .Cells(1, .Columns.Count).End(xlToLeft))
            For c = LBound(nomcol) To UBound(nomcol)
                Set cel = X.Find(nomcol(c), Lookat:=xlWhole)
                If Not cel Is Nothing Then
                    Set CC = .Range(cel.Address, .Cells(Rows.Count, cel.Column).End(xlUp))
                    col = col + 1
                    CC.Copy Destination:=Sheets("predata").Cells(9, col)
                Else
                    MsgBox "la colonne """ & nomcol(c) & """ n'existe pas": Exit Sub
                End If
            Next
        End With
    End Sub
    voila tout simplement
    autrement dit quoi que ce sopit comme ordre dans tes fichier source l'ordre de destionation est celui qui est dans l'array de la sub d'apel
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [Débutant] Remplacer le contenu d'une colonne par un tableau de correspondance
    Par PaulAtray dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/04/2017, 18h20
  2. [MySQL-5.6] Modifier le même contenu d'une colonne par un autre
    Par Original1992 dans le forum MySQL
    Réponses: 5
    Dernier message: 14/08/2015, 14h12
  3. [XL-2010] Recopie de code dans une colonne
    Par Nathalie4020 dans le forum Excel
    Réponses: 17
    Dernier message: 27/12/2014, 09h22
  4. [XL-2007] Suppression données dans une colonne par comparaison et conditions
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/04/2013, 09h29
  5. Réponses: 2
    Dernier message: 23/12/2012, 15h46

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