Placer une condition dans ma boucle
bonjour,
Dans le code repris ci-dessous, j'ajoute des lignes dans un feuille suivant que dans feuil6(BD Articles) la colonne M5 à fin de tableau comporte un nombre supérieur à zéro et différent de rien (en fait effectue une commande automatique).
j'aimerai traiter cette commande automatique en tenant compte des commandes en cours. il faudrait pour cela ajouter une double condition avant d'inscrire la ligne:
regarder dans la feuille (feuil1(souffrances)) si le code se trouvant de B2 jusque fin de tableau correspond à un code de la feuil6(BD Articles) se trouvant de A5 à fin de tableau de la ligne que l'on va ajouter
ET
que la cellule de la feuil1(Souffrances) L2 à fin de tableau correspondant à la ligne B2 fin de tableau soit bien vide .
Si répond oui aux deux conditions ajoute la ligne, si répond non à la première condition ajoute la ligne
Merci de votre aide
Option Explicit
Private Sub CommandButton1_Click()
'commande Trimestrielle via bouton dans le menu
Application.CommandBars("Workbook tabs").ShowPopup
Dim wk_fichier As Workbook
Dim ws_feuil1 As Worksheet
Dim ws_feuil2 As Worksheet
Dim lstrw_feuil1 As Long, lstrw_feuil2 As Long
Dim ligne_coller As Long
Dim i As Integer
Dim VariableNom As String
Dim msg, Style, Title, Help, Ctxt, Reponse1, Reponse2, MyString
msg = "Avez-vous effectué la mise à jour avec le listing marchés LOG?" ' Definition du message.
Style = vbOKCancel ' Definition bouton.
Title = "Vérification de mise à jour" ' Definition du titre.
Help = "DEMO.HLP" ' Define Help file.
Ctxt = 2000 ' Define topic context.
Reponse1 = MsgBox(msg, Style, Title, Help, Ctxt)
If Reponse1 = vbCancel Then
Exit Sub
Else
VariableNom = ActiveSheet.Name
msg = "Voulez-vous insérer la Cde pour la période " & VariableNom & "?" ' Definition du message.
Style = vbOKCancel ' Definition bouton.
Title = "CONFIRMATION D'INSERTION DE COMMANDE" ' Definition du titre.
Help = "DEMO.HLP" ' Define Help file.
Ctxt = 2000 ' Define topic context.
Reponse2 = MsgBox(msg, Style, Title, Help, Ctxt)
If Reponse2 = vbCancel Then
Exit Sub
Else
'Partie ou l'on remplit les codes à commander avec les informations de la BD Articles
'définir les variables fichiers et onglets
Set wk_fichier = ActiveWorkbook
Set ws_feuil1 = wk_fichier.Worksheets("BD Articles") '6 entre parenthèse indique la feuille 1 qui est la BD articles
Set ws_feuil2 = ActiveSheet 'onglet période désigné par le choix Application.CommandBars listant les onglets
'identifier dernière ligne colonne A feuil1 (BD ARTICLES)
lstrw_feuil1 = ws_feuil1.Cells(Rows.Count, 1).End(xlUp).Row
'commencer la boucle sur les lignes
For i = 5 To lstrw_feuil1
'identifier le Nbre à commander dans la feuil1 (BD ARTCILES), et si supérieur à zéro, copier coller dans la période de commande désignée (feuille2)
If ws_feuil1.Cells(i, 13) <> "" And ws_feuil1.Cells(i, 13) > 0 Then
'identifier nombre de lignes remplies dans la feuille identifiée par l'onglet actif via Application.CommandBars
lstrw_feuil2 = ws_feuil2.Cells(Rows.Count, 2).End(xlUp).Row
'Définit la variable pour la boucle FOR incrémentée d'une ligne
ligne_coller = lstrw_feuil2 + 1
'copier coller de la BD Articles vers onglet actif selectionnée via Application.CommandBars
ws_feuil2.Cells(ligne_coller, 2) = ws_feuil1.Cells(i, 1)
ws_feuil2.Cells(ligne_coller, 3) = ws_feuil1.Cells(i, 2)
ws_feuil2.Cells(ligne_coller, 4) = ws_feuil1.Cells(i, 7)
ws_feuil2.Cells(ligne_coller, 5) = ws_feuil1.Cells(i, 13)
ws_feuil2.Cells(ligne_coller, 8) = "I"
ws_feuil2.Cells(ligne_coller, 10) = ws_feuil1.Cells(i, 14)
ws_feuil2.Cells(ligne_coller, 13) = ws_feuil1.Cells(i, 15)
ws_feuil2.Cells(ligne_coller, 14) = ws_feuil1.Cells(i, 16)
ws_feuil2.Cells(ligne_coller, 15) = ws_feuil1.Cells(i, 17)
ws_feuil2.Cells(ligne_coller, 16) = ws_feuil1.Cells(i, 18)
ws_feuil2.Cells(ligne_coller, 17) = ws_feuil1.Cells(i, 19)
ws_feuil2.Cells(ligne_coller, 18) = ws_feuil1.Cells(i, 20)
ws_feuil2.Cells(ligne_coller, 19) = ws_feuil1.Cells(i, 21)
ws_feuil2.Cells(ligne_coller, 20) = ws_feuil1.Cells(i, 22)
ws_feuil2.Cells(ligne_coller, 21) = ws_feuil1.Cells(i, 23)
ws_feuil2.Cells(ligne_coller, 22) = ws_feuil1.Cells(i, 24)
With ws_feuil2 'place un lien hypertexte permettant un retour sur l'article plus facile
.Hyperlinks.Add Anchor:=.Cells(ligne_coller, 1), _
Address:="", SubAddress:="'" & VariableNom & "'!A" & ligne_coller, TextToDisplay:=VariableNom
End With
End If 'fin de condition afin de ne créer la ligne que si il y à une commande effective
Next 'suite de la boucle jusqu'au nombres de llignes que comporte la BD Articles (lstrw_feuil1)
End If 'fin de condition assurance de mise à jour fichier log
End If 'Fin de condition assurance d'être dans le bon fichier pour inserer la commande
End Subinfo, pour lancer une commande passer par le menu et sélectionner commande trimestrielle , choisir son trimestre et voila.
du coup le fichier souffrance se met à jour
Merci à vous surtout
Re,
J'espère avoir tout bien cerné
Private Sub CommandButton1_Click()
'commande Trimestrielle via bouton dans le menu
Application.CommandBars("Workbook tabs").ShowPopup
Dim ShtBdD As Worksheet
Dim dLigBdArt As Long, LigBdArt As Long
Dim ShtSouf As Worksheet
Dim dLigSouf As Long, LigSouf As Long
Dim ShtD As Worksheet
Dim nLigD As Long
'
' Poser la question
If MsgBox("Avez-vous effectué la mise à jour avec le listing marchés LOG ?", _
vbOKCancel, "Vérification de mise à jour", "DEMO.HLP", 2000) = vbCancel Then Exit Sub
'
' Sinon
If MsgBox("Voulez-vous insérer la Cde pour la période " & ActiveSheet.Name & "?", _
vbOKCancel, "CONFIRMATION D'INSERTION DE COMMANDE", "DEMO.HLP", 2000) = vbCancel Then Exit Sub
'
' Partie ou l'on remplit les codes à commander avec les informations de la BD Articles
' définir les variables fichiers et onglets
Set ShtBdD = ThisWorkbook.Sheets("BD Articles")
Set ShtSouf = ThisWorkbook.Sheets("Souffrances")
Set ShtD = ActiveSheet 'onglet période désigné par le choix Application.CommandBars listant les onglets
' Dernière ligne de la feuille SOUFFRANCE
dLigBdArt = ShtBdD.Range("A" & Rows.Count).End(xlUp).Row
' Pour chaque ligne de la feuille BD Articles
For LigBdArt = 5 To dLigBdArt
' Si la cellule de colonne M est Null ou = 0, on passe à la ligne suivante
If ShtBdD.Range("M" & LigBdArt) = "" Or ShtBdD.Range("M" & LigBdArt) = 0 Then GoTo SuiteLigne
' Sinon chercher cet article dans la feuille Souffrances
LigSouf = LigArtF(ShtSouf.Range("B" & LigBdArt).Value)
' Si l'article n'a pas été trouvé dans BD Articles, on passe à la ligne suivante
If LigSouf = 0 Then GoTo SuiteLigne
' Sinon, si la cellule de la colonne "L" de la lgine trouvée est vide
If ShtSouf.Range("L" & LigSouf) = "" Then
' Nouvelle ligne dans l'onglet actif
nLigD = ShtD.Cells(Rows.Count, 2).End(xlUp).Row + 1
'copier coller de la BD Articles vers onglet actif selectionnée via Application.CommandBars
ShtD.Cells(nLigD, 2) = ShtBdD.Cells(LigBdArt, 1)
ShtD.Cells(nLigD, 3) = ShtBdD.Cells(LigBdArt, 2)
ShtD.Cells(nLigD, 4) = ShtBdD.Cells(LigBdArt, 7)
ShtD.Cells(nLigD, 5) = ShtBdD.Cells(LigBdArt, 13)
ShtD.Cells(nLigD, 8) = "I"
ShtD.Cells(nLigD, 10) = ShtBdD.Cells(LigBdArt, 14)
ShtD.Cells(nLigD, 13) = ShtBdD.Cells(LigBdArt, 15)
ShtD.Cells(nLigD, 14) = ShtBdD.Cells(LigBdArt, 16)
ShtD.Cells(nLigD, 15) = ShtBdD.Cells(LigBdArt, 17)
ShtD.Cells(nLigD, 16) = ShtBdD.Cells(LigBdArt, 18)
ShtD.Cells(nLigD, 17) = ShtBdD.Cells(LigBdArt, 19)
ShtD.Cells(nLigD, 18) = ShtBdD.Cells(LigBdArt, 20)
ShtD.Cells(nLigD, 19) = ShtBdD.Cells(LigBdArt, 21)
ShtD.Cells(nLigD, 20) = ShtBdD.Cells(LigBdArt, 22)
ShtD.Cells(nLigD, 21) = ShtBdD.Cells(LigBdArt, 23)
ShtD.Cells(nLigD, 22) = ShtBdD.Cells(LigBdArt, 24)
With ShtD 'place un lien hypertexte permettant un retour sur l'article plus facile
.Hyperlinks.Add Anchor:=.Cells(nLigD, 1), _
Address:="", SubAddress:="'" & ShtD.Name & "'!A" & nLigD, TextToDisplay:=ShtD.Name
End With
End If 'fin de condition afin de ne créer la ligne que si il y à une commande effective
SuiteLigne:
Next LigBdArt 'suite de la boucle jusqu'au nombres de llignes que comporte la BD Articles (lstrw_feuil1)
End SubLa fonction LigArtF(CodeArt)
' Fonction pour trouver la ligne de l'article cherché
Function LigArtF(CodeArt As String)
Dim CelF As Range
With ThisWorkbook.Sheets("Souffrances")
Set CelF = .Range("B:B").Find(What:=CodeArt, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False)
End With
If Not CelF Is Nothing Then LigArtF = CelF.Row Else LigArtF = 0
End FunctionEt le fichier
A+
Merci de la rapidite. Je teste cela demain en matinee .
belle soiree
bonjour. Merci pour le code mais à la ligne
Ligsouf = LigArtF jai un code erreur sub ou fonction non definie pour LigArtF....
Bonjour Vuerings,
Désolé
Il y a une fonction qui va avec le code, j'ai tout mis dans ma réponse précédente
A+
bonsoir, après le test du fichier joint avec votre correction, je ne vois pas de changement au résultat...
Pour le tester, il y à déjà une commande trimestrielle en cours (1Trim). la feuille souffrances est un recap des commandes en cours, et rien n'est donc inscrit en direct dedans mais cela vous l'aviez compris.
si je lance une 2Trim via le menu, si une référence est placée dans la colonne "BC" colonne L dans la 1Trim, cette référence ne devrais plus apparaitre en commande dans la 2Trim, alors qu'ici elle y apparait toujours...
Espère avoir expliqué de façon compréhensible, désolé, pas facile
Si je résume, quand on lance une commande trimestrielle, il faut regarder chaque ligne de la feuille BD Articles si en colonne M, un chiffre y est indiqué et, que si cette même référence existe déjà dans l'onglet souffrance et que la case BC n'est pas remplie, alors nous pouvons ajouter la ligne dans la 2Trim, si un BC colonne L est renseigné, cette référence ne doit pas être prise en compte.
Merci de votre aide
Bonjour vuerings,
Alors je n'irais pas par quatre chemins
1) Ce n'est pas ce que vous expliquez dans votre tout 1er post, vous ne parlez que de "BD Articles" et "Souffrances"
2) Dans le fichier joint, il n'y a aucune référence BC dans la colonne "L", donc toutes les lignes sont reprises
Donc résultat, je perds mon temps et je n'aime pas ça
Peut-être qu'un autre contributeur comprendra mieux que moi... perso je laisse tomber (je ne suis pas patient)
à la première condition il va bien dans la BD articles chercher les besoins mais à la deuxième condition si l'article apparaît déjà dans la feuille souffrance et que la colonne bc est remplie l'article ne dois pas être pris en compte. Désolé de ne pas s'être compris
Et je suis daccord que rien nest encore encodé dans la comonne bc mais si il y avait quelqie chose la ligne ne devrais pas se creer
Merci à BRUNO M45, il ne devait pas être loin de la solution, mais....