Rechercher : dans
Par :

Excel : Macro Incrementer une valeur.

Dernière réponse le 23 jun 2008 à 16:07:03 BB, le 23 jun 2008 à 10:43:03 
 Signaler ce message aux modérateurs

Bonjour,

Je souhaite réaliser une macro simple mais je n'y arrive pas. quelqu'un peut il m'aider ?

je voudrais saisir une case (exemple A1) puis en appuyant sur un bouton, la valeur de A1 s'additionne à la valeur d'une autre case (B1 par exemple) puis A1 s'efface. et autant de fois que je saisie A1 et valide, B1 est incrémenter.

(c'est pour faire une gestion de "stock" très simplifié, avec d'un coté ce qui rentre (A1) d'un autre coté ce qu'il reste au stock (B1) et une troisième case (C1) qui contiendra ce que je consomme.)

Merci d'avance pour votre aide!

Configuration: Windows XP
Firefox 3.0

Meilleures réponses pour « Excel : Macro Incrementer une valeur. » dans :
Utiliser VALEUR CIBLE sous Excel VoirVous avez fait un devis, sous forme d'un tableau EXCEL vous avez additionné chacun des prix, obtenu un Total HT (en E8 par exemple) défini une remise (en E9), appliqué le montant de TVA (en E10), obtenu votre Total TTC (en E11) votre client vous...
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...

1

Ivan-hoe, le 23 jun 2008 à 11:07:10

Salut BB,
voici quelquechose de très simple. A copier dans le code de la feuille concernée.
Ca réagit au changement de valeur dans A1, pas besoin de créer un bouton "Valider".
J'ai ajouté un message de confirmation.
Si nécessaire, on peut ajouter une vérification que la valeur saisie est bien un nombre (ça bugge quand on saisit une lettre, par exemple).
A toi de modifier les cellules concernées (ici, saisie en A1 et addition en B1)
A suivre...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Message As String, Valeur As Long

With Target
    If Not .Address(False, False) = "A1" Then Exit Sub
    
    Valeur = .Value
    Message = "Valider la saisie de " & Valeur & " en " & .Address(False, False)
    If MsgBox(Message, vbYesNo) = vbNo Then Exit Sub
    Range("B1").Value = Range("B1").Value + Valeur
    
    Application.EnableEvents = False
    .Value = Empty
    Application.EnableEvents = True

End With
End Sub

Répondre à Ivan-hoe

2

BB, le 23 jun 2008 à 11:20:33

Merci pour le code, mais je n'arrive pas a comprendre ou je dois l'insérer.. je suis vraiment pas très doué avec excel :D.
Tu peux m'expliquer ou je dois l'insérer ?

Merci beaucoup!!

Répondre à BB

3

BB, le 23 jun 2008 à 11:27:51

C'est Bon!! j'ai trouvé (désolé :D)
c'est nickel Merci beaucoup!

Bonne journée!!!

Répondre à BB

4

Ivan-hoe, le 23 jun 2008 à 11:30:07

Tu cliques droit sur l'onglet de la feuille concernée, tu choisis Visualiser le code, et c'est là que tu colles.
Evidemment, ton classeur contiendra donc dorénavant une macro ; à l'ouverture, pour qu'elle puisse être exécutée, il faudra préciser "Activer les macros".
A suivre...

Répondre à Ivan-hoe

5

BB, le 23 jun 2008 à 11:46:50

C'est vraiment super !!

encore une dernier question (:D)
est il possible que lors de l'appuie sur le bouton NON de la pop-up, la case de saisie (A1) se vide du contenue saisie précédemment ? je pense quil faut rajouter quelque chose au niveau du
If MsgBox(Message, vbYesNo) = vbNo Then Exit Sub
mais quoi ?

Merci d'avance!!!

Répondre à BB

6

BB, le 23 jun 2008 à 11:58:56

Mince encore un autre point..

je voulais copier une deuxième fois la macro pour cette fois décrémenter la valeur B1 avec la saisie d'une autre case (C1) (sortie de stock)

mais lorsque je copie deux fois la macro cela ne fonctionne pas, le message "nom ambigu détecté worksheet_Change" apparait, comment je peux faire ?

Répondre à BB

7

Ivan-hoe, le 23 jun 2008 à 12:00:28

Effectivement, c'est ce morceau-là qu'il faut modifier.
On va remplacer le Exit Sub par GoTo FIN et rajouter l'étiquette FIN comme-ci-dessous.
Autre petit détail (facultatif) :
si tu veux que le bouton "Non" soit sélectionné par défaut (pour éviter une mauvaise validation d'un utilisateur pressé), tu peux rajouter + vbDefaultButton2 dans les paramètres de la boîte message.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Message As String, Valeur As Long

With Target
    If Not .Address(False, False) = "A1" Then Exit Sub
    
    Valeur = .Value
    Message = "Valider la saisie de " & Valeur & " en " & .Address(False, False)
    If MsgBox(Message, vbYesNo + vbDefaultButton2) = vbNo Then GoTo FIN
    Range("B1").Value = Range("B1").Value + Valeur
    
FIN:
    Application.EnableEvents = False
    .Value = Empty
    Application.EnableEvents = True

End With
End Sub

Répondre à Ivan-hoe

8

BB, le 23 jun 2008 à 13:19:48

Merci beaucoup :)
une solution pour le message #6 ? (sinon c'est pas grave c'est deja super)

Bonne journée!

Répondre à BB

9

BB, le 23 jun 2008 à 14:10:13

Je voulais dire pour le message #7 (décidément je suis pas très réveillé :D)

Répondre à BB

10

Ivan-hoe, le 23 jun 2008 à 14:12:06

Désolé pour le délai, mais pause déjeuner !!
pour la réponse au message 6 (effacer le contenu de A1 en cas d'annulation), voir le message à 12:00:28, qui n'est pas numéroté (?!). Du coup, est-ce qu'il t'apparaît bien ? sinon, je te le renvoie.
I.

Répondre à Ivan-hoe

11

Ivan-hoe, le 23 jun 2008 à 14:35:15

On se croise !
Pour le message 7 :
ta macro est spéciale, c'est une macro évènementielle, c'est-à-dire qui se déclenche suite à un évènement, en l'occurence quand ta feuille (Worksheet) subit une modification (Change). D'où son nom Private Sub Worksheet_Change
Il ne peut pas y en avoir deux ; mais on peut la modifier en ajoutant une condition pour avoir différentes réponses au même évènement.
Pour les sorties de stock en C1, même principe que pour l'entrée en A1, sauf qu'on soustrait ;
Je me suis permis de rajouter une alerte en cas de stock négatif ;
La macro devenant un peu plus complexe, j'ai un peu modifié l'ordre des instructions ; j'ai aussi rajouté une gestion des erreurs (on Error GoTo...)
Ce sont des fioritures qui ne sont pas indispensables, mais qui fiabilisent ta procédure. Je ne veux pas non plus t'assommer de détails, c'est toi qui vois ce que tu veux garder.
A suivre...

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERROR
Dim Message As String, Valeur As Long
Application.EnableEvents = False

With Target
    If .Address(False, False) = "A1" Then
        Valeur = .Value
        Message = "Valider la saisie de " & Valeur & " en " & .Address(False, False)
        If MsgBox(Message, vbYesNo + vbDefaultButton2) = vbNo Then GoTo FIN
        Range("B1").Value = Range("B1").Value + Valeur
        
    ElseIf .Address(False, False) = "C1" Then
        Valeur = .Value
        Message = "Valider la saisie de " & Valeur & " en " & .Address(False, False)
        If MsgBox(Message, vbYesNo + vbDefaultButton2) = vbNo Then GoTo FIN
        With Range("B1")
            If .Value < Valeur Then
                Message = "Attention : stock négatif"
                If MsgBox(Message, vbYesNo + vbDefaultButton2) = vbNo Then GoTo FIN
            End If
            .Value = .Value - Valeur
        End With
    End If
    
FIN: .Value = Empty
End With

Application.EnableEvents = True

Exit Sub
ERROR:  MsgBox Err.Description: Resume FIN
End Sub

Répondre à Ivan-hoe

12

BB, le 23 jun 2008 à 15:12:12

Merci beaucoup c'est vraiment super! j'aurais pas cru trouver si bonne aide !!

Encore merci!

Répondre à BB

13

BB, le 23 jun 2008 à 15:18:19

Tien j'ai un "bug" maintenant des que je modifie le texte d'une cellule autre, la cellule s'efface des la validation.. ?

Répondre à BB

14

 Ivan-hoe, le 23 jun 2008 à 16:07:03

Oups !
Le programme était mal construit, et quelle qu'était la cellule modifiée, il passait par Target.Value = Empty, ce qui revient à effacer la cellule modifiée.
J'ai rajouter un Select Case ... End Select pour vraiment restreindre le déclenchement de la procédure aux modifications de A1 et C1. Si nécessaire, tu pourrais compléter cette liste à l'avenir. Dans les autres cas (Case Else), on sort immédiatement de la procédure (Exit Sub).

Je n'ai copié ici que le début de la procédure, après ça ne change pas.
A suivre...

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERROR
Dim Message As String, Valeur As Long

With Target
    Select Case .Address(False, False)
        Case Is = "A1", "C1"
            GoTo SUITE
        Case Else
            Exit Sub
    End Select
    
SUITE:
    Application.EnableEvents = False

    If .Address(False, False) = "A1" Then
'etc

Répondre à Ivan-hoe
Collection CommentÇaMarche.net