Correction code VBA

Salut les amis,

je suis bloqué dans mon petit projet au niveau du Userform4 qui me permettra de modifier une ligne excel, le changement se fait en cellule B alors que C,D,E & F restent inchangées.

je suis ouvert à toute suggestion concernant les codes de ce projet.

voici mon fichier :

je remercie d'ailleurs les experts qui m'ont aider depuis le début notamment :

james007,

gmb,

LouReed,

frangy,

jean Eric,

ti-chou-3,

richi2casa,

et autres ....

Bonsoir et merci pour le clin d'œil !

Ci dessous le code modifié, peut-être (surement...) existe-t-il une solution "plus propre", mais ici ça a le mérite de fonctionner...

J'ai rajouté une variable à postée globale : Modif_en_cours. Le reste de l'explication est en commentaire dans le code

Private Sub CboLigne_Change()
Dim Cell As Range
Dim Usd As Long

If Modif_en_cour = False Then
    Usd = CboLigne.Value

    For Each Cell In Sheets("REMISE").Range("Rang")

        If Cell.Value = Usd Then

            With TextBox1
                .Value = Cell.Offset(0, 1).Value
                .Enabled = True
            End With
            With ComboBox1
                .Value = Cell.Offset(0, 2).Value
                .Enabled = True
            End With
            With TextBox3
                .Value = Cell.Offset(0, 3).Value
                .Enabled = True
            End With
            With TextBox2
                .Value = Cell.Offset(0, 4).Value
                .Enabled = True
            End With
            With CboMontant
                .Value = Cell.Offset(0, 5).Value
                .Enabled = True
            End With

            Exit For

        End If

    Next Cell

End If

End Sub

Private Sub CmdAnnuler_Click()
UserForm4.Hide
If UserForm3.Visible = False Then
UserForm3.Show
End If

End Sub

Private Sub CmdValider_Click()

Dim Cell As Range
Dim Usd As Long

Modif_en_cour = True

Usd = CboLigne.Value

For Each Cell In Sheets("REMISE").Range("Rang")
    If Cell.Value = Usd Then
        Cell.Offset(0, 1).Value = UCase(TextBox1.Value) ' numéro de chèque
        Cell.Offset(0, 2).Value = ComboBox1.Value ' banque
        Cell.Offset(0, 3).Value = UCase(TextBox3.Value) ' raison social
        Cell.Offset(0, 4).Value = UCase(TextBox2.Value) ' numéro du compte
        Cell.Offset(0, 5).Value = CboMontant.Value ' montant
        Modif_en_cour = False
        Exit For
    End If
Next Cell

Unload Me

MsgBox "Modification(s) effectuée(s) au rang n°" & CboLigne.Value, vbInformation, "Modification rang n°" & CboLigne.Value

End Sub

Private Sub UserForm_Initialize()
'ici vous désignez la row source de CboLigne grâce à la colonne rang avec une zone "nommée"
' hors dans le userform4 avec la fonction UCase(TextBox1.Value) vous déclenchez la private sub CboLigne_Change()
' celle-ci met les valeurs de la ligne considérée dans les textbox et combobox du userform4 !
' donc quand vous demandez de modifier, vous remettez les valeurs d'origines puis vous les copiez, donc pas de modif !!!!
' moi avec mon niveau j'ai crée une variable booléenne à portée globale au doux nom de "Modif_en_cours"
' l'autre solution, remplir la combobox avec les données de la colonne sans passer par la zone de la feuille avec Add.Item...
'mais là je n'ai pas le temps, et il y a les autres bienfaiteurs de votre liste de votre post !!! ;-)

Modif_en_cours = False

CboLigne.RowSource = ("REMISE!Rang")

ComboBox1.RowSource = ("REMISE!Banque")

CboMontant.RowSource = ("REMISE!MONTANT")

End Sub

Ensuite le rajout de la variable globale au tout début du module1 :

Public Modif_en_cour As Boolean

Sub Bouton1735_Clic()

UserForm3.Show
End Sub

Voilà

@ bientôt

LouReeD

t'es vraiment le master des masters. impeccable, introuvable et ça se voit. merci.


juste une chose ( ici j'abuserai de ta générosité), y a t il un moyen de sauvegarder les impressions en pdf dans un onglet nommé HISTORIQUE (question d'avoir un historique des remises de chèque)... et merci de ta patience et du temps consacré à mes postes.

Bonjour,

Master des master !? Je ne suis que troisième sur la liste !

Je plaisante

Pour la dernière question : ?

Une copie de toute l'impression ou juste des données ?

@ bientôt

LouReeD

c'est ce que j'appelle de la modestie....

l'impression des données . merci

Bonjour,

en fait après l'impression vous comptez faire quoi ?

@ bientôt

LouReeD

Bonjour,

Je compte garder un historique des impressions en pdf dans un onglet nommé historique et ce par ordre chronologique.

Bonsoir,

pour commencer le nom de l'onglet "historique" n'est pas possible... enfin chez moi c'est le cas...

Après le format de cet onglet et les infos inscrites sont celles des 6 colonnes de données des remises ?

Ces données une fois imprimées en PDF et enregistrées sur l'onglet "Istorik" sont-elles effacées de l'onglet "Remise" ?

Faut-il en plus ajouter une date qui correspondrait à la date de l'impression ?

Un fichier avec le résulta "visuel" escompté serait-il la bienvenue ?

@ bientôt

LouReeD

Bonjour,

en appuyant sur le bouton impression pdf, une copie de cette remise y compris la date et l'entête doit être copiée dans une feuille "HISTORIQUES" par ordre chronologique l'une après l'autre sans effacée la remise.

j'espère que c'est pas trop demandé. bonne journée.

Bonsoir,

excusez moi d'être "critique", mais si les données de remise ne sont pas effacées, pourquoi les recopiées sur l'onglet "historique" ?

@ bientôt

LouReeD

ne t'excuse pas cher ami, c'est moi qui doit s'excuser.

l'historique est crée dans le but de garder une trace des remises faites alors que le remise elle-même ne sert qu'à être remplie pour envoyer les remises donc elle est changeable. je l'efface à chaque nouvelle saisie.

Rechercher des sujets similaires à "correction code vba"