Vérif code

Bonjour à tout le forum,

En cours de création d'un petit programme très important pour moi, je me permet de venir vers vous pour une vérification de code SVP, car je n'arrive pas à résoudre le bug de la macro Cmd_Valider au moment d'un nouveau enregistrement.

Cette macro permet de Valider un enregistrement et modifier.

Tout à l'air de fonctionner (modification, supprimer) sauf Valider qui bug et n'arrive pas seul à trouver pourquoi. j'ai chercher toute l'après-midi !!! .

J'espère que quelqu'un pourra m'aider et merci par avance.

Cordialement

Bonsoir,

lors de l'exécution du code la variable "ligne" vaut 0...

Hors Excel n'a pas de ligne 0 !

une petite recherche...

@ bientôt

LouReeD

Au vu du code, il faudrait reprendre l'ensemble des test avant enregistrement.

Voir faire deux Sub différent suivant si c'est une modification ou une création.

Une Variable booléenne qui passe à TRUE lorsque vous cliquez sur "Nouvelle fiche"

et sur le code "Validation" faire un test "d'aiguillage" du type

if Variable = true then

faire le code de création de numéro d'article, trouver la première ligne vide et inscrire les données sur la feuille

else

trouver la ligne de l'article à modifier, faire les modifications

endif

'repasser la variable à FALSE

Variable = FALSE

En effet vos différents test "partent" un peu dans tous les sens....

@ bientôt

LouReeD

Bonsoir LouReeD

Merci de ton aide.

Pour la variable "ligne" c'est bien dans la macro que ça na va pas ? je vois ou !!

Depuis ce matin je la dessus, j'ai les yeux et les neurones qui ont du mal à suivre, désolé.

Je me doutais bien que je partais un peu dans tous les sens, à force d'insister à vouloir faire bien tout, tout seul.

Il faut que je redémarre après le MsgBox "Ne doit jamais arriver" ou de zéro après With WsBase ?

Bonjour,

tiens cadeau! J'ai refait entièrement ta macro de validation. Elle prendra automatiquement en compte les deux cas, ajout et modification.

Et en plus elle est entièrement commentée! Elle est pas belle la vie?

Dit moi si ça tourne comme tu voulais!

Yann

Private Sub Cmd_Valider_Click()

Dim i As Long, j As Long
Dim tabArticles() As Variant
Dim nbLignes As Long

 ' Contrôle les données saisies
  If Me.Txt_Prix = "" Then
    MsgBox "Veuillez renseigner le prix", vbExclamation, strAppName
    Me.Txt_Prix.SetFocus
    Exit Sub
  End If
  If Me.CBx_Type = "" Then
    MsgBox "Veuillez renseigner le type", vbExclamation, strAppName
    Me.CBx_Type.SetFocus
    Exit Sub
  End If

'On compte le nombre de lignes de ta database
nbLignes = ThisWorkbook.Sheets("Article").Range("A65536").End(xlUp).Row
'On charge la totalitée de ta database dans un tableau
tabArticles = ThisWorkbook.Sheets("Article").Range("A1:J" & nbLignes + 1).Value

'Maintenant on travailleras uniquement sur ton tableau, que l'on collera à la fin

'on boucle sur la totalité des lignes pour controler le code article, si on le trouve c'est une modification
'dans le cas contraire c'est un ajout

For i = 1 To nbLignes

If tabArticles(i, 2) = Me.Txt_CodeArt Then
    'Si on arrives ici, c'est que la ref a été trouvée, c'est donc une modification.
    'La ligne a modifier est la ligne i

    ' On fait apparaitre la MsgBox de confirmation:

    If MsgBox("Voulez vous modifier l'enregistrement de " & Me.Txt_CodeArt & " ?", _
    vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub

'Dans le cas ou la réponse est oui, on modifie

    tabArticles(i, 1) = CInt(Me.Txt_NumEnr)
    tabArticles(i, 2) = Me.Txt_CodeArt.Value
    tabArticles(i, 3) = Me.Txt_Prix.Value
    tabArticles(i, 4) = Me.Txt_Designation.Value
    tabArticles(i, 5) = Me.Txt_descriptif.Value
    tabArticles(i, 6) = Me.Txt_Taille.Value
    tabArticles(i, 7) = Me.CBx_Fournisseur.Value
    tabArticles(i, 8) = Me.Txt_Mini.Value
    tabArticles(i, 9) = Me.Txt_Observation.Value
    tabArticles(i, 10) = Me.CBx_Type.Value

    'On a trouvé la ref, On sort de la boucle
    Exit For

End If

Next i

'Arrivé ici, on ne sais pas si la modification a eut lieu ou pas
'On teste la valeur de i
'Si i = nblignes +1 alors la modification n'a pas eu lieu, puisqu'on a pas trouvé la référence
'C'est donc un ajout

If i = nbLignes + 1 Then

    ' On fait apparaitre la MsgBox de confirmation:

    If MsgBox("Voulez vous ajouter l'enregistrement de " & Me.Txt_CodeArt & " ?", _
    vbQuestion + vbYesNo, "Nouvel enregistrement") <> vbYes Then Exit Sub

    'Dans le cas ou la réponse est oui, on modifie

    tabArticles(i, 1) = CInt(Me.Txt_NumEnr)
    tabArticles(i, 2) = Me.Txt_CodeArt.Value
    tabArticles(i, 3) = Me.Txt_Prix.Value
    tabArticles(i, 4) = Me.Txt_Designation.Value
    tabArticles(i, 5) = Me.Txt_descriptif.Value
    tabArticles(i, 6) = Me.Txt_Taille.Value
    tabArticles(i, 7) = Me.CBx_Fournisseur.Value
    tabArticles(i, 8) = Me.Txt_Mini.Value
    tabArticles(i, 9) = Me.Txt_Observation.Value
    tabArticles(i, 10) = Me.CBx_Type.Value

End If

'Arrivé ici, on a pris en compte les deux cas de figures :
'  - Si c'est une modification le tableau est modifié
'  - Si c'est un ajout, la ligne est ajoutée en derniere ligne du tableau

'Il ne reste plus qu'a coller le tableau sur ta database

ThisWorkbook.Sheets("Article").Range("A1:J" & nbLignes + 1).Value = tabArticles

Affiche_Article
Init_Article

'Fin de procédure, on sort

End Sub

Bonjour L-Yann

Grand merci du cadeau , génial tes explications, c'est claire, précis (je comprends mieux le principe de construction de la macro).

je vais la garder très précieusement en exemple.

C'est vrai que j'ai à créer seul les codes (pourtant j'essai et j'essai.), les lire par contre ca va un peu près.

Ce programme est un défis pour moi, car ma direction ma demander d'étudier un catalogue d'habillement avec recherche de fiche par personnel et créer bon de commande par fournisseur.

Ca ne va pas être facile pour moi, mais j'y crois.

Sinon, c'est bien le résultat attendu.

@ bientôt

Merci Yann

Rechercher des sujets similaires à "verif code"