XL 2010 Transfert de quantité

issam salem

XLDnaute Junior
Bonjour;

Alors j'ai un projet de gestion du stock, je veux faire une option de transfert du stock entre magasin (voir photo userforme transfert) à partir de tableau inventaire (photo inventaire)
J’ai commencé a programmé le userforme transfert par exemple le remplit de combobox le recherche par magasin (code article+prévenance) etc...
Actuellement je veux programmé le commandeboutton transfert du stock (voir photo userforme transfert) pour le but de transfert la quantité transférée saisie sur le textbox de prévenance sélectionner vers la destination sélectionnes avec bien sur le mise à jour du quantité

Exemple sur photo userforme transfert:

J’ai le code article SM004.0032 de prévenance TE01 avec un stock prévenance de 200 kg, et la destination KH01
Alors je veux transferer la quantité 25 kg sur la destination KH01 avec la mise ajour sur le tableau inventaire
Alors le résultat fini c'est
Le stock actuel d'article SM004.0032 de magasin TE01 sera 200-25=175
Et le stock actuel d'article SM004.0032 de magasin kh01 sera 25 (la quantité transférée)
 

Pièces jointes

  • Capture userforme transfert.PNG
    Capture userforme transfert.PNG
    107 KB · Affichages: 197
  • Capture inventaire.PNG
    Capture inventaire.PNG
    70.6 KB · Affichages: 51

soan

XLDnaute Barbatruc
Inactif
merci pour tes infos sur la manip à effectuer ; pour ça, c'est OK. :)

---------------------------------------------------------------------------------------

quand y'a un transfert, tu le fais sans modifier les feuilles "Entrées" et "Sorties" ?

si oui, tout ce qui ci-dessous est sur la feuille "Inventaire" :

tu modifies directement le Stock initial : 330 - 25 = 305
donc Stock actuel = C4 + J4 - K4 = 305 + 20 - 150 = 175

exact ? et pour la destination du transfert :

si une ligne existe déjà, on ajoute la quantité transférée de 25 ;
sinon, faut ajouter une nouvelle ligne ; ici ce sera en ligne 11.

exact aussi ? à confirmer.

en attente de ta confirmation, ou de plus d'infos.


soan
 

issam salem

XLDnaute Junior
Ouii Presque!!!
c'est juste c'est pas le stock initial que je modifies directement
c'est le stock actuel c'est comme diviser la quantité de stock article SM004.0032 en deux magasin: 175 sur TE01 et 25 sur KH01 voir exemple ci-joint.
pour bien compris mon problème c'est comme le transfert d'un stock de magasin a l'autre.
dans mon exemple je veux transférer 25kg d'article ELECTRODE SM004.0032 de magasin TE01 a KH01.
 

Pièces jointes

  • Capture inventaire 2.PNG
    Capture inventaire 2.PNG
    55.9 KB · Affichages: 8

soan

XLDnaute Barbatruc
Inactif
Bonjour issam,

j'ai bien compris c'qu'il faut faire, mais y'a un très gros boulot à faire !

* j'ai déjà terminé les 2 premières parties (qui étaient très longues) ;
t'en n'avais pas parlé, et c'est en plus ; ce sera 2 bonnes surprises !

* j'ai commencé la 3ème partie (ça va aussi être très long à faire) ;
c'est ce que tu as demandé, avec quelques trucs en plus.

dans le post #19 ci-dessous, on va déjà voir la 1ère partie.


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@issam salem (lis d'abord mon post #18 ci-dessus)

1ère partie : les très nombreuses vérifications du UserForm "Transfer"

fichier Excel : https://mon-partage.fr/f/Ze76tGMX/

sur la feuille de calcul "Transfert", clique sur ton bouton avec « double-flèche dans
un cercle » pour ouvrir le UserForm ; comme avant, il y a automatiquement :

* la date d'aujourd'hui : « 06/11/20 »
* le 1er item de la liste "Code article :" : « Code article »
* le 1er item de la liste "Provenance :" : « Magasin »

Image 1.jpg


au fait, tu avais mis : « Prévenance » ; ne confond pas avec « Provenance » !


Image 2.jpg

c'est pour « Prévenance : » tout court , et aussi pour « Stock prévenance : » ;
j'relève cette faute d'orthographe pour que t'aies un formulaire correct. ;)

sans avoir rien changé sur le formulaire, clique sur le bouton « Transfert du stock »
(que j'appellerai plus tard « bouton bas », juste pour abréger)


1er message d'erreur :

Image 3.jpg


normal, n'est-ce pas ? puisque le 1er item « Code article » est juste pour info,
c'est pas un Code article valable.

sélectionne « SM004.0032 » ; juste en dessous, pour « Provenance : », ça met
automatiquement « TE01 » : ok ; clique sur bouton bas ; 2ème erreur :


Image 4.jpg


la ligne qui est entre parenthèses est là car il y a un autre bouton bleu recherche,
plus petit : c'est celui qui est juste à droite de « Code article : », et qui fait autre
chose : fenêtre « Recherche dans l'inventaire » (c'bouton-là, j'm'en occupe pas).

clique sur le bon bouton bleu « Recherche » (oui, celui du coin supérieur droit !)
➯ sous « TE01 », c'est ok : ça complète comme il faut :


Image 5.jpg


clique sur bouton bas : y'a une 3ème erreur possible, mais invisible ici, c'est si
« Stock Provenance : » est non pas à 200 mais à 0 ; dans ce cas, bien sûr, on ne
pourrait rien enlever du stock ! d'où l'erreur suivante, seulement s'il y avait 0 :
« Stock provenance vide => retrait impossible ! ».

par contre, comme « Destination : » est vide, il y a cette 4ème erreur :


Image 6.jpg


donc sélectionne un Magasin de destination, par exemple : « TE01 » ; oui, je sais,
c'est stupide, mais faut quand même penser que l'utilisateur final peut le faire ;
clique sur bouton bas ; 5ème erreur :


Image 7.jpg


sélectionne maintenant « KH01 » ; clique sur bouton bas ; on en vient enfin
aux erreurs concernant « Quantité transférée : » ; comme ce champ est vide,
la 6ème erreur est :


Image 8.jpg


la Quantité doit être un nombre entier non nul, donc : a) si tu as saisi un nombre
fractionnaire avec le séparateur décimal virgule « , » ou point « . » ; ou b) si tu
as saisi 0 ; ou c) si tu as saisi un texte (avec ou sans « , » ou « . ») ; alors dans les
3 cas, même 7ème erreur :


Image 9.jpg


lorsque ce message est affiché, tu vois encore ta saisie sur le UserForm ; puis dès
que tu cliques sur le bouton OK, ça efface la saisie invalide, et le focus va sur le
champ de la Quantité ➯ c'est prêt pour une nouvelle saisie, sans que tu doives
t'embêter à effacer l'ancienne saisie non valide.

maintenant, saisis « 201 » et clique sur bouton bas ; eh oui, dès que le nombre
est supérieur à la Quantité du Stock Provenance (ici « 200 »), 8ème erreur :


Image 10.jpg


là aussi, la saisie invalide est ensuite effacée.

y'a une erreur que j'ai pas testée, car faudrait ajouter une gestion d'erreur,
c'est si le nombre saisi est supérieur à la valeur maxi d'un entier Long,
donc supérieur à 2 147 483 647 ; à toi de voir si tu veux l'ajouter ou non.


-------------------------------------------------------------------------------------------

dans le code VBA du UserForm "Transfer" :

* j'ai supprimé ce que tu avais mis ci-dessous :

VB:
Private Sub Qtepre_Change()


End Sub

Private Sub Quantitetr_AfterUpdate()
Dim Message As String, Réponse As Integer

If Not IsNumeric(Me.Quantitetr.Value) Or Not Len(Me.Quantitetr.Value) > 0 Then
    Message = "Veuillez entrer une quantité valide !"
    Réponse = MsgBox(Message, vbOKOnly + vbInformation, "Controle de saisie")
    Me.Quantitetr.SetFocus
End If

End Sub

Private Sub Quantitetr_Change()
Dim Message As String, Réponse As Integer
If Val(Me.Quantitetr.Value) > Val(Me.stocktr.Caption) Then
        Message = "Quantité supérieure au stock actuel !"
        Réponse = MsgBox(Message, vbOKOnly + vbInformation, "Controle de saisie")
            Quantitetr.Value = ""
        Exit Sub
    End If
End Sub
* et voici ta nouvelle sub du bouton "Transfert du stock" :
VB:
Private Sub CommandButton1_Click()
  If CB_Pièce = "Code article" Then MsgBox "Veuillez choisir un Code article.": Exit Sub
  If catetr = "" Or Desitr = "" Or reftr = "" Then MsgBox "Veuillez cliquer sur le bouton bleu « Recherche »." _
    & vbLf & vbLf & "(dans le coin supérieur droit du formulaire)": Exit Sub
  If Val(stocktr) = 0 Then MsgBox "Stock provenance vide => retrait impossible !": Exit Sub
  If ComboBox2 = "" Then MsgBox "Veuillez choisir un Magasin de destination.": Exit Sub
  If ComboBox2 = ComboBox1 Then MsgBox "Le Magasin de destination doit être différent de la provenance.": Exit Sub
  Dim T$, Qté&, chn$, b As Byte: T = "Contrôle Quantité"
  chn = Quantitetr: If chn = "" Then MsgBox "Veuillez saisir une Quantité.", 64, T: Quantitetr.SetFocus: Exit Sub
  chn = Replace$(chn, ",", "."): If InStr(chn, ".") > 0 Then b = 1 'ni « , » ni « . » car Qté : nombre entier !
  Qté = Val(chn): If Qté = 0 Then b = 1 'si chn est du texte ou 0, alors Qté = 0 => refusé !
  If b = 1 Then
    MsgBox "Veuillez entrer une quantité valide !", 64, T
    Quantitetr = "": Quantitetr.SetFocus: Exit Sub
  End If
  If Qté > Val(stocktr.Caption) Then
    MsgBox "Quantité supérieure au stock actuel !", 64, T
    Quantitetr = "": Quantitetr.SetFocus: Exit Sub
  End If
End Sub
alors, ton avis ? ;)

soan
 

soan

XLDnaute Barbatruc
Inactif
@issam salem (lis d'abord mon post #19 ci-dessus)

2ème partie : le Tableau de la feuille "Transfert"

fichier Excel précédent complété : https://mon-partage.fr/f/ZzJm2Bru/

avec ce que t'avais fait, y'avait qu'la Quantité transférée qui était notée
dans ce tableau ! :confused: (pas terrible, mais j'comprends : c'était « en chantier » ! ;))

j'ai bien compris qu'il y a une seule ligne par transfert ; exemple
où tu as d'abord saisi des données correctes dans le UserForm :


Image 1.jpg


quand tu cliques sur bouton bas : cette fois, y'a aucune erreur ! ;) le formulaire reste affiché :
c'est prêt pour la saisie d'un nouveau transfert. :) (à part la « Quantité transférée », rien n'est effacé
car il s'agit juste de sélectionner l'item voulu dans une liste, et de cliquer sur le gros bouton bleu « Recherche »
au moment adéquat)
; résultat sur la feuille de calcul :


Image 2.jpg


est-ce que c'est bien 200 à la fois pour "Stock actuel" et "STOCK PR" ? si oui :
ça fait doublon ! peut-être serait-ce mieux d'en enlever un ? si oui, lequel ?

mais si tu préfères laisser les 2, j'comprends aussi : le 1er 200 en colonne plus
proche du bord gauche de l'écran et avec l'en-tête plus clair "Stock actuel" ;
le 2ème 200 avec l'en-tête "STOCK PR" et juste à gauche de "STOCK DES".
(et même, de ces 2 points d'vue, c'est une bonne idée ! :))


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

je ne sais pas comment tu remplis "STOCK DES" ; j'ai noté qu'il n'est pas sur
le UserForm "Transfer" ; j'te laisse remplacer dans la macro le "?" par c'qui
est nécessaire. ;) (j'ai pas trop envie d'chercher ça ! :rolleyes:)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

à toi d'faire les modifs adéquates, mais juste pour info, si tu peux m'dire
c'que t'auras fait.

--------------------------------------------------------------------------------------

1ère ligne du tableau : 4 : ok ; ligne bleue en ligne 24 ➯ ligne maxi : 23
➯ au transfert qui s'ra après écriture de la ligne 23 , message d'erreur :
« Le tableau en feuille Transfert est plein ! » (et ça écrira rien du tout !)


--------------------------------------------------------------------------------------

j't'ai un peu moins gâté qu'dans mon post précédent : y'a seulement 2 images
au lieu de 10 ! :p ;) (ça va, pas trop déçu ? t'inquiètes pas, ça s'ra bientôt Noël ! 😊)


--------------------------------------------------------------------------------------

code VBA :

VB:
Private Sub LigneTransfert()
  'remplir une ligne sur le tableau de la feuille "Transfert",
  'mais s'il n'y a plus de ligne libre, on ne fait rien !
  Dim lig&: Worksheets("Transfert").Select
  lig = Cells(Rows.Count, 1).End(3).Row + 1
  If lig = 24 Then '24 = n° de la ligne en bleu clair (en bas)
    MsgBox "Le tableau en feuille Transfert est plein !", 48
    Exit Sub 'on fait rien du tout, et on sort de la sub !
  End If
  With Cells(lig, 1)
    .Value = CB_Pièce          'Code article
    .Offset(, 1) = catetr      'Catégorie
    .Offset(, 2) = Desitr      'Désignation
    .Offset(, 3) = reftr       'Référence
    .Offset(, 4) = stocktr     'Stock actuel
    .Offset(, 5) = unitr       'Unité
    .Offset(, 6) = Date        'Date
    .Offset(, 7) = ComboBox1   'Provenance
    .Offset(, 8) = ComboBox2   'Destination
    .Offset(, 9) = Quantitetr  'Quantité transférée
    .Offset(, 10) = stocktr    'STOCK PR
    .Offset(, 11) = "?"        'STOCK DES
  End With
End Sub
là aussi, n'oublie pas de m'donner ton avis. ;)

soan
 

salem.b

XLDnaute Nouveau
il me reste une chose plus important lorsque en click sur bouton "Transfert du stock" c'est la mise a jour du stock actuel sur le tableau inventaire comme ca
c a dire en modifier le socke actuel de 200 kg a TE01 et mise a jour avec les nouvelles quantitées de 175 sur magasin TE01 et 25 sur KH01
Capture inventaire 2.PNG


est ce que vous aves une idée et merci encore une autre fois c'est le troisième partie non???
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour issam,

j'ai vu que tu as changé de pseudo : de « issam salem » à « salem.b ». ;)
(mais j'ai déjà pris l'habitude de t'appeler issam)

dans ton code VBA du UserForm Transfer, tu as 7 subs vides, donc inutiles car elles
ne font rien ; les voici (j'ai juste enlevé les lignes vides qui sont entre Private Sub
et End Sub pour que dans ce post ça prenne moins de place en hauteur) :


VB:
Private Sub ComboBox1_Initialize()
End Sub

Private Sub ComboBox1_AfterUpdate()
End Sub

Private Sub ComboBox1_Click()
End Sub

Private Sub ComboBox1_Change()
End Sub

Private Sub Datetr_Change()
End Sub

Private Sub Label10_Click()
End Sub

Private Sub Qtepre_Change()
End Sub

tu peux toutes les supprimer !

soan
 

soan

XLDnaute Barbatruc
Inactif
voici ta sub Bouton_Recherche_Pièce_Click() :
VB:
Private Sub Bouton_Recherche_Pièce_Click()
ModeSaisieAuto = "Pièce Transfer"
UF_Saisie_Auto.Caption = "Recherche dans l'inventaire"
UF_Saisie_Auto.TB_Texte.Text = ""
UF_Saisie_Auto.Show
End Sub
je l'ai réécrite ainsi (en ajoutant Option Explicit en 1ère ligne
du module de ce UserForm, donc tout en haut de la page) :

VB:
Option Explicit

Private Sub Bouton_Recherche_Pièce_Click()
  ModeSaisieAuto = "Pièce Transfer"
  With UF_Saisie_Auto
    .Caption = "Recherche dans l'inventaire": .TB_Texte = "": .Show
  End With
End Sub
soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
pour ce qu'on va voir dans le post suivant, tu dois d'abord faire ces 2 choses :

1) voici ta sub CB_Pièce_AfterUpdate() :

VB:
Private Sub CB_Pièce_AfterUpdate()
Dim Formule, Message As String, Réponse As Integer

'Formule = "=sierreur(RECHERCHEV(" & Chr(34) & Me.CB_Pièce.Value & Chr(34) & "; Liste_Pièces;1;faux); " & Chr(34) & Chr(34) & ")"

If Not Len(Me.CB_Pièce.Value) > 0 Or Me.CB_Pièce.Value = "" Then ' Or Me.CB_Pièce.Value = "Pièce"
    Message = "Veuillez choisir une Pièce valide"
    Réponse = MsgBox(Message, vbOKOnly + vbInformation, "Controle de saisie")
    Me.CB_Pièce.SetFocus
End If

'Formule = "=sierreur(RECHERCHEV(" & Chr(34) & Me.CB_Pièce.Value & Chr(34) & "; Pièces;4;faux);0)"
'Range("Cellule_Travail").FormulaLocal = Formule
'Me.TB_Stock_Actuel.Value = Range("Cellule_Travail").Value

End Sub
ne garde rien, supprime-la entièrement (car sinon, elle va gêner
à cause de certaines interdépendances entre subs).

-------------------------------------------------------------------------

2) dans le menu "Outils / Références..." (raccourci clavier Alt o r),
tu as pour l'instant ceci :


Image 1.jpg


la liste des items non cochés est dans l'ordre alphabétique ; fais défiler vers le bas
pour voir "Microsoft Scripting Runtime", puis sélectionne-le :


Image 2.jpg


ensuite, devant la ligne, coche-le puis clique à droite sur le bouton OK ; bien sûr,
la fenêtre se referme, mais si tu fais de nouveau "Outils / Références", tu auras :


Image 3.jpg


l'item est maintenant en haut, dans la liste des items cochés ; juste après avoir
fait cette vérif, appuie sur la touche Echap pour refermer cette fenêtre.


soan
 

soan

XLDnaute Barbatruc
Inactif
supprime entièrement ta sub UserForm_Initialize() actuelle,
et met celle-ci à la place :

VB:
Private Sub UserForm_Initialize()
  Dim T, d, i&: Application.ScreenUpdating = 0
  Set d = CreateObject("Scripting.Dictionary")
  With Worksheets("Inventaire")
    T = .Range("A3:A" & .Cells(Rows.Count, 1).End(3).Row)
  End With
  Datetr = Date: Mid$(T(1, 1), 5, 1) = " "
  For i = 1 To UBound(T)
    If T(i, 1) <> "" Then d(T(i, 1)) = ""
  Next i
  With CB_Pièce
    .List = d.Keys: .ListIndex = 0: .SetFocus
  End With
  With Worksheets("Compte magasin")
    T = .Range("B2:B" & .Cells(Rows.Count, 2).End(3).Row)
    ComboBox2.List = T
  End With
End Sub
* c'est notamment pour cette instruction qu'on a ajouté la référence
"Microsoft Scripting Runtime" :


Set d = CreateObject("Scripting.Dictionary")

j'ai utilisé l'objet dictionnaire pour créer une liste sans doublons
de "Code article" (donc y'a que des items uniques) ; c'est pour
la liste CB_Pièce.

* la liste ComboBox2 pour les magasins de "Destination" est créée
à partir de la feuille "Compte magasin", colonne B ; comme il n'y
a que des items uniques (pas de doublons), c'est inutile d'utiliser
ici la technique du dictionnaire.

* regarde bien ces 3 lignes de code VBA :

VB:
With CB_Pièce
  .List = d.Keys: .ListIndex = 0: .SetFocus
End With
tu vois .ListIndex = 0 ? il est obligatoire, mais il fait un appel implicite
à la sub CB_Pièce_Change() ; il faudra en tenir compte pour faire en
sorte que la seconde partie de la sub CB_Pièce_Change() ne soit pas
exécutée si l'appel vient de cette sub UserForm_Initialize() ; note :
désactiver les événements d'Excel n'empêche pas l'appel implicite !

c'est aussi cet appel implicite à la sub CB_Pièce_Change() qui va
créer la liste ComboBox1 nécessaire pour l'ouverture du UF :
ce sera une liste contenant le seul item "Magasin".


soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
supprime ta sub CB_Pièce_Change() actuelle,
et met celle-ci à la place :

VB:
Private Sub CB_Pièce_Change()
  With ComboBox1
    .Clear
    If CB_Pièce = "Code article" Then
      .AddItem "Magasin": .ListIndex = 0: Exit Sub
    End If
    Dim T, d&, n&, i&
    With Worksheets("Inventaire")
      d = .Cells(Rows.Count, 1).End(3).Row: If d = 3 Then Exit Sub
      T = .Range("A4:L" & d)
    End With
    For i = 1 To UBound(T)
      If T(i, 1) = CB_Pièce Then .AddItem T(i, 12): n = n + 1
    Next i
    .ListIndex = 0
  End With
End Sub
1) on commence par supprimer la liste ComboBox1, donc à ce stade, la liste
Provenance est vide ; si on est venu ici par l'appel implicite de Initialize(), on
n'a rien supprimé : ComboBox1 était déjà vide ; si c'est l'appel habituel via
un changement de CB_Pièce, alors on a simplement supprimé l'ancienne
liste Provenance (les items de magasins qui n'contenaient pas l'item initial
"Magasin") ; pour l'instant, rappelle-toi juste que ComboBox1 et vide.

2) si CB_Pièce = "Code article", l'appel vient forcément de la sub Initialize() ;
donc comme la liste ComboBox1 est vide, on met l'item "Magasin" et on
quitte la sub, ce qui évite évidemment de faire la suite de cette sub, qui
sera de créer une nouvelle liste ComboBox1 selon CB_Pièce.

3) la suite est donc de créer une liste de magasins Provenance à partir de
la feuille "Inventaire", en lisant chaque ligne successivement ; on ajoute
à la liste la valeur de la cellule L seulement si la valeur de la cellule A est
la même que CB_Pièce (le Code article) ; compte tenu de la gestion de
la future sub qui fera le transfert dans la feuille "Inventaire", il n'y aura
pas de doublon possible, donc inutile d'utiliser ici le dictionnaire.


soan
 

soan

XLDnaute Barbatruc
Inactif
supprime ta sub recherchearticle_Click() actuelle,
et met celle-ci à la place :

VB:
Private Sub recherchearticle_Click()
  If CB_Pièce = "Code article" Then
    MsgBox "Veuillez choisir un Code article.", 64, "Article requis"
    Exit Sub
  End If
  Dim Tbl, dlg&, lig&, flag As Byte
  With ThisWorkbook.Worksheets("Inventaire")
    dlg = .Cells(Rows.Count, 1).End(3).Row: If dlg = 3 Then Exit Sub
    dlg = dlg - 3: Tbl = .Range("A4:L" & dlg)
    For lig = 1 To dlg
      If Tbl(lig, 1) = CB_Pièce Then
        If Tbl(lig, 12) = ComboBox1 Then
          catetr = Tbl(lig, 2)  'Catégorie
          Desitr = Tbl(lig, 6)  'Désignation
          reftr = Tbl(lig, 7)   'Référence
          stocktr = Tbl(lig, 4) 'Stock Provenance
          unitr = Tbl(lig, 8)   'Unité
          flag = 1: Exit For
        End If
      End If
    Next lig
  End With
End Sub
* tu avais mis : "Article non trouvé", mais si CB_Pièce est "Code article", on ne fait pas
de recherche
, et donc ton message est inadéquat ; c'est pourquoi je l'ai remplacé par
"Article requis", car faut obligatoirement un Code article pour faire une recherche
sur CB_Pièce.

* tu avais essayé de faire une partie avec ce message : "Ce code article n'existe pas
dans ce magasin. Veuillez saisir un code valide
" ; mais avec le système de liste actuel,
c'est tout simplement impossible de saisir un code article qui n'existe pas, puisque la
liste des "Code article" de CB_Pièce est crée à partir de la feuille "Inventaire" ; c'était
dans Initialize(), et on avait utilisé le dico pour éviter les doublons.

* note que pour une ligne donnée, il y a d'abord ce test : If Tbl(lig, 1) = CB_Pièce Then
(si cellule A = Code article) puis celui-ci : If Tbl(lig, 12) = ComboBox1 Then (si cellule
L = magasin Provenance) ; ça accélère la recherche vu que le 2ème test n'est jamais
exécuté si le 1er test est faux ; ne réunis pas les 2 tests en un seul en utilisant And,
car alors le 2ème test sera toujours évalué, même si le 1er test est faux
.


soan
 

soan

XLDnaute Barbatruc
Inactif
Pour ma sub CommandButton1_Click() :

* la 1ère ligne était celle-ci :


If CB_Pièce = "Code article" Then MsgBox "Veuillez choisir un Code article.": Exit Sub

j'ai ajouté CB_Pièce.SetFocus juste avant Exit Sub :

... Then MsgBox "Veuillez choisir un Code article.": CB_Pièce.SetFocus: Exit Sub

* j'ai vu qu'il y a quelques erreurs à corriger ; ce sera la prochaine étape (qui sera
un peu longue) ; et c'est seulement quand tout sera ok à ce niveau que j'pourrai
faire la dernière étape : le transfert en feuille "Inventaire" ; impossible de faire
autrement, car tout est lié ! c'est seulement si j'pouvais faire ta demande sans
utiliser le UserForm Transfer que j'aurai pu la faire plus tôt ; donc comme c'est
un passage obligé, il faut reporter à plus tard (mais en quelque sorte, c'est ce
qui s'appelle « reculer pour mieux sauter »).


soan
 

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 401
Membres
103 537
dernier inscrit
alisafred974