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 SubBonjour L-Yann
Grand merci du cadeau
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