Macro en Excel

Résolu
simo -  
 simo -
Bonjour,
Bonjour,
Je veux créer un tableau sous Excel qui continent plusieurs lignes et ajouter un bouton lie à une Macro qui fait plusieurs taches :
1) Faire la somme de deux colonnes (C et D) pour chaque ligne.
2) Afficher le résultat en colonne E.
3) Remplacer la valeur précédente dans C par la valeur de E et mettre la colonne D à zéro.
4) En cas ou la valeur de la colonne E >= 14 afficher un message.
Alors, j’ai arrivé à faire la somme pour une seule ligne par les commandes suivantes :
Sub test()
Range("E2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-2],RC[-1])"
End Sub
Mais, lorsque je veux l’appliquée sur les autres ligne ça marche pas et je n’arrive pas à faire les autres taches, et est ce que vous pouvez m’aider à réaliser ce simple projet ?
Merci en avance.

2 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Essaie comme cela
    Sub test()
    Dim DerLig As Long
    Dim Cel As Range
    DerLig = Range("C" & Rows.Count).End(xlUp).Row
    For Each Cel In Range("C2:C" & DerLig)
    Cel.Offset(, 2) = Cel.Value + Cel.Offset(, 1).Value
    Cel = Cel.Offset(, 2)
    Cel.Offset(, 1) = 0
    If Cel.Offset(, 2) > 14 Then
    MsgBox "Valeur supérieure à 14 en " & Cel.Offset(, 2).Address
    End If
    Next Cel
    End Sub

    A+
    0
  2. simo
     
    Merci beaucoup pour votre aide.
    Est ce que je peux te déranger un peu plus, et tu me donnes des explications du code?

    Merci
    0
    1. Gyrus Messages postés 3360 Statut Membre 526
       
      Voici le code commenté
      Sub test()
      Dim DerLig As Long
      Dim Cel As Range
      'On détermine le numéro de la dernière ligne renseignée dans la colonne C
      DerLig = Range("C" & Rows.Count).End(xlUp).Row
      'On balaye chaque cellule renseignée de la colonne C
      For Each Cel In Range("C2:C" & DerLig)
      'On effectue la somme des cellules des colonnes C et D et on affecte le résultat à la colonne E
      Cel.Offset(, 2) = Cel.Value + Cel.Offset(, 1).Value
      'Le résultat est reporté dans la colonne C
      Cel = Cel.Offset(, 2)
      'On affecte 0 à la colonne D
      Cel.Offset(, 1) = 0
      'On emet un message si la valeur est supérieure à 14
      If Cel.Offset(, 2) > 14 Then
      MsgBox "Valeur supérieure à 14 en " & Cel.Offset(, 2).Address
      End If
      Next Cel
      End Sub

      N'hésites pas à relancer si tu as besoin d'exp^lications complémentaires.

      A+
      0
      1. simo > Gyrus Messages postés 3360 Statut Membre
         
        Merci beaucoup pour votre aide, vous m'avez vraiment aider ce qui me permet poser plus de questions.
        Alors, puisque j'ai plusieurs données le message d'erreur me pose un problème. Car même si je ne touche pas à la case ou la valeur >14) et je fais enregistrer la condition de teste s’exécute toujours. Est ce qu'il y a une méthode pour afficher le message (Valeur supérieure à 14) une seule fois pour chaque cellule et désactiver par exemple les cases ou la somme à dépasser 14.
        Si vous avez 'autres propositions n’hésiter pas à les ajouter.
        Cordialement.
        0
      2. Gyrus Messages postés 3360 Statut Membre 526 > simo
         
        Voici la macro adaptée pour que le résultat ne soit pas noté si la somme est supérieure à 14.
        Sub test()
        Dim DerLig As Long
        Dim Cel As Range
        Dim Resultat As Double
        'On détermine le numéro de la dernière ligne renseignée dans la colonne C
        DerLig = Range("C" & Rows.Count).End(xlUp).Row
        'On balaye chaque cellule renseignée de la colonne C
        For Each Cel In Range("C2:C" & DerLig)
        'On calcule la somme des cellules des colonnes C et D
        Resultat = Cel.Value + Cel.Offset(, 1).Value
        'Si le résultat est <=14,
        If Resultat <= 14 Then
        'le résultat est affecté à la colonne E
        Cel.Offset(, 2) = Resultat
        'Le résultat est reporté dans la colonne C
        Cel = Resultat
        'On affecte 0 à la colonne D
        Cel.Offset(, 1) = 0
        'Sinon,
        Else
        'On emet un message si la valeur est supérieure à 14
        MsgBox "Valeur supérieure à 14 en ligne " & Cel.Row
        End If
        Next Cel
        End Sub

        A+
        0
      3. simo > Gyrus Messages postés 3360 Statut Membre
         
        Merci pour votre aide.
        0