Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transfert d'argent de compte à compte visual basic

Excel 2010

Sujet résolu
    29 octobre 2020 à 22:02:39

    Bonjour, le principe est simple, je souhaite selectionner dans la liste déroulante un compte à débiter en G56 puis un compte à créditer toujours dans une liste déroulante en H56. Je saisie le montant de la transaction en I56 et je clique sur le bouton de controle (Valider le virement).

    exemple :

    Je souhaite qu'une macros se charge de faire le transfert d'argent De et Vers les comptes selectionnés dans les listes déroulantes.

    Les listes déroulantes sont crées à partir de "la prochaine photo", le tout se trouve sur la même feuille de calcul appelée "Comptes".

    Je n'ai pas la moindre idée de comment m'y prendre ... il doit y avoir une histoire de INDEX EQUIV peut être dans tout ça ???

    Pouvez vous m'aider svp ?

    • Partager sur Facebook
    • Partager sur Twitter
      30 octobre 2020 à 11:09:43

      Excel, c'est du VBA, pas du .NET, je demande le transfert aux admin.
      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        30 octobre 2020 à 12:22:41

        récupération des valeurs des 2 cellules listes déroulantes, une recherche des comptes par le nom dans ton tableau, modification de sa valeur.

        Si tu as déjà fait un code, ça serait bien de le montrer

        • Partager sur Facebook
        • Partager sur Twitter
          30 octobre 2020 à 16:07:28

          Bonjour,

          Déplacement vers un forum plus approprié

          Le sujet est déplacé de la section Langages.NET vers la section Autres langages (VBA, Ruby,...)

          • Partager sur Facebook
          • Partager sur Twitter
            30 octobre 2020 à 16:46:49

            Bonjour, et merci pour vos réponses, Non je n'ai pas fais de code car je ne sait pas du tout par quoi commencer ni comment faire . J'ai besoin de vous. Merci d'avance.
            • Partager sur Facebook
            • Partager sur Twitter
              30 octobre 2020 à 17:41:16

              à adapter:

              • le nom de la fonction selon le nom du bouton (j'ai utilisé un bouton ActiveX, sinon il faut affecter cette macro au bouton)
              • la plage du tableau des comptes
              A ajouter sûrement, tout ce qui concerne les opérations potentiellement impossibles (débiter un compte négatif ou à zéro, débiter un compte positif d'une somme qui le passerait dans le négatif, débiter d'une somme négative (qui revient à un versement dans l'autre sens ^^), .....
              Private Sub CommandButton1_Click()
              
                  Dim Compte_De As String, Compte_Vers As String
                  Dim Somme As Double
                  Dim Cellule_Compte_De As Range, Cellule_Compte_Vers As Range
                  Dim Tableau_Comptes As String
                  
                  Tableau_Comptes = "S49:U64"
                  
                  Compte_De = ActiveSheet.Range("g56").Value
                  Compte_Vers = ActiveSheet.Range("h56").Value
                  Somme = CDbl(ActiveSheet.Range("i56").Value)
                      
                  
                  Set Cellule_Compte_De = ActiveSheet.Range(Tableau_Comptes).Find(Compte_De, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                  If Not (Cellule_Compte_De Is Nothing) Then
                      Set Cellule_Compte_Vers = ActiveSheet.Range(Tableau_Comptes).Find(Compte_Vers, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                      If Not (Cellule_Compte_Vers Is Nothing) Then
                          Cellule_Compte_De.Offset(0, 1).Value = CDbl(Cellule_Compte_De.Offset(0, 1).Value) - Somme
                          Cellule_Compte_Vers.Offset(0, 1).Value = CDbl(Cellule_Compte_Vers.Offset(0, 1).Value) + Somme
                      End If
                  End If
                  
              End Sub
              • Partager sur Facebook
              • Partager sur Twitter
                31 octobre 2020 à 10:37:56

                Wahou merci beaucoup, ça marche parfaitement. Je voudrais savoir si ma colonne "Clés unique est nécéssaire pour que ça fonctionne ? je n'en ai pas l'impression !

                Les améliorations cités au dessus me semble très interessantes.

                Alors, je ne souhaite pas empècher le débit égal ou suppérieur au montant disponible, mais je souhaite néanmoins avoir un message d'alerte le stipulant et que je puisse autoriser quand même ou annuler l'opération.

                Je souhaiterais aussi empècher un virement don le montant est négatif, ça me semble normal de bloquer ça avec un message d'alerte expliquant le pourquoi du blocage de l'opération et un bouton OK pour fermer le message d'alerte. Et biensûr sans effectuer le virement.

                Il existe aussi des comptes impossible à débiter, comme un PEL par exemple. Peut on faire un blocage esur le PEL et les assurances vies avec un message du genre "Le débit du "Nom du compte" est impossible."avec un bouton "OK" pour fermer le message et biensûr ne pas efectuer l'opération. Ou est ce plus judicieux de refaire la liste des compte à débiter uniquement avec ceux ou c'est possible ?

                Je souhaite compter le nombre de virement effectués dans la cellule V2 en l'incrémentant de 1 à chaque fois qu'un virement s'effectue avec succès.

                Croyez vous pouvoir rajouter ça à votre code ? Merci d'avance.

                PS : le "Tableau_Comptes = "S49:U64"" se trouve en réalité ICI : "Tableau_Comptes = "S1:U16""

                -
                Edité par LouizonBobet 31 octobre 2020 à 11:20:55

                • Partager sur Facebook
                • Partager sur Twitter
                  2 novembre 2020 à 11:39:46

                  ta colonne clé ne sert pas nécessairement ici.

                  pour afficher un message, il faut utiliser un MessageBox => resultat=MsgBox "texte à afficher", [options] dans les options, on peut choisir les boutons à afficher, (on récupère le "bouton" appuyé dans resultat).

                  il suffit de rajouter des tests genre (avant la recherche de Celulle)

                  if Compte_De = "PEL" or InStr(1,Compte_De,"ASS.Vie",vbTextCompare) >0 then
                      Msgbox "impossible d'effectuer un virement le compte '" & Compte_De"', vbOkOnly
                      Exit Sub #on sort directement de la macro, après le clic sur le bouton
                  End If
                  

                  et, après la recherche des cellules, et avant l'opération

                  if Cellule_Compte_De.Offset(0, 1).Value <0 Cellule_Compte_De.Offset(0, 1).Value - somme <0 then
                      Resultat=MsgBox("Attention, le compte '" & Compte_De &"' est ou va être négatif. Voulez-vous poursuivre l'opération?", vbYesNo)
                      If Resultat = VbYes then
                          'on fait l'opération
                      Else
                          msbox "opération annulée"
                          Exit Sub
                      End If
                  End If
                      


                  Je te laisse faire les modifications nécessaires

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 novembre 2020 à 17:40:47

                    Merci pour ton aide, par contre j'ai un soucis avec le débogueur, il ne veut rien savoir ...

                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 novembre 2020 à 8:11:11

                      Il manque pas un opérateur logique (And, Or, etc...) entre le "<0" et le "Cellule_Compte_de..." ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                        9 novembre 2020 à 11:25:57

                        Si en effet, il manque un OR; j'ai dû le zapper quand j'ai écris le code (bien que j'ai du le penser ^^ ) ou j'ai fait une mauvaise manip lors de la saisie.

                        Pour l'erreur du 6 que tu as corrigé depuis, c'est que les déclarations (dim) doivent être faites avant leurs utilisations (en général, je met un "Option Explicit"  en début de module, pour obliger la déclaration des variables, ça t'aurai mis une erreur sur le Compte_De du if)

                        -
                        Edité par umfred 9 novembre 2020 à 11:26:14

                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 novembre 2020 à 19:50:35

                          Bonjour à vous et merci beaucoup pour votre aide et vos explications, effectivement ça fonctionne plutôt pas mal par contre je crois pas que l'on ai pris en compte qu'il faut empecher la macro de s'effectuer si les 2 champs en G56 et H56 n'ont pas été renseigné ou si la cellule I56 est = à 0€ Comment puis-je faire cela ?

                           

                          J'ai remarqué également que ce bout de code ne fonctionne pas, il n'empèche pas les virements de se faire

                          If Compte_De = "PEL" Or InStr(1, Compte_De, "ASS.Vie", vbTextCompare) > 0 Then
                              MsgBox "impossible d'effectuer un virement le compte " & "Compte_De", vbOKOnly
                              Exit Sub 'on sort directement de la macro, après le clic sur le bouton
                              End If

                          On doit empêcher "PEL", "PER", "Mon ASS.Vie","ASS.Vie Bryan","ASS.Vie Tom","PEA" et "Epargne salariale" d'être débité, car "ce n'est pas possible dans la réalité".

                           Je souhaite également compter le nombre de virement effectué qui ont abouttis dans la cellule V2.

                           

                          J'ai du apporter quelque modif, et du coup la macros doit vérifier l'état du compte avant de faire le virement et non pas la somme des virements. Si le solde du compte à débiter n'est pas suffisant ou négatif, ouvrir la MSGbox ... Si le montant du virement est négatif ouvrir une autre MSGbox avec un autre message d'erreur.

                          Merci encore pour votre aide .

                          -
                          Edité par LouizonBobet 9 novembre 2020 à 21:04:18

                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 novembre 2020 à 10:45:08

                            LouizonBobet a écrit:

                            Bonjour à vous et merci beaucoup pour votre aide et vos explications, effectivement ça fonctionne plutôt pas mal par contre je crois pas que l'on ai pris en compte qu'il faut empecher la macro de s'effectuer si les 2 champs en G56 et H56 n'ont pas été renseigné ou si la cellule I56 est = à 0€ Comment puis-je faire cela ?

                            En effet, il faut testé au début si ces cellules sont vides après avoir récupéré leurs valeurs
                            if Compte_De = "" or Compte_Vers="" or Somme="" or Somme 
                            

                            J'ai remarqué également que ce bout de code ne fonctionne pas, il n'empèche pas les virements de se faire

                            If Compte_De = "PEL" Or InStr(1, Compte_De, "ASS.Vie", vbTextCompare) > 0 Then
                                MsgBox "impossible d'effectuer un virement le compte " & "Compte_De", vbOKOnly
                                Exit Sub 'on sort directement de la macro, après le clic sur le bouton
                                End If

                            On doit empêcher "PEL", "PER", "Mon ASS.Vie","ASS.Vie Bryan","ASS.Vie Tom","PEA" et "Epargne salariale" d'être débité, car "ce n'est pas possible dans la réalité".

                             Je souhaite également compter le nombre de virement effectué qui ont abouttis dans la cellule V2.

                            Il faut rajouter les comptes non débitables aux tests, je n'ai mis que ceux dont tu m'avais parlé
                            If Compte_De = "PEL" Or Compte_De = "PEA" Or Compte_De = "PER" Or  InStr(1, Compte_De, "ASS.Vie", vbTextCompare) > 0 Then
                                MsgBox "impossible d'effectuer un virement le compte " & "Compte_De", vbOKOnly
                                Exit Sub 'on sort directement de la macro, après le clic sur le bouton
                            End If
                            Pour V2, il faut rajouter tout simplement cette ligne après le transfert
                            ActiveSheet.Range("V2").Value=ActiveSheet.Range("V2").Value+1

                            J'ai du apporter quelque modif, et du coup la macros doit vérifier l'état du compte avant de faire le virement et non pas la somme des virements. Si le solde du compte à débiter n'est pas suffisant ou négatif, ouvrir la MSGbox ... Si le montant du virement est négatif ouvrir une autre MSGbox avec un autre message d'erreur.

                            Merci encore pour votre aide .

                            Pour la vérification de l'état du compte, c'est le test que j'avais fait plus haut (ou il manquait le OR) Pour le test de la somme, il faudrait le faire au début après avoir lue les cellules des comptes de la somme (Je reprend le 1er code de ce post avec les modifications pour traiter la somme indépendamment des comptes)
                            if Compte_De = "" or Compte_Vers="" then
                                Msgbox "Les 2 comptes ne sont pas sélectionnées", vbokonly
                                Exit Sub
                            End If
                            If Somme="" or Somme 
                            

                            -
                            Edité par umfred 10 novembre 2020 à 10:46:01

                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 novembre 2020 à 20:57:33

                              Rebonjour, j'ai manipuler un peu le code, et j'ai réussi à corriger certain bug, mais il en reste au moins 2 ou je suis larguer.

                              Voici le code complet :

                              Private Sub Valider_Click()
                              
                                  Dim Compte_De As String, Compte_Vers As String
                                  Dim Somme As Double
                                  Dim Cellule_Compte_De As Range, Cellule_Compte_Vers As Range
                                  Dim Tableau_Comptes As String
                                   
                                  Tableau_Comptes = "S1:U16"
                                   
                                  Compte_De = ActiveSheet.Range("g56").Value
                                  Compte_Vers = ActiveSheet.Range("h56").Value
                                  Somme = CDbl(ActiveSheet.Range("i56").Value)
                                  
                                  If Compte_De = "" Or Compte_Vers = "" Then
                                      MsgBox "Les 2 comptes ne sont pas sélectionnées", vbOKOnly
                                      Exit Sub
                                  End If
                                  
                                  'If Somme = "" Or Somme > "0" Then
                                      'MsgBox "Le montant du virement ne peut pas être inférieur ou égal à 0", vbOKOnly
                                      'Exit Sub
                                 ' End If
                                  
                                  If Compte_De = "PEL" Or Compte_De = "PEA" Or Compte_De = "PER" Or Compte_De = "ASS.Vie Bryan" Or Compte_De = "ASS.Vie Tom" Or Compte_De = "Epargne salariale" Or InStr(1, Compte_De, "Mon ASS.Vie", vbTextCompare) > 0 Then
                                      MsgBox "Impossible d'effectuer un virement depuis le compte " & Compte_De, vbOKOnly
                                      Exit Sub 'on sort directement de la macro, après le clic sur le bouton
                                  End If
                                  
                                  Set Cellule_Compte_De = ActiveSheet.Range(Tableau_Comptes).Find(Compte_De, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                  If Not (Cellule_Compte_De Is Nothing) Then
                                      Set Cellule_Compte_Vers = ActiveSheet.Range(Tableau_Comptes).Find(Compte_Vers, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                      If Not (Cellule_Compte_Vers Is Nothing) Then
                                          Cellule_Compte_De.Offset(0, 1).Value = CDbl(Cellule_Compte_De.Offset(0, 1).Value) - Somme
                                          Cellule_Compte_Vers.Offset(0, 1).Value = CDbl(Cellule_Compte_Vers.Offset(0, 1).Value) + Somme
                                      End If
                                  End If
                                  
                                  If Cellule_Compte_De.Offset(0, 1).Value < 0 Or Cellule_Compte_De.Offset(0, 1).Value - Somme < 0 Then
                                      Resultat = MsgBox("Attention, le compte " & Compte_De & " est ou va être négatif. Voulez-vous poursuivre l'opération?", vbYesNo)
                                      If Resultat = vbYes Then
                                          'on fait l'opération
                                      Else
                                          MsgBox "opération annulée"
                                          Exit Sub
                                      End If
                                  End If
                                  
                                  ActiveSheet.Range("V2").Value = ActiveSheet.Range("V2").Value + 1
                                  
                                  Range("G56").Select
                                  Selection.ClearContents
                                  Range("H56").Select
                                  Selection.ClearContents
                                  Range("I56").Select
                                  ActiveCell.FormulaR1C1 = "0"
                                  Range("G56").Select
                                   
                              End Sub


                              Cette partie là ne fonctionne pas, c'est pourquoi je l'ai mise en commentaire pour pouvoir tester le reste :

                              'If Somme = "" Or Somme > "0" Then
                                      'MsgBox "Le montant du virement ne peut pas être inférieur ou égal à 0", vbOKOnly
                                      'Exit Sub
                                 ' End If

                              Le deuxième problème est que même si on rentre dans ce code :

                              If Cellule_Compte_De.Offset(0, 1).Value < 0 Or Cellule_Compte_De.Offset(0, 1).Value - Somme < 0 Then
                                      Resultat = MsgBox("Attention, le compte " & Compte_De & " est ou va être négatif. Voulez-vous poursuivre l'opération?", vbYesNo)
                                      If Resultat = vbYes Then
                                          'on fait l'opération
                                      Else
                                          MsgBox "opération annulée"
                                          Exit Sub
                                      End If
                                  End If

                              Et que l'on annule l'opération, ça fait comme si l'opération était annulée, sauf que le virement à bien été effectué quand même. C'est logique puisqu'on fait le virement avant la vérif. Mais si on modifie le code et que l'on met la verif avant le virement on à une erreur avec le déboggueur... je pense à un problème de déclaration de variable  ...

                              D'autre part, je veux vérifier si les comptes ne sont pas à 0 ou négatif dans la colonne U2:U16 Si c'est le cas on demande si on veux effectuer l'opération ? Si oui on fait quand même le virement dans la colonne T2:T16, si non on sort de la macro.

                              Aujourdhui, ça me modifie la colonne qui est vérifée, et ce n'est pas se que je souhaite. j'ai essayé des chose mais ça ne marche pas .

                              J'ai encore besoin de ton aide. Merci


                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 novembre 2020 à 12:04:33

                                Sur Somme (la zone mise en commentaire) en effet, j'avais oublié qu'on le "transformait" en double, donc une valeur donc il faut juste faire somme<=0 dans le test 

                                Mince, je n'avais pas remarqué que mon message précédent était tronqué dans le dernier bout de code :/

                                Pour le second problème, oui c'est normal, j'ai bien mis en commentaire "on fait l'opération" ce qui veut dire qu'il faut mettre l'opération de transfert à cet endroit, et l'opération de transfert est faite juste au dessus comme tu le fais remarqué.

                                Le message d'erreur c'est aussi normal, il doit dire qu'il ne connait pas Cellule_Compte_De vu qu'elle est initialisée par le Set. il faut que le test soit donc fait là où se trouve l'opération (qui doit donc être mise à l'emplacement de mon commentaire.

                                Comme tu as changé le tableau, il faut adapter l'offset colonne de la ligne du/des compte(s) selon ce que tu veux faire.

                                Ci-dessous le code corrigé, qui affiche le résultat du virement (pour la ligne créditée, colonne U + Somme et pour la ligne débitée, colonne U - Somme) dans la colonne T de la ligne correspondante. (on ne touche pas à la valeur de la colonne U)

                                Private Sub Valider_Click()
                                
                                    Dim Compte_De As String, Compte_Vers As String
                                    Dim Somme As Double
                                    Dim Cellule_Compte_De As Range, Cellule_Compte_Vers As Range
                                    Dim Tableau_Comptes As String
                                    Dim Offset_Col_Solde As Integer, Offset_Col_Virement As Integer
                                    Dim Reponse As Integer
                                    
                                    Tableau_Comptes = "S1:U16"
                                    Offset_Col_Solde = 2 'colone nom_compte + 2
                                    Offset_Col_Virement = 1 'colone nom_compte + 1
                                      
                                    Compte_De = ActiveSheet.Range("g56").Value
                                    Compte_Vers = ActiveSheet.Range("h56").Value
                                    Somme = CDbl(ActiveSheet.Range("i56").Value)
                                     
                                    If Compte_De = "" Or Compte_Vers = "" Then
                                        MsgBox "Les 2 comptes ne sont pas sélectionnés", vbOKOnly
                                        Exit Sub
                                    End If
                                     
                                    If Somme <= 0 Then
                                        MsgBox "Le montant du virement ne peut pas être inférieur ou égal à 0", vbOKOnly
                                        Exit Sub
                                    End If
                                     
                                    If Compte_De = "PEL" Or Compte_De = "PEA" Or Compte_De = "PER" Or Compte_De = "ASS.Vie Bryan" Or Compte_De = "ASS.Vie Tom" Or Compte_De = "Epargne salariale" Or InStr(1, Compte_De, "Mon ASS.Vie", vbTextCompare) > 0 Then
                                        MsgBox "Impossible d'effectuer un virement depuis le compte " & Compte_De, vbOKOnly
                                        Exit Sub 'on sort directement de la macro, après le clic sur le bouton
                                    End If
                                     
                                    Set Cellule_Compte_De = ActiveSheet.Range(Tableau_Comptes).Find(Compte_De, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                    If Not (Cellule_Compte_De Is Nothing) Then
                                        Set Cellule_Compte_Vers = ActiveSheet.Range(Tableau_Comptes).Find(Compte_Vers, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                        If Not (Cellule_Compte_Vers Is Nothing) Then
                                            If Cellule_Compte_De.offset(0, Offset_Col_Solde).Value < 0 Or Cellule_Compte_De.offset(0, Offset_Col_Solde).Value - Somme < 0 Then
                                                Reponse = MsgBox("Attention, le compte " & Compte_De & " est ou va être négatif. Voulez-vous poursuivre l'opération?", vbYesNo)
                                                If Reponse = vbYes Then
                                                    'on fait l'opération de virement
                                                    'le code actuel donne le résultat de l'opération (colone S +/- Somme) dans la colonne T
                                                    Cellule_Compte_De.offset(0, Offset_Col_Virement).Value = CDbl(Cellule_Compte_De.offset(0, Offset_Col_Solde).Value) - Somme
                                                    Cellule_Compte_Vers.offset(0, Offset_Col_Virement).Value = CDbl(Cellule_Compte_Vers.offset(0, Offset_Col_Solde).Value) + Somme
                                                    
                                                    'on incrémente le compteur de virement
                                                    ActiveSheet.Range("V2").Value = ActiveSheet.Range("V2").Value + 1
                                                    
                                                Else
                                                    MsgBox "opération annulée", vbOKOnly
                                                    Exit Sub
                                                End If
                                            End If
                                        End If
                                    End If
                                
                                    Range("G56").Select
                                    Selection.ClearContents
                                    Range("H56").Select
                                    Selection.ClearContents
                                    Range("I56").Select
                                    ActiveCell.FormulaR1C1 = "0"
                                    Range("G56").Select
                                End Sub
                                



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 novembre 2020 à 21:07:56

                                  Merci une fois de plus pour ta réponse, cependant il y a un problème qui n'en était pas un avec le code d'avant.

                                  Là ça m'indique que les comptes ne sont pas selectionnés, alors qu'il le sont ! j'ai tout essayé, mais rien ne change, toujours la même erreur. je ne comprend pas. Je suis sencé avoir un message d'erreur par rapport à la somme. j'ai épluché le code qui semble très bien , je ne vois pas d'où viens l'erreur.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 novembre 2020 à 9:59:05

                                    tu n'as pas changé les cellules où l'on sélectionne les comptes, ce sont toujours G56 et H56 ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 novembre 2020 à 20:12:43

                                      "Bonjour, oui bien sur, c'est pour ça que je ne comprend pas."

                                      LOL Effectivement j'ai rajouté 2 lignes un peu plus haut dans le tableur et du coup, maintenant ça fonctionne bien mieux après correction. Merci beaucoup. je reviendrais pour mettre le sujet résolu une fois que j'aurais fais tout les testes.

                                      -
                                      Edité par LouizonBobet 16 novembre 2020 à 20:17:49

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 novembre 2020 à 22:49:47

                                        Je reviens ici car après quelque tests, il s'avère qu il y à des disfonctionnements. Les virements ne se font qu'une fois sur 5 a peux près, parfois 2 d'affilés

                                        youhouuu, je n'ai plus d'option de collage après une poignée de recopie, et il m'est impossible de modifier, déplacer,ou supprimer le bouton de commande de la macro des viremetns.

                                        Pourtant j'ai fais une réinstal du pack office 2010 complète. HELP

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 novembre 2020 à 11:15:58

                                          pour bouger le bouton, si c'est un bouton "ActiveX", il faut passer en mode création dans l'onglet développeur, si c'est un bouton "Formulaire", faire un clic droit dessus. (perso je préfère les boutons "ActiveX") (je pense que ton bouton était un "ActiveX" vu le nom de la fonction). 

                                          Pour le reste, exécute la macro en pas à pas (F8) pour voir où ça peut bloquer. 

                                          Nota: si tu changes le nom (Name) du bouton il faudra renommer la fonction de la même façon.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 novembre 2020 à 22:18:11

                                            Bonsoir, j'ai résolu le problè de collage et de boutton en passant a la version 2019 du pack office.

                                             Concernant les virement ça ne fonctionne pas mieux.

                                            le virement du compte courant vers le porte monnaie par exemple ne donne pas de résultat pourtant la macro s'éffectue jusque au bout, et quand cela fonctionne, car ça arrive, les comptes ne sont plus juste et ce n'est pas des erreurs de nombre entier mais a virgules par exemple :

                                            virement (qui fonctionne)de 1000€ du porte monnaie vers le compte je me suis retrouvé avec une erreur de 112.11€.

                                            Voici le code complet :

                                            Private Sub Valider_Click()
                                             
                                                Dim Compte_De As String, Compte_Vers As String
                                                Dim Somme As Double
                                                Dim Cellule_Compte_De As Range, Cellule_Compte_Vers As Range
                                                Dim Tableau_Comptes As String
                                                Dim Offset_Col_Solde As Integer, Offset_Col_Virement As Integer
                                                Dim Reponse As Integer
                                                 
                                                Tableau_Comptes = "S1:U16"
                                                Offset_Col_Solde = 2 'colone nom_compte + 2
                                                Offset_Col_Virement = 1 'colone nom_compte + 1
                                                   
                                                Compte_De = ActiveSheet.Range("G55").Value
                                                Compte_Vers = ActiveSheet.Range("H55").Value
                                                Somme = CDbl(ActiveSheet.Range("I55").Value)
                                                  
                                                If Compte_De = "" Or Compte_Vers = "" Then
                                                    MsgBox "Les 2 comptes ne sont pas sélectionnés.", vbOKOnly
                                                    Exit Sub
                                                End If
                                                  
                                                If Somme <= 0 Then
                                                    MsgBox "Le montant du virement ne peut pas être inférieur ou égal à 0.", vbOKOnly
                                                    Exit Sub
                                                End If
                                                  
                                                If Compte_De = "PEL" Or Compte_De = "PEA" Or Compte_De = "PER" Or Compte_De = "ASS.Vie Bryan" Or Compte_De = "ASS.Vie Tom" Or Compte_De = "Epargne salariale" Or InStr(1, Compte_De, "Mon ASS.Vie", vbTextCompare) > 0 Then
                                                    MsgBox "Impossible d'effectuer un virement depuis le compte " & Compte_De, vbOKOnly
                                                    Exit Sub 'on sort directement de la macro, après le clic sur le bouton
                                                End If
                                                  
                                                Set Cellule_Compte_De = ActiveSheet.Range(Tableau_Comptes).Find(Compte_De, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                                If Not (Cellule_Compte_De Is Nothing) Then
                                                    Set Cellule_Compte_Vers = ActiveSheet.Range(Tableau_Comptes).Find(Compte_Vers, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                                    If Not (Cellule_Compte_Vers Is Nothing) Then
                                                        If Cellule_Compte_De.Offset(0, Offset_Col_Solde).Value < 0 Or Cellule_Compte_De.Offset(0, Offset_Col_Solde).Value - Somme < 0 Then
                                                            Reponse = MsgBox("Attention, le compte " & Compte_De & " est ou va être négatif. Voulez-vous poursuivre l'opération?", vbYesNo)
                                                            If Reponse = vbYes Then
                                                                'on fait l'opération de virement
                                                                'le code actuel donne le résultat de l'opération (colone S +/- Somme) dans la colonne T
                                                                Cellule_Compte_De.Offset(0, Offset_Col_Virement).Value = CDbl(Cellule_Compte_De.Offset(0, Offset_Col_Solde).Value) - Somme
                                                                Cellule_Compte_Vers.Offset(0, Offset_Col_Virement).Value = CDbl(Cellule_Compte_Vers.Offset(0, Offset_Col_Solde).Value) + Somme
                                                                 
                                                                'on incrémente le compteur de virement
                                                                ActiveSheet.Range("V2").Value = ActiveSheet.Range("V2").Value + 1
                                                                 
                                                            Else
                                                                MsgBox "opération annulée", vbOKOnly
                                                                Exit Sub
                                                            End If
                                                        End If
                                                    End If
                                                End If
                                             
                                                Range("X3:AC3").Select
                                                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
                                                Selection.Borders(xlDiagonalDown).LineStyle = xlNone
                                                Selection.Borders(xlDiagonalUp).LineStyle = xlNone
                                                With Selection.Borders(xlEdgeLeft)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                With Selection.Borders(xlEdgeTop)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                With Selection.Borders(xlEdgeBottom)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                With Selection.Borders(xlEdgeRight)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                Selection.Borders(xlInsideVertical).LineStyle = xlNone
                                                Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
                                                Selection.Borders(xlDiagonalDown).LineStyle = xlNone
                                                Selection.Borders(xlDiagonalUp).LineStyle = xlNone
                                                With Selection.Borders(xlEdgeLeft)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                With Selection.Borders(xlEdgeTop)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                With Selection.Borders(xlEdgeBottom)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                With Selection.Borders(xlEdgeRight)
                                                    .LineStyle = xlContinuous
                                                    .ColorIndex = 0
                                                    .TintAndShade = 0
                                                    .Weight = xlMedium
                                                End With
                                                Selection.Borders(xlInsideVertical).LineStyle = xlNone
                                                Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
                                                Range("Z3").Select
                                                Selection.NumberFormat = "#,##0.00 $"
                                                Range("AA3").Select
                                                Selection.NumberFormat = "m/d/yyyy"
                                                Range("AB3").Select
                                                Selection.NumberFormat = "h:mm;@"
                                                Range("X3").Select
                                                Range("G55").Select
                                                Selection.Copy
                                                Range("X3").Select
                                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                    :=False, Transpose:=False
                                                Range("Y3").Select
                                                Range("H55").Select
                                                Selection.Copy
                                                Range("Y3").Select
                                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                    :=False, Transpose:=False
                                                Range("Z3").Select
                                                Range("I55").Select
                                                Selection.Copy
                                                Range("Z3").Select
                                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                    :=False, Transpose:=False
                                                    Range("A11").Select
                                                Selection.Copy
                                                Range("AA3").Select
                                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                    :=False, Transpose:=False
                                                Range("AB3").Select
                                                Range("AA3").Select
                                                Selection.Copy
                                                Range("AB3").Select
                                                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                    :=False, Transpose:=False
                                                Selection.NumberFormat = "h:mm;@"
                                                Range("X3:AC3").Select
                                                With Selection.Font
                                                    .ColorIndex = xlAutomatic
                                                    .TintAndShade = 0
                                                End With
                                                Selection.Font.Bold = False
                                                Range("X3:AC3").Select
                                                With Selection
                                                    .HorizontalAlignment = xlGeneral
                                                    .VerticalAlignment = xlCenter
                                                    .WrapText = False
                                                    .Orientation = 0
                                                    .AddIndent = False
                                                    .IndentLevel = 0
                                                    .ShrinkToFit = False
                                                    .ReadingOrder = xlContext
                                                    .MergeCells = False
                                                End With
                                                With Selection
                                                    .HorizontalAlignment = xlCenter
                                                    .VerticalAlignment = xlCenter
                                                    .WrapText = False
                                                    .Orientation = 0
                                                    .AddIndent = False
                                                    .IndentLevel = 0
                                                    .ShrinkToFit = False
                                                    .ReadingOrder = xlContext
                                                    .MergeCells = False
                                                End With
                                                With Selection
                                                    .HorizontalAlignment = xlCenter
                                                    .VerticalAlignment = xlBottom
                                                    .WrapText = False
                                                    .Orientation = 0
                                                    .AddIndent = False
                                                    .IndentLevel = 0
                                                    .ShrinkToFit = False
                                                    .ReadingOrder = xlContext
                                                    .MergeCells = False
                                                End With
                                                With Selection
                                                    .HorizontalAlignment = xlCenter
                                                    .VerticalAlignment = xlCenter
                                                    .WrapText = False
                                                    .Orientation = 0
                                                    .AddIndent = False
                                                    .IndentLevel = 0
                                                    .ShrinkToFit = False
                                                    .ReadingOrder = xlContext
                                                    .MergeCells = False
                                                End With
                                                Range("G55").Select
                                                Selection.ClearContents
                                                Range("H55").Select
                                                Selection.ClearContents
                                                Range("I55").Select
                                                ActiveCell.FormulaR1C1 = "0"
                                                Range("G55").Select
                                            End Sub
                                            

                                            Merci de ton aide

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 novembre 2020 à 11:37:58

                                              Dans le code en extra à la fin (qui est issu d'une macro enregistrée) on voit des copier-coller de cellules vers les colonnes Y, Z, AA, et AB, c'est normal ?

                                              Pour essayer de savoir où se trouve l'erreur, il faudrait exécuter la macro en pas à pas (un point d'arrêt au début et F8 ensuite ensuite) et regarder si les variables ont les valeurs souhaitées

                                              pour l'exemple que tu donnes du virement de 1000€ entre le porte monnaie et un compte, il faudrait connaitre la valeur du solde de ces 2 comptes initialement pour avoir une idée de ce qui a pu se passer. (je soupçonne peut-être un problème avec les virgules '.' et virgules ',' par rapport à la virgule monétaire définie dans windows/paramètres régionaux.

                                              si possible, le mieux serait que tu mettes un lien pour télécharger ton fichier, pour tester avec ta configuration du fichier

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                21 novembre 2020 à 8:46:03

                                                Bonjour, Oui le code à la fin me permet de créer un historique des virement. Etant donné que je ne comprends pas d'ou viens le problème, j'ai recreer un fichier avec uniquement l'exercice que nous essayons de resoudre, en supprimant également mon code extra à la fin, et là tout marche sauf le virement en lui même !

                                                voici le lien du fichier one drive.

                                                https://1drv.ms/x/s!Ampqxt1kX07WjD1VYGpeeaKUdqQ6?e=pm3ZHj

                                                J'ai compris le probleme, c'est une erreur dans le code vba, mais je ne sais pas se qu il faut modifier.

                                                Quand je fais un virement, de 1100€ par exemple ça crédite le compte à créditer du montant du virement + le solde du compte en ocurence ici de 2100€ !!! 1000+1100=2100.

                                                Quand au compte à débiter, il se débite du montant du virement - le solde du compte donc ici 1000-1100=-100

                                                Et le deuxième problème est que le virement ne s'effectue qu'un seul fois. j'ai fais 5 fois le même virement, il n'a fonctionné qu'une seule fois.

                                                -
                                                Edité par LouizonBobet 22 novembre 2020 à 10:08:14

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 novembre 2020 à 10:30:43

                                                  J'ai essayé de comprendre votre code vba bien que j'ai eu du mal, j'ai trouvé la solution au deux problèmes.

                                                  Il y avait une erreur dans l'opération pour faire le virement, et si il n'y avait pas d'erreur de solde, l'opération ne pouvait pas se faire.

                                                  Voici la correction du code.

                                                  Set Cellule_Compte_De = ActiveSheet.Range(Tableau_Comptes).Find(Compte_De, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                                      If Not (Cellule_Compte_De Is Nothing) Then
                                                          Set Cellule_Compte_Vers = ActiveSheet.Range(Tableau_Comptes).Find(Compte_Vers, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
                                                          If Not (Cellule_Compte_Vers Is Nothing) Then
                                                              If Cellule_Compte_De.Offset(0, Offset_Col_Solde).Value < 0 Or Cellule_Compte_De.Offset(0, Offset_Col_Solde).Value - Somme < 0 Then
                                                                  Reponse = MsgBox("Attention, le compte " & Compte_De & " est ou va être négatif. Voulez-vous poursuivre l'opération?", vbYesNo)
                                                                  If Reponse = vbYes Then
                                                                      'on fait l'opération de virement
                                                                      'le code actuel donne le résultat de l'opération (colone S +/- Somme) dans la colonne T
                                                                      Cellule_Compte_De.Offset(0, Offset_Col_Virement).Value = Cellule_Compte_De.Offset(0, Offset_Col_Virement).Value - Somme
                                                                      Cellule_Compte_Vers.Offset(0, Offset_Col_Virement).Value = Cellule_Compte_Vers.Offset(0, Offset_Col_Virement).Value + Somme
                                                                       
                                                                      'on incrémente le compteur de virement
                                                                      ActiveSheet.Range("D2").Value = ActiveSheet.Range("D2").Value + 1
                                                                       
                                                                  Else
                                                                      MsgBox "opération annulée", vbOKOnly
                                                                      Exit Sub
                                                                  End If
                                                              Else
                                                                  'le code actuel donne le résultat de l'opération (colone S +/- Somme) dans la colonne T
                                                                  Cellule_Compte_De.Offset(0, Offset_Col_Virement).Value = Cellule_Compte_De.Offset(0, Offset_Col_Virement).Value - Somme
                                                                  Cellule_Compte_Vers.Offset(0, Offset_Col_Virement).Value = Cellule_Compte_Vers.Offset(0, Offset_Col_Virement).Value + Somme
                                                                       
                                                                  'on incrémente le compteur de virement
                                                                  ActiveSheet.Range("D2").Value = ActiveSheet.Range("D2").Value + 1
                                                              End If
                                                          End If
                                                      End If



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    23 novembre 2020 à 11:15:54

                                                    Exact, j'avais oublié de remettre le cas normal, désolé :(
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      23 novembre 2020 à 18:50:27

                                                      Merci beaucoup pour ton aide. A très bientôt pour de nouveaux défis.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Transfert d'argent de compte à compte visual basic

                                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                      • Editeur
                                                      • Markdown