Créer un bouton "enregistrer"

[Résolu/Fermé]
Signaler
Messages postés
29
Date d'inscription
dimanche 17 août 2014
Statut
Membre
Dernière intervention
12 juillet 2016
-
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
-
Bonjour,



Svp , je suis un peu débutant en vba excel , j'ai fait une simple interface sur une feuille excel "interface" avec une macro , et je veux créer un bouton "enregistrer" qui me permet d'enregistrer des valeurs de cette feuille dans une colonne B dans une autre feuille " opr " de facon successives à chaque fois que je clique sur ce bouton .

voila le code que j'ai fait pour ce bouton , mais lorsque que je clique il m'affiche la valeur de la cellule E2 de la feuille "interface" dans toute la colonne B en meme temps , mais moi ce que je veux c'est que pour chaque clik du bouton , il pointe la valeur de E2 dans une cellule de B une apres l'autre

Code :



Private Sub CommandButton1_Click()
Dim rep As Integer

rep = MsgBox("Voulez-vous vraiment enregistrer l'opération effectuée ?", vbYesNo, "Confirmation")
For i = 6 To 10
If rep = vbYes Then
Sheets("op").Range("B" & i).Value = Range("E2").Value
End If

Next i

End Sub


Merci .

Cordialement .

6 réponses

Bonjour,

J'ai pas tout compris ce que tu voulais faire mais est-ce que c'est ça que tu veux ?

Code :
Private Sub CommandButton1_Click()
Dim rep As Integer
For i = 6 To 10
rep = MsgBox("Voulez-vous vraiment enregistrer l'opération effectuée ?", vbYesNo, "Confirmation")
If rep = vbYes Then
Sheets("op").Range("B" & i).Value = Range("E2").Value
End If
Next i
End Sub
Messages postés
29
Date d'inscription
dimanche 17 août 2014
Statut
Membre
Dernière intervention
12 juillet 2016
1
non c'est pas ce que je veux , ce que je veux c'est lorsque je clique sur le bouton
et je répond par "oui" da,s le msgbox , il prens la valeur de E2 et l'affecte à la cellule B6 , et lorsque je clique encore il affecte la valeur de E2 dans la cellule B7 et ainsi de suite .

tu vois ?

CORDIALEMENT .
Peut-être quelque chose comme ça ?

Private Sub CommandButton1_Click()
Dim rep As Integer
For i = 6 To 10
rep = MsgBox("Voulez-vous vraiment enregistrer l'opération effectuée ?", vbYesNo, "Confirmation")
If rep = vbYes Then
Sheets("op").Range("B" & i).Value = Range("E2").Value
Else
Exit For
End If
Next i
End Sub
J'ai peut-être compris, ce serait plus ça :

Private Sub CommandButton1_Click()
Dim rep As Integer
Dim Enregistrement As Boolean
Enregistrement = False
i = 6
While i < 11 Or Enregistrement = False
If Sheets("op").Range("B" & i).Value = 0 Then
rep = MsgBox("Voulez-vous vraiment enregistrer l'opération effectuée ?", vbYesNo, "Confirmation")
If rep = vbYes Then
Sheets("op").Range("B" & i).Value = Range("E2").Value
Enregistrement = True
Else
Exit Sub
End If
End If
i = i + 1
Wend
End Sub
non c pas ça , ce que je veux c de créer une sorte de bases de données , j'ai une cellule E2 dans la feuille "interface" qui prend à chaque fois une valeur , et je veux à chaque click du bouton enregistrer , la colonne B de la feuille "op" à partir de la celulle B6 reçoit à chaque fois la valeur de E2 de la feuille " interface" dont j'ai déja parlé , de cette façon :

click sur le bouton --> la cellule B6 de "op" recoit E2 de "interface"
click sur le bouton --> la cellule B7 de "op" recoit E2 de "interface"
click sur bouton --> la cellule B8 de "op" recoit E2 de "interface"
.
.
.
.
.
.



et ainsi de suite ;

J'éspere que le probleme est compris . merci

Cordialement .
As-tu vraiment essayer le dernier programme que je t'ai envoyé ? Si oui, je vais t'expliquer chaque ligne tu programmes et peut-être que tu vas y arriver sinon tu me diras où est le problème car je pense qu'il est proche de la solution que tu cherches.

Code :
Private Sub CommandButton1_Click()
Dim rep As Integer
Dim Enregistrement As Boolean
Enregistrement = False
'Début du compteur à 6
i = 6
'Conditions de sortie de la boucle (pour i entre 6 et 10 et une fois que l'enregistrement a été fait)
While i < 11 Or Enregistrement = False
'Tant qu'il n'a pas trouvé de case vide de B6 à B10, il cherche.
If Sheets("op").Range("B" & i).Value = 0 Then
'Si trouvé une case vide alors il demande si l'on veut enregistré
rep = MsgBox("Voulez-vous vraiment enregistrer l'opération effectuée ?", vbYesNo, "Confirmation")
'Si réponse est oui alors il enregistre et met la variable Enregistrement à true pour pouvoir sortir de la boucle
If rep = vbYes Then
Sheets("op").Range("B" & i).Value = Range("E2").Value
Enregistrement = True
'Si la réponse est non il sort de la macro en ayant rien fait
Else
Exit Sub
End If
End If
'La boucle tourne tant que case vide pas trouvé et que enregistrement non fait
i = i + 1
Wend
End Sub
ui j'ai essayer avec ce code , mais le probleme c'est que on m'affiche d'un seule coup ( premier click) la valeur de E2 entre la cellule B6 et B10 de la feuille "interface" . moi ce que je veux c pour chaque click in affecte la valeur de E2 à une cellule , de maniére successive ( chaque click sur le bouton correspond au remplissage d'une seule cellule de B )

Merci .

Cordialement .
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 654
Bonjour,

Inutile de poser votre question sur plusieurs forums.

Private Sub CommandButton1_Click()
Dim rep As Integer, Dl As Long

With Sheets("op")
Dl = .Range("B" & Rows.Count).End(xlUp).Row
If Dl = 1 Then Dl = 6
rep = MsgBox("Voulez-vous vraiment enregistrer ?", vbYesNo, "Enregistrement")
If rep = vbYes Then
.Range("B" & Dl).Value = Range("E2").Value
End If
End With
End Sub
Alors j'ai vérifié moi-même et l'erreur est sur cette ligne :
While i < 11 Or Enregistrement = False
qu'il faut remplacer par
While i < 11 And Enregistrement = False

Tiens moi au courant si ça marche.
Après test de la fonction de pijaku, la macro écrase la dernière valeur de la colonne B donc je dirais :
Dl = .Range("B" & Rows.Count).End(xlUp).Row + 1 pour être excate mais l'optimisation est géniale, quand je compare mon code au tien ^^. Je serais retenir :).
Et du coup If Dl = 2 Then Dl = 6
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 654
oui, j'ai omis le +1.
Bien vu

Private Sub CommandButton1_Click()
Dim rep As Integer, Dl As Long

With  Sheets("op")
   Dl = .Range("B" & Rows.Count).End(xlUp).Row + 1
   If Dl = 2 Then Dl = 6
   rep = MsgBox("Voulez-vous vraiment enregistrer ?", vbYesNo, "Enregistrement")
   If rep = vbYes Then
       .Range("B" & Dl).Value = Range("E2").Value
   End If
End With
End Sub
Merci bcp ça a marché , mais svp j'ai pas compris l'utilité de la variable D1 et surtout cette fonction :
Range("B" & Rows.Count).End(xlUp).Row

. pour que je peux appliquer ça à d'autres cellules .

Merci bcp .

cordialement .
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 654
Bonjour,

ça n'est pas D1 mais Dl...
Range("B" & Rows.Count).End(xlUp).Row
n'est pas une fonction mais détermine qu'elle est la dernière cellule non vide de la colonne B.
Pour obtenir le numéro de la première ligne vide de la colonne B il suffit de lui ajouter 1 :
Dl = .Range("B" & Rows.Count).End(xlUp).Row + 1

Ensuite, le test :
If Dl = 2 Then Dl = 6
sert si aucune cellule n'est remplie dans la colonne B. En effet, lorsque la colonne est vide, Dl vaut 2; Comme tu souhaites commencer à 6, on dit ici que si Dl = 2 alors Dl = 6...