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 :

Boucle de la derniere ligne +1 colonne par colonne avec une formule en pourcentage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Par défaut Boucle de la derniere ligne +1 colonne par colonne avec une formule en pourcentage
    Bonjour à tous,

    voici ma problèmatique :
    je veux réaliser un pourcentage dans la colonne juste apres la derniere colonne pleine avec comme référence la donnée de la cellule de la derniere colonne divisée par la derniere cellule pleine de la derniere colonne de la derniere ligne
    et réaliser une boucle pour chaque ligne de cette colonne jusqu'à la derniere ligne pleine.
    (ex : cellule J8/j26 .... cellule j9/j26 ....)

    Plusieurs problèmatiques :
    le nombre de ligne et de colonne sont variables.

    Dans le code que j'ai écrit

    * je n'arrive pas à faire cette formule : ou il prendrait la valeur de la cellule en question dans la derniere colonne pour diviser cette valeur par la valeur de la derniere cellule pleine dans la derniere ligne et dans la derniere 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub Atomic1()
    Dim lastRow As Long
    Dim LastColumn As Long
    Dim Aire As Range
    Dim LigneTitre As Long
    Dim LastColumnT As Long
    Dim CellAire As Range
     
     
    'Trouver la derniere ligne active sur la page et insérer un message pour vérifier que cela correspond avec la réalité
    lastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    'MsgBox lastRow
     
    'Trouver la derniere colonne active sur la page et insérer un message pour vérifier que cela correspond avec la réalité
    With ActiveSheet.UsedRange
    LastColumn = .Columns(.Columns.Count).Column
    End With
    'MsgBox LastColumn
     
    With Sheets("TCD_VOL")
    LigneTitre = 7
    LastColumnT = LastColumn + 1
    Set Aire = .Range(.Cells(LigneTitre, LastColumnT), .Cells(lastRow, LastColumnT))
    End With
     
    'i = LigneTitre
    '
    'For i = LigneTitre To lastRow
     
    For Each CellAire In Aire
     
        CellAire.Formula = "1+1"
     
    Next CellAire
     
    Set Aire = Nothing
     
     
     
    End sub

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir,

    J'ai fait ça vite fait à la volée, donc à tester pour voir si c'est OK
    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 Test()
    Dim DL&, DCOL&, Rg As Range
        Const Entete As Byte = 7
        With Sheets("TCD_VOL")
            Set Rg = .UsedRange
            DCOL = Rg.Columns.Count
            DL = Rg.Cells(Rows.Count, DCOL).End(xlUp).Row
            With Rg.Columns
                With .Item(DCOL + 1).Offset(7).Resize(.Item(DCOL).Cells.Count - 7)
                    Application.ScreenUpdating = False
                    .FormulaLocal = "=" & Split(Columns(DCOL).Address, "$")(2) & Entete + 1 & "/" & Cells(DL, DCOL).Address
                    .Value = .Value
                    Application.ScreenUpdating = True
                End With
            End With
        End With
        Set Rg = Nothing
    End Sub
    Edit : en plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test2()
    Dim DL&, DCOL&
        Const Entete As Byte = 7
        With Sheets("TCD_VOL")
            DCOL = .UsedRange.Columns.Count
            DL = .Cells(Rows.Count, DCOL).End(xlUp).Row
            With .Range(.Cells(Entete + 1, DCOL + 1), .Cells(DL, DCOL + 1))
                Application.ScreenUpdating = False
                .Formula = "=" & Split(Columns(DCOL).Address, "$")(2) & Entete + 1 & "/" & Cells(DL, DCOL).Address
                .Value = .Value
                Application.ScreenUpdating = True
            End With
        End With
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Par défaut
    Bonjour,

    merci pour ton aide,

    maintenant ce que j'aimerai faire c est la meme chose mais en dessous de la derniere ligne,

    je veux réaliser un pourcentage dans la ligne juste apres la derniere ligne pleine avec comme référence la donnée de la cellule de la derniere ligne divisée par la derniere cellule pleine de la derniere colonne de la derniere ligne
    et réaliser une boucle pour chaque la derniere colonne jusqu'à la derniere colonne pleine.
    (ex : cellule b26/j26 .... cellule c26/j26 ....)

    je vais essayer de retravailler ce code,

    mais la boucle se fera plus sur la colonne mais sur la derniere ligne +1

    j'aimerai que la valeur du calcul soit directement en pourcentage mais je sais pas si on peut ajouter un & format suite à .value ?


    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
    Sub Atomic1()
     
    'Pourcentage derniere colonne
     
    Dim DL&, DCOL&, Rg As Range
     
        Const Entete As Byte = 7
     
        With Sheets("TCD_VOL")
            Set Rg = .UsedRange
            DCOL = .UsedRange.Columns.Count
            DL = Rg.Cells(Rows.Count, DCOL).End(xlUp).Row
     
            With Rg.Columns
                With .Item(DCOL + 1).Offset(7).Resize(.Item(DCOL).Cells.Count - 7)
                    Application.ScreenUpdating = False
                    .FormulaLocal = "=" & Split(Columns(DCOL).Address, "$")(2) & Entete + 1 & "/" & Cells(DL, DCOL).Address
                    .Value = .Value
                    Application.ScreenUpdating = True
                End With
            End With
        End With
        Set Rg = Nothing
    End Sub

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,

    PS : j'ai une préférence pour le 2è code que j'ai fait

    Pour le pourcentage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .NumberFormat = "0,00%"
    Code : ce qui donne : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Test2()
    Dim DL&, DCOL&
        Const Entete As Byte = 7
        With Sheets("TCD_VOL")
            DCOL = .UsedRange.Columns.Count
            DL = .Cells(Rows.Count, DCOL).End(xlUp).Row
            With .Range(.Cells(Entete + 1, DCOL + 1), .Cells(DL, DCOL + 1))
                Application.ScreenUpdating = False
                .Formula = "=" & Split(Columns(DCOL).Address, "$")(2) & Entete + 1 & "/" & Cells(DL, DCOL).Address
                .Value = .Value
                .NumberFormat = "0,00%"
                Application.ScreenUpdating = True
            End With
        End With
    End Sub

    Edit : Quelle colonne tu préconises pour connaitre la dernière ligne toujour la dernière ?
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 23
    Par défaut
    Merci pour ton retour,

    la premiere colonne ou la derniere colonne pleine les 2 permettront de repérer à chaque fois la derniere ligne pleine,

    en effet j'ai pris le 2ie code car plus simple,

    en faite j'essaye désormais d'adapter ce code
    pour faire le calcul en pourcentage, sur la ligne apres derniere ligne
    et faire une boucle de la colonne A à la derniere colonne pleine

    et il calculerai le pourcentage de la valeur de la derniere ligne par rapport a la derniere cellule pleine de la derniere ligne et de la derniere colonne,
    Ex(A5/J26, B5/J26, C5/J26)


    mais il me met une valeur bizarre dans chaque cellule, je dois continuer à le détailler

    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()
     
    Dim DLL&, DCOLL&, Rgg As Range
     
        Const Entete As Byte = 7
     
        With Sheets("TCD_VOL")
            Set Rgg = .UsedRange
            DCOLL = .UsedRange.Columns.Count
            DLL = Rgg.Cells(Rows.Count, DCOLL).End(xlUp).Row
     
            With Rgg.Rows
                With .Item(DLL + 1).Offset(1).Resize(.Item(DCOLL).Cells.Count - 7)
                    Application.ScreenUpdating = False
                    .FormulaLocal = "=" & Split(Rows(DLL).Address, "$")(2) & Entete + 1 & "/" & Cells(DLL, DCOLL).Address
                    .Value = .Value
                    .NumberFormat = "0.00%"
                    Application.ScreenUpdating = True
                End With
            End With
        End With
        Set Rg = Nothing

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    As tu fait le code en pas à pas et regarder ce qui se passe dans les cellules incriminées ?
    tu verras qu'il n y a pas de boucles, mais une simple formule qui est étiré …

    et il calculerai le pourcentage de la valeur de la derniere ligne par rapport a la derniere cellule pleine de la derniere ligne et de la derniere colonne,
    Ex(A5/J26, B5/J26, C5/J26)
    ca ne serait pas plutot A26/J26, B26/J26, C26/J26 … ?
    si on parle de la valeur de la dernière ligne ?
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Comparer ligne par ligne les valeurs dans la colonne de table
    Par Hobinantenaina1 dans le forum WinDev
    Réponses: 13
    Dernier message: 25/04/2017, 15h22
  2. Réponses: 6
    Dernier message: 24/03/2017, 14h39
  3. Réponses: 6
    Dernier message: 07/09/2009, 13h00
  4. Réponses: 2
    Dernier message: 07/08/2006, 16h43
  5. Réponses: 16
    Dernier message: 22/03/2006, 11h11

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