Bouton -1 paramétrable

Bonjour,

Grâce à votre aide, j'ai réussi à placer plus de 400 macros "+1" avec sortie dans onglet par mois.

Le code était celui-ci :

Sub PlusUn()
  With Sheets(MonthName(Month(Date)))
    .Range("B6") = .Range("B6") + 1
  End With
  MsgBox "Opération effectuée"
End Sub

La question que j'aimerai résoudre, ce serais en cas d'erreur amenant à enlever un +1. Les feuilles étant verrouillées, cela n'est pas disponible à la main.

Comme cela serait ponctuel, je me demande s'il est possible de reprendre le code précédent, avec un -1 et d'ouvrio un UserForm et sélectionner la cellule à modifier.

Sub PlusUn()
  With Sheets(MonthName(Month(Date)))
    .Range("??") = .Range("??") -1
  End With
  MsgBox "Annulation effectuée"
End Sub

La box d'UserForm demanderait quelle cellule a modifier, pour remplacer les ?? dans le code avant de l'appliquer. Ce qui fait que depuis un seul UserForm, je pourrais corriger mes 400 macros "+1". Est-ce possible ?

PS : En lien, la version fonctionnelle du +1, sans le reste.

10bouton-1.xlsm (25.97 Ko)

Bonjour

Suis perplexe

Daniboom a écrit :

j'ai réussi à placer plus de 400 macros

Comment ça ?

Tu as dupliqué 400 fois le code ?

Avec le fichier que tu as fournis pas besoin d'Userform

Tu fais une macro MoinsUn

Sub MoinsUn()
  With Sheets(MonthName(Month(Date)))
    .Range("B6") = .Range("B6") - 1
  End With
  MsgBox "Soustraction effectuée"
End Sub

Fournis un fichier qui expliquerait ta demande d'Userform

Banzai64 a écrit :

Comment ça ?

Tu as dupliqué 400 fois le code ?

J'ai en effet dupliqué 400 fois le code, pour 400 cellules différentes. Il est possible qu'il y avait plus simple à faire, mais le résultat me convient.

Image de ma page de saisie

Pour résumé, le fichier est multi-utilisateurs et jusqu'à maintenant, chacun rentrait sa donnée dans l'onglet du mois. Le gros problème est que les mois sont liés entre eux et que chaque mois ou presque amène un classement particulier dans l'ordre des personnes. Donc immanquablement avec des liens faux entre feuilles, régulièrement des personnes avaient des coches (+1) qui étaient destinées à d'autres.

Avec mon système, les feuilles mensuelles sont figées et ne peuvent plus être modifiées. Les +1 vont dans le mois correspondant, dans un tableau caché et l'affichage final se fait grâce à la variable "RECHERCHEV". Au final, celui qui veut imprimer avec un classement spécial n'aura plus qu'à modifier l'ordre des numéros dans la première colonne de mon image.

Avec le fichier que tu as fournis pas besoin d'Userform

Tu fais une macro MoinsUn

Sub MoinsUn()
  With Sheets(MonthName(Month(Date)))
    .Range("B6") = .Range("B6") - 1
  End With
  MsgBox "Soustraction effectuée"
End Sub

Fournis un fichier qui expliquerait ta demande d'Userform

Je reconnais que mon fichier et mon explication était pas top, désolé.

En gros ce que je souhaiterait, c'est de ne pas doubler mes boutons qui chargent déjà bien ma page, mais de mettre un seul UserForm qui permettrait de faire (-1) à une cellule donnée.

Exemple : Je clique le bouton "D6" par erreur, alors que c'était le "D7". Pour corriger je clique sur le bouton "Annulation". Une fenêtre s'ouvre me demande de choisir la cellule avec laquelle interagir, j'insère "D6" et je valide. Du coup la macro liée à l'UserForm reconnaît le nom de cellule et "corrige" par un -1, vu qu'on ne peut pas annuler une macro, l'erreur initiale effectuée.

J'espère que c'est plus clair.

Encore merci des coups de mains et chapeau pour la réactivité.

Personne n'a de réponse ?

J'ai fouiner sur le net et j'ai trouvé ActiveCell

Mais en essayant le code suivant, je n'ai pas d'erreur, j'ai la box de confirmation, mais aucune modification dans la cellule cible, par contre cela me modifie dans la cellule sélectionnée, alors que cela devrait finir dans la cellule du mois en cours.

    Sub MoinsUn()
      With Sheets(MonthName(Month(Date)))
        ActiveCell = ActiveCell - 1
      End With
      MsgBox "Soustraction effectuée"
    End Sub

Bonjour,

ActiveCell pointe sur la cellule active, soit la cellule sélectionnée.

Tu peux essayer avec un truc du genre :

Sub MoinsUn ()
Dim i, j as byte

i = inputbox("entrez le numéro correspondant à la ligne de la cellule à modifier")
j = inputbox("entrez le numéro correspondant à la colonne de la cellule à modifier")

Cells(i, j).Select
ActiveCell = ActiveCell - 1

End sub

C'est une méthode un peu fastidieuse mais qui fonctionne.

Tu couples la maccro à un bouton sur ta feuille et enjoy !

Cela marche un peu mieux, mais toutefois, cela change dans la feuille active, alors que j'aimerais que cela change dans la feuille du mois actif, comme

pour la procédure du +1

Sub PlusUn()
  With Sheets(MonthName(Month(Date)))
    .Range("B6") = .Range("B6") + 1
  End With
  MsgBox "Opération effectuée"
End Sub

Pas de soucis, tu fais un mix des 2 solutions :

Sub MoinsUn()

i = inputbox("entrez le numéro correspondant à la ligne de la cellule à modifier")
j = inputbox("entrez le numéro correspondant à la colonne de la cellule à modifier")

Sheets(MonthName(Month(Date))).Cells(i,j).select
ActiveCell = ActiveCell - 1

MsgBox "Opération effectuée"

End Sub

ça ne marche pas, erreur 1004 sur la ligne Sheets(MonthName(Month(Date))).Cells(i, j).Select

Il faut déclarer les variables, j'ai oublié dans mon précédent code :

Sub MoinsUn()
Dim i, j as byte

i = inputbox("entrez le numéro correspondant à la ligne de la cellule à modifier")
j = inputbox("entrez le numéro correspondant à la colonne de la cellule à modifier")

Sheets(MonthName(Month(Date))).Cells(i,j).select
ActiveCell = ActiveCell - 1

MsgBox "Opération effectuée"

End Sub

Je comprends un peu le raisonnement de la chose, mais malheureusement je ne puis guère amener mon grain de sable à l'édifice.

ça marche toujours pas "La méthode Select de la classe Range a échoué."

Hmm, essaies avec ce code là :

Sub MoinsUn()
Dim i, j As Byte

i = InputBox("entrez le numéro correspondant à la ligne de la cellule à modifier")
j = InputBox("entrez le numéro correspondant à la colonne de la cellule à modifier")

With Sheets(MonthName(Month(Date)))
.Cells(i, j) = .Cells(i, j) - 1

End With

MsgBox "Opération effectuée"

End Sub

Ca fonctionne !

En effet c'est fastidieux de compter les colonnes pour avoir le bon numéro, mais c'est pour le moment la moins mauvaise solution que j'ai à disposition!

Haha, content d'avoir put t'aider

Il y a sans doute d'autres solutions, mais elles dépassent mes compétences en VBA ^^

Rechercher des sujets similaires à "bouton parametrable"