Excel : Macro Incrementer une valeur.
Résolu/Fermé
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!
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!
A voir également:
- Macro incrémentation automatique excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Réponse automatique thunderbird - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
7 réponses
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 11:07
23 juin 2008 à 11:07
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...
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
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 11:30
23 juin 2008 à 11:30
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...
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...
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!!!
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!!!
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 ?
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 ?
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 12:00
23 juin 2008 à 12:00
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.
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
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 14:12
23 juin 2008 à 14:12
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 14:35
23 juin 2008 à 14:35
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...
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
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 16:07
23 juin 2008 à 16:07
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...
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
johnbarley
Messages postés
1
Date d'inscription
jeudi 24 mars 2016
Statut
Membre
Dernière intervention
24 mars 2016
24 mars 2016 à 16:56
24 mars 2016 à 16:56
Bonjour,
Je voudrais incrémenter automatiquement d'1 la valeur d'une cellule à chaque modification de la cellule voisine : c'est pour avoir automatiquement un numéro séquentiel à chaque édition d'un modèle de bon de commande. Vos échanges ci-dessus répondent en partie à la question, il faudrait juste pouvoir remplacer la saisie manuelle par l'ajout automatique d'1. Pouvez-vous m'aider ?
Mille mercis !!
Je voudrais incrémenter automatiquement d'1 la valeur d'une cellule à chaque modification de la cellule voisine : c'est pour avoir automatiquement un numéro séquentiel à chaque édition d'un modèle de bon de commande. Vos échanges ci-dessus répondent en partie à la question, il faudrait juste pouvoir remplacer la saisie manuelle par l'ajout automatique d'1. Pouvez-vous m'aider ?
Mille mercis !!
23 juin 2008 à 11:20
Tu peux m'expliquer ou je dois l'insérer ?
Merci beaucoup!!
23 juin 2008 à 11:27
c'est nickel Merci beaucoup!
Bonne journée!!!
9 nov. 2023 à 22:57
Bonjour,
Merci à vous de m'avoir évité de passer des heures à créer une macro pour incrémenter des valeurs dans mon fichier de suivi de stocks.
Toutefois, je n'ai malheureusement pas la possibilité d'incrémenter les valeurs à virgule avec ce code.
Avez-vous un autre plus spécifique à mon besoin ?
Merci.