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 :

exécuter une macro pour chaque ligne. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut exécuter une macro pour chaque ligne.
    Bonjour tout le monde,

    Je souhaiterais que le code ci dessous s'exécute pour chaque ligne de mon tableau.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub calcul_tableau_Facturation()
     
    Dim i As Integer
    Dim b_existe As Boolean
     
    'On créer une boucle pour trouver la feuille qui nous convien ici la feuille de facturation
    For i = 1 To Sheets.Count
       If InStr(1, Sheets(i).Name, "Facturation") > 0 Then
           b_existe = True
         Sheets(i).Activate
        End If
     
    Next
     
     
    'on cherche la ligne Shared Infrastructure
        Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
        If Not x Is Nothing Then x.Offset(0, 12).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
        variable1 = ActiveCell.Value
        MsgBox variable1
     
    'on cherche la ligne Shared Infrastructure
    Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
    If Not x Is Nothing Then x.Offset(0, 19).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
    variable2 = ActiveCell.Value
    MsgBox variable2
    'On compare les deux valeurs pour l'ajustements des couts
    If variable2 <> variable1 Then
        total_ajustement_technology_ownership = variable1 - variable2
        MsgBox total_ajustement_technology_ownership
     
    Else
        MsgBox "Le compte est bon"
    End If
     
    i = 13
    j = 20
     
    Do
        'on cherche la ligne Shared Infrastructure
        Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
        If Not x Is Nothing Then x.Offset(0, i).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
        variable1 = ActiveCell.Value
        MsgBox variable1
     
       'on cherche la ligne Shared Infrastructure
        Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
        If Not x Is Nothing Then x.Offset(0, j).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
        variable2 = ActiveCell.Value
        MsgBox variable2
     
        'On compare les deux valeurs pour l'ajustements des couts
        If variable2 <> variable1 Then
            total_ajustement = variable1 - variable2
            MsgBox total_ajustement
     
        Else
            MsgBox "Le compte est bon"
        End If
        i = i + 1
        j = j + 1
     
    Loop While i <> 16
     
    End Sub

    Merci d'avance!

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    des questions nécessaires:
    1. Ton texte Shared Infrastructure, se trouve dans quelle colonne?
    2. Ton texte Shared Infrastructure est unique, donc une seule ligne ou plusieurs lignes, et tu veux récupérer la somme des différences entre Variable1 et Variable2
    3.Total_Ajustement à la fin regroupe t-il la somme des différences?

    Quand même, ci joint un code test qui permet la recherche unique en colonne A et fait la somme des Total_Ajustement
    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
    Sub Calcul_Tableau_Facturation()
    Dim sht As Worksheet
    Dim Total_Ajustement_Technology_Ownership As Double, Total_Ajustement As Double, V1 As Double, V2 As Double
    Dim i As Integer
    Dim j As Byte
    Dim x As Range
    Dim TabCol
     
    TabCol = Array(12, 13, 14, 15, 16)
    On Error Resume Next
        Set sht = Sheets("Facturation")
    On Error GoTo 0
     
    If Not sht Is Nothing Then
        With sht
            Set x = .Columns(1).Find("Shared Infrastructure", LookIn:=xlValues, lookat:=xlPart)
            If Not x Is Nothing Then
                For j = 0 To UBound(TabCol)
                    V1 = x.Offset(0, TabCol(j)).Value
                    V2 = x.Offset(0, TabCol(j) + 7).Value
                    If j = 0 Then
                        Total_Ajustement_Technology_Ownership = V1 - V2
                    Else
                        Total_Ajustement = Total_Ajustement + V1 - V2
                    End If
                Next j
            End If
        End With
    End If
    Set sht = Nothing
    MsgBox "Total Ajustement Technology Ownership " & Total_Ajustement_Technology_Ownership
    MsgBox "Total Ajustement " & Total_Ajustement
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup mais j'ai réussi à m'en sortir je te montre mon code :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Sub testboucleligne()
     
    Dim occurence1 As Integer
     
    occurence1 = 0
    Do
        'on cherche la ligne Shared Infrastructure
            Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
            If Not x Is Nothing Then x.Offset(occurence1, 12).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
            variable1 = ActiveCell.Value
            MsgBox variable1
     
        'on cherche la ligne Shared Infrastructure
        Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
        If Not x Is Nothing Then x.Offset(occurence1, 19).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
        variable2 = ActiveCell.Value
        MsgBox variable2
        'On compare les deux valeurs pour l'ajustements des couts
        If variable2 <> variable1 Then
            total_ajustement_technology_ownership = variable1 - variable2
            MsgBox total_ajustement_technology_ownership
     
        Else
            MsgBox "Le compte est bon"
        End If
     
        i = 13
        j = 20
     
        Do
            'on cherche la ligne Shared Infrastructure
            Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
            If Not x Is Nothing Then x.Offset(occurence1, i).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
            variable1 = ActiveCell.Value
            MsgBox variable1
     
           'on cherche la ligne Shared Infrastructure
            Set x = Cells.Find("Shared Infrastructure", , xlValues, xlPart, , , False)
            If Not x Is Nothing Then x.Offset(occurence1, j).Select 'On sélectionne le montant Technology Ownership pour 1 une société (ici la première ligne)
     
            variable2 = ActiveCell.Value
            MsgBox variable2
     
            'On compare les deux valeurs pour l'ajustements des couts
            If variable2 <> variable1 Then
                total_ajustement = variable1 - variable2
                MsgBox total_ajustement
     
            Else
                MsgBox "Le compte est bon"
            End If
            i = i + 1
            j = j + 1
     
        Loop While i <> 16
     
        occurence1 = occurence1 + 1
     
    Loop While occurence1 <> 23
    End Sub

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

Discussions similaires

  1. [MySQL] Calculer une somme pour chaque ligne et colonne d'un tableau
    Par baggie dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/05/2010, 09h55
  2. Exécution une macro pour plusieurs macrovariables
    Par SASMetrics dans le forum Macro
    Réponses: 2
    Dernier message: 26/01/2010, 12h01
  3. Réponses: 1
    Dernier message: 30/11/2009, 15h29
  4. [VBA]Exécuter une tache sur chaque ligne d'une table
    Par Tierisa dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/04/2007, 16h53
  5. [Composants] TRichEdit: Une police pour chaque ligne
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2003, 15h59

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