Macro en Excel

Résolu/Fermé
simo - 13 janv. 2016 à 18:15
 simo - 14 janv. 2016 à 10:52
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.



A voir également:

2 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
13 janv. 2016 à 18:32
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
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
13 janv. 2016 à 19:21
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
simo > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
13 janv. 2016 à 22:29
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > simo
13 janv. 2016 à 23:31
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
simo > Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016
14 janv. 2016 à 10:52
Merci pour votre aide.
0