Créer un bouton "enregistrer"

Résolu
sossso Messages postés 30 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. Stikmou
     
    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
    0
  2. sossso Messages postés 30 Statut Membre 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 .
    0
  3. Stikmou
     
    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
    0
    1. Stikmou
       
      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
      0
  4. sossso
     
    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 .
    0
    1. Stikmou
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sossso
     
    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 .
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
    2. Stikmou
       
      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.
      0
    3. Stikmou
       
      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 :).
      0
    4. Stikmou
       
      Et du coup If Dl = 2 Then Dl = 6
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
  7. sossso
     
    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 .
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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...
      0