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 le titre d'une colonne pour effectuer des calculs


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Repérer le titre d'une colonne pour effectuer des calculs
    Bonjour,

    Je dois utiliser un tableau de données brutes parmis lequel je dois extraire certaines de ces données afin de les traiter. Jusque là rien de bien difficile, cependant le tableau qui m'est adressé est souvent modifié, le nombre de colonne utilisé notamment et par conséquent leurs emplacements. Je me basais sur le nom des colonnes à l'origine, mais ce petit paramètre m'oblige à trouver un nouveau moyen de récupérer mes données.

    J'ai donc pensé à utiliser une macro, j'ai quelques notions de VBA (très basiques) et de langage C un peu plus poussé mais je n'arrive pas à trouver un moyen de "dire" qu'il faut faire les calculs en fonction du nom de la colonne et non de la position.

    Comment pourrais faire pour effectuer des calculs utilisant les données d'une colonne en fonction de son titre?

    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Vous devez récupérer le no de la colonne

    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
     
    Sub NoColonne()
     
        Dim ColNom As Integer, StrRech As String
     
        StrRech = "NomDeLaColonne"
     
        On Error Resume Next
     
        ColNom = [A1:J1].Find(What:=StrRech, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns).Column
     
        If Err Then
            [L3] = "Pas trouvé ": Err.Clear
     
        Else
     
            Cells(3, ColNom) = ColNom
     
        End If
     
        On Error GoTo 0
     
    End Sub
    ___________________
    Cordialement
    Albert

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Chercher colonne
    Bonjour, Et Bonjour au Forum,

    Si le titre de la colonne est identique d'une exploitation à l'autre, alors il suffit de repérer ce titre sur la ligne 1 par la méthode Find et affecter une variable à l'ensemble des données de la colonne repérée, en ayant déclaré au préalable cette variable comme objet Range.

    Reviens si nécesaire.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Points : 115
    Points
    115
    Par défaut
    Bonjour,

    J'ai compris ce que tu souhaites faire, mais pas forcément ce qui te pose problème (enfin, pas en détail je veu dire)

    les noms de colonnes titres qui changent de position, est-ce qu'ils changent de colonne? de ligne? les deux?

    est-ce que par nom de colonne tu entend leurs références? (ex : A, B, C, ...)

    se serait peut-être plus simple si tu pouvais fournir un fichier contenant deux onglets avec les changements que tu évoques entre ces deux onglet (si ce n'est pas trop compliqué pour toi)

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut recherche
    Bonjour,

    Notre ami semble vouloir repérer une colonne à titre constant mais déplacée en fonction des exploitations de données.

    Si les en-têtes se trouvent sur la 1ère ligne, et si le titre de la colonne est "tra", alors le code suivant peut être adapté.

    La colonne cherchée est ici affectée de la variable colonne_calcul

    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
    Public Sub essai_colonne()
     
    'Déclaration des variables
    Dim finlign As Range, c As Range, laligne As Range, fincol As Range
    Dim colonne_calcul As Range
     
    With Sheets("Feuil1")
     
            'Dernière cellule de la ligne d'en-tête
            Set finlign = .Cells(1, .Columns.Count).End(xlToLeft)
     
            On Error Resume Next
            'Recherche du libellé de la colonne
            Set c = .Range("A1", finlign).Find("tra", Lookat:=xlWhole)
     
            'Adresse de la colonne
            If Not c Is Nothing Then
                    'Dernière ligne de la colonne
                    Set fincol = .Cells(.Rows.Count, c.Column).End(xlUp)
                    Set colonne_calcul = .Range(c.Offset(1, 0), fincol)
     
            End If
     
    End With
     
    'Test
    Debug.Print colonne_calcul.Address
     
    'Réinitialisation des variables
    Set fincol = Nothing
    Set c = Nothing
    Set finlign = Nothing
     
    End Sub
    Reprends ce code ligne par ligne, et reviens si nécessaire.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    exemplexlsx.xlsx

    Merci pour vos réponses et votre réactivité

    Sogestion:

    Cette méthode peut m'être utile en effet, mais comment je peux faire pour effectuer mes calculs par la suite? Genre je pense l'afficher dans la feuille excel dans une certaine cellule (ex:C2), puis j'utilise cette information pour indiquer qu'il faut aller travailler dans cette colonne... Quel est l'opérateur à utiliser dans mon IF dans ce cas? (colnumer de l'exemple ci dessous)

    =If(colnumber=C2 & colnumber<>NULL,calcul,"pas de calcul à effectuer")

    MarcelG:

    en effet c'est une solution, comment je fais cependant pour dire que ce sont les données de cette colonne repérée que je veux dans ma variable?

    Supierre:

    Le titres de colonnes changent de colonne, mais pas de ligne. Oui l'appelation "nom" a pour but de référer aux "références" des colonnes. Dans l'exemple ci dessus tu verras que les informations utiles pour mes calculs changent de colonne et c'est le cas de figure qui se produit parfois lorsque le fichier m'est envoyé. Aussi le nombre de ligne dans chaque colonne varie.

    Merci encore pour votre aide et votre temps, je vais me plonger dans ces premières solutions que vous m'avez apporté.

    Je n'avais pas vu ton deuxième message MArcelG je regarde ça, merci

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous,

    J'ai finalement réussis à monter quelque chose qui fonctionne, grâce à vous et à différentes recherches effectuées sur internet. Voici ce que j'ai pu faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var7 = 0  --ma variable
    Sheets("feuille1").Select -- ma feuille de travail
    cL = Cells(7, 256).End(xlToLeft).Column
    For k = cL To 24 Step -1
        If (InStr(1, Cells(8, k), "titre _colonne", 1) Then
            For n = 9 To 30 -- je ne vais que jusqu'à la ligne 30 cela me suffit
            If (Worksheets("feuille1").Cells(n, k) < Worksheets("feuille2").Range("C6") Then var7 = var7 + 1 Else var7 = var7 + 0 -- le calcul que je recherche
            Next n
            End If
    Next k
    Worksheets("feuille2").Range("F13") = var7 -- je sauvegarde mon incrément
    Voila désolé si le code hérisse les poils des puristes en VBA, mais la solution est fonctionnelle et cela me convient parfaitement

    Merci encore pour votre réactivité et au plaisir

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2012, 14h36
  2. Réponses: 4
    Dernier message: 14/06/2010, 21h18
  3. Réponses: 20
    Dernier message: 30/03/2007, 15h01
  4. [Système] Problème pour effectuer des calculs
    Par tissard dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2005, 14h07
  5. [C#] Connaitre le titre d'une colonne DataGrid
    Par Worldofdada dans le forum ASP.NET
    Réponses: 9
    Dernier message: 23/03/2005, 15h37

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