Ajouter un paramètre dans une boucle avec MsgBox
Résolu/Fermé
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
Modifié par Kuartz le 23/07/2015 à 14:33
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 29 juil. 2015 à 15:27
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 29 juil. 2015 à 15:27
A voir également:
- Ajouter un paramètre dans une boucle avec MsgBox
- Paramètre s'arrête systématiquement - Forum Samsung
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? ✓ - Forum Windows
- Netflix paramètre compte - Guide
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Pc s'allume et s'éteint en boucle - Forum Matériel informatique
8 réponses
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
Modifié par f894009 le 23/07/2015 à 15:29
Modifié par f894009 le 23/07/2015 à 15:29
Bonjour,
A tester, je n'ai pas vos donnees:
A tester, je n'ai pas vos donnees:
Sub test()
Dim Rollback As Integer, I As Long, DL As Long
DL = Range("B65536").End(xlUp).Row
If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then
For I = 13 To DL
If (Sheets(1).Range("D" & I) = "RAN" Or Sheets(1).Range("D" & I) = "OD") And Left(Sheets(1).Range("B" & I), 3) <> 403 Then
'Sheets(1).Range("B" & I).Select
retval = MsgBox("Le fournisseur suivant (tiers : " & Range("B" & I) & " ) est-il soumis à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits")
If retval = vbYes Then
memtiers = Sheets(1).Range("B" & I)
NT = I
Do While Sheets(1).Range("B" & NT) = memtiers
If (Sheets(1).Range("D" & I) = "RAN" Or Sheets(1).Range("D" & I) = "OD") And Left(Sheets(1).Range("B" & I), 3) <> 403 Then
Sheets(1).Range("N" & NT) = Sheets(1).Range("K" & NT)
NT = NT + 1
End If
Loop
'Rollback = I '?????????????????
I = NT - 1
ElseIf retval = vbNo Then Sheets(1).Range("N" & I) = "": Rollback = I
ElseIf retval = vbCancel Then
If MsgBox("Faite ok pour revenir à la facture : (tiers : " & Range("B" & Rollback) & " ) ou cancel pour annuler", vbOKCancel, "Confirmer le choix") = vbOK Then
I = Rollback - 1
Sheets(1).Range("N" & Rollback) = ""
Else
Exit For
End If
End If
End If
Next I
End If
End Sub
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
25 juil. 2015 à 14:48
25 juil. 2015 à 14:48
Bonjour,
A tester:
https://www.cjoint.com/c/EGzmWqwbX8f
A tester:
https://www.cjoint.com/c/EGzmWqwbX8f
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
27 juil. 2015 à 08:56
27 juil. 2015 à 08:56
Bonjour,
Je pense qu'on est pas loin de la vérité. Mais le bouton annuler est fait pour aux cellules que l'on a remplit juste avant. Or, si vous essayez la macro et que vous faites "annuler" puis "ok", on ne revient pas à la ligne précédente. Si vous voulez le but, c'est que j'ai 1000 lignes à vérifier comme ça. Si je me plante en cliquant trop vite sur OK, je veux pouvoir revenir à "l'événement" d'avant.
Merci de votre aide en tout cas.
Je pense qu'on est pas loin de la vérité. Mais le bouton annuler est fait pour aux cellules que l'on a remplit juste avant. Or, si vous essayez la macro et que vous faites "annuler" puis "ok", on ne revient pas à la ligne précédente. Si vous voulez le but, c'est que j'ai 1000 lignes à vérifier comme ça. Si je me plante en cliquant trop vite sur OK, je veux pouvoir revenir à "l'événement" d'avant.
Merci de votre aide en tout cas.
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
27 juil. 2015 à 10:51
27 juil. 2015 à 10:51
Bonjour,
Vous demandez de faire un traitement par lot de "tiers" et vous voulez revenir a une ligne !!
Vous pourriez mettre un fichier a dispo un peu plus complets avec des tiers differents que je vois comment c'est empiler ??
Vous demandez de faire un traitement par lot de "tiers" et vous voulez revenir a une ligne !!
Vous pourriez mettre un fichier a dispo un peu plus complets avec des tiers differents que je vois comment c'est empiler ??
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
Modifié par Kuartz le 27/07/2015 à 11:05
Modifié par Kuartz le 27/07/2015 à 11:05
Vous avez raison. Je veux faire un traitement par lot de tiers. Et revenir au tiers précédent. Sauf que là, le code ne revient pas au tiers précédent. Je met OUI pour un tiers, le code remplit la colonne concernée pour ce tiers. Je me suis trompé. Je veux revenir à ce même tiers et mettre NON cette fois pour que la colonne concernée pour ce tiers n'affiche rien.
Je vous fais un fichier complet, le temps de l'anonymer. Il y a un avantage, c'est que les tiers sont triés. Il n'y en aura pas ailleurs dans la feuille. Je vous fais ça rapidement.
Je vous fais un fichier complet, le temps de l'anonymer. Il y a un avantage, c'est que les tiers sont triés. Il n'y en aura pas ailleurs dans la feuille. Je vous fais ça rapidement.
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
>
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
Modifié par Kuartz le 27/07/2015 à 11:27
Modifié par Kuartz le 27/07/2015 à 11:27
Nouveau fichier : https://www.cjoint.com/c/EGBjzEygZff
Attention : Les AAAAA au début n'ont pas le même nombre de lettres qu'à la fin, ce ne sont pas les mêmes tiers (désolé, défaut d'imagination...)
Attention : Les AAAAA au début n'ont pas le même nombre de lettres qu'à la fin, ce ne sont pas les mêmes tiers (désolé, défaut d'imagination...)
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
>
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
27 juil. 2015 à 11:32
27 juil. 2015 à 11:32
Re,
Je recupere le fichier et le pense (un ton en dessous de j'imagine) avoir trouver
Je recupere le fichier et le pense (un ton en dessous de j'imagine) avoir trouver
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
Modifié par Kuartz le 27/07/2015 à 11:36
Modifié par Kuartz le 27/07/2015 à 11:36
Je vais essayer de faire très mathématique comme demande.
Soit en colonne B le nom du tiers.
Soit en colonne N, la TVA sur les débits.
Soit en colonne D, le code journal (ACH, RAN, OD, ...)
Si colonne D = RAN ou OD alors MsgBox "le Tiers "colonne D" est-il soummis à la TVA sur les débits?"
Si OUI : Remplir toutes les cellules de la colonne N dont le tiers en colonne D est celui en question en faisant le calcul N = K.
Si NON : Ne rien mettre dans toutes les cellules de la colonne N dont le tiers en colonne D est celui en question.
Si ANNULER : Nouvelle MsgBox
- Si OK : Revenir à "l'événement précédent", c'est à dire à la vérification du tiers précédent. En gros revenir à la MsgBox d'avant.
- Si ANNULER : Passer à la suite du code en quittant la vérification de la TVA sur les débits.
Si ce n'est pas clair, n'hésitez pas à me dire ce qui ne l'est pas.
Merci encore.
Soit en colonne B le nom du tiers.
Soit en colonne N, la TVA sur les débits.
Soit en colonne D, le code journal (ACH, RAN, OD, ...)
Si colonne D = RAN ou OD alors MsgBox "le Tiers "colonne D" est-il soummis à la TVA sur les débits?"
Si OUI : Remplir toutes les cellules de la colonne N dont le tiers en colonne D est celui en question en faisant le calcul N = K.
Si NON : Ne rien mettre dans toutes les cellules de la colonne N dont le tiers en colonne D est celui en question.
Si ANNULER : Nouvelle MsgBox
- Si OK : Revenir à "l'événement précédent", c'est à dire à la vérification du tiers précédent. En gros revenir à la MsgBox d'avant.
- Si ANNULER : Passer à la suite du code en quittant la vérification de la TVA sur les débits.
Si ce n'est pas clair, n'hésitez pas à me dire ce qui ne l'est pas.
Merci encore.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
27 juil. 2015 à 11:47
27 juil. 2015 à 11:47
Re,
testez ce fichier: https://www.cjoint.com/c/EGBjTTSkMXf
ou j'ai colle l'onglet de celui que vous avez envoye sans mot de passe pour le VBA
testez ce fichier: https://www.cjoint.com/c/EGBjTTSkMXf
ou j'ai colle l'onglet de celui que vous avez envoye sans mot de passe pour le VBA
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
27 juil. 2015 à 12:03
27 juil. 2015 à 12:03
Quelle macro dois-je tester?
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
Modifié par Kuartz le 27/07/2015 à 14:31
Modifié par Kuartz le 27/07/2015 à 14:31
Si vous testez la macro TEST, répondez non jusqu'au tiers CCCCCC. Là, répondez oui, puis annulez, puis OK et là on revient au tiers d'avant. Ca fonctionne. Là répondez non, seule la première ligne du tiers CCCCCC s'est effacée...
Pourtant, si je me penche sur votre code, il ne devrait pas se comporter comme ça. Puisque le Do While est bien présent également sur le le retval No...
Pourtant, si je me penche sur votre code, il ne devrait pas se comporter comme ça. Puisque le Do While est bien présent également sur le le retval No...
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
>
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
27 juil. 2015 à 15:42
27 juil. 2015 à 15:42
Re,
Y a bien deux lignes avec CCCCC mais une seule avec RAN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Y a bien deux lignes avec CCCCC mais une seule avec RAN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
Modifié par Kuartz le 27/07/2015 à 16:10
Modifié par Kuartz le 27/07/2015 à 16:10
Pardon je viens de dire une bêtise. Tout marche niquel comme je voulais bravo :)
Après retest, effectivement les lignes dont le tiers est le même s'effacent bien toute si je reviens en arrière et que je fais "NON".
Merci infiniement. Il me reste maintenant à adapter un MsgBoxPerso là dessus. Je vais essayer.
J'utilise http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=58
Après retest, effectivement les lignes dont le tiers est le même s'effacent bien toute si je reviens en arrière et que je fais "NON".
Merci infiniement. Il me reste maintenant à adapter un MsgBoxPerso là dessus. Je vais essayer.
J'utilise http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=58
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
>
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
27 juil. 2015 à 16:26
27 juil. 2015 à 16:26
J'essaye mais ça ne marche pas du tout....
Je sais pas comment adapter le truc dans "majour_Debits". Comment je peux traduire : "If retval <> vbyes Then" avec la méthode du Select Case?
Sub TEST()
Dim DL As Long
DL = Range("A65536").End(xlUp).Row
Dim Rollback As Integer, memligne As Long
If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then
For I = 13 To DL
Rollback = I
Sheets(1).Range("B" & I).Select
If (Sheets(1).Range("D" & I) = "RAN" Or Sheets(1).Range("D" & I) = "OD") And Left(Sheets(1).Range("B" & I), 3) <> 403 Then
memtiers = Sheets(1).Range("B" & I)
retval = MsgBoxPerso("Le fournisseur suivant (tiers : " & Range("B" & I) & " ) est-il soumis à TVA sur les débits?", "Vérif TVA débits", vQuestion, "Oui|Non|Tiers précédent|Arrêter la vérif")
Select Case retval
Case 1
memligne = I
NT = I
Call majour_Debits(NT, I, retval, memtiers, memligne, Rollback)
Case 2
NT = I
Call majour_Debits(NT, I, retval, memtiers, memligne, Rollback)
Case 3
If memligne > 0 Then
I = memligne
NT = I
Call majour_Debits(NT, I, retval, memtiers, memligne, Rollback)
End If
Case 4
Exit For
End Select
End If
Next I
End If
End Sub
Sub majour_Debits(NT, I, retval, memtiers, memligne, Rollback)
Application.ScreenUpdating = False
Do While Sheets(1).Range("B" & NT) = memtiers
If (Sheets(1).Range("D" & NT) = "RAN" Or Sheets(1).Range("D" & NT) = "OD") And Left(Sheets(1).Range("B" & NT), 3) <> 403 Then
If retval <> vbYes Then
Sheets(1).Range("N" & NT) = ""
Else
Sheets(1).Range("N" & NT) = Sheets(1).Range("K" & NT)
End If
End If
NT = NT + 1
Loop
I = NT - 1
Rollback = I
Application.ScreenUpdating = True
End Sub
Je sais pas comment adapter le truc dans "majour_Debits". Comment je peux traduire : "If retval <> vbyes Then" avec la méthode du Select Case?
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
Modifié par f894009 le 27/07/2015 à 18:44
Modifié par f894009 le 27/07/2015 à 18:44
Re,
manquait le
et du coup, un end if en trop avant le next
https://www.cjoint.com/c/EGBqRtBTUkf
retestez tout
If memligne > 0 Then
manquait le
end if
et du coup, un end if en trop avant le next
https://www.cjoint.com/c/EGBqRtBTUkf
retestez tout
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
28 juil. 2015 à 08:56
28 juil. 2015 à 08:56
Bravo, bravo, bravo. Enfin, tout marche :) Que ça fait plaisir !
Allez je vous embête encore avec 2 petites questions :
1:/ Est-il possible de faire en sorte que si je fasse tiers précédent sur le premier tiers, le code me fasse rester sur cette première ligne, ce qui serait logique. (Pas de prise de tête, si c'est trop compliqué, vous me le dites, je laisse tomber)
2:/ Un peu plus important : Est-il possible de recentrer ma MsgBoxPerso au milieu de l'écran quand elle apparaît? Parce que bon, je suis en double écran et elle apparaît sur l'autre écran...
Merci encore pour votre aide.
Allez je vous embête encore avec 2 petites questions :
1:/ Est-il possible de faire en sorte que si je fasse tiers précédent sur le premier tiers, le code me fasse rester sur cette première ligne, ce qui serait logique. (Pas de prise de tête, si c'est trop compliqué, vous me le dites, je laisse tomber)
2:/ Un peu plus important : Est-il possible de recentrer ma MsgBoxPerso au milieu de l'écran quand elle apparaît? Parce que bon, je suis en double écran et elle apparaît sur l'autre écran...
Merci encore pour votre aide.
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
>
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
Modifié par f894009 le 28/07/2015 à 09:26
Modifié par f894009 le 28/07/2015 à 09:26
Bonjour,
1/ oui
2/ oui
fichier modifie, la position de la msgboxperso est donnee par des parametres dans l'appel de la fonction: https://www.cjoint.com/c/EGChz5MBnSf
1/ oui
2/ oui
fichier modifie, la position de la msgboxperso est donnee par des parametres dans l'appel de la fonction: https://www.cjoint.com/c/EGChz5MBnSf
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
Modifié par Kuartz le 28/07/2015 à 09:29
Modifié par Kuartz le 28/07/2015 à 09:29
Merci beaucoup :) Je teste.
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
28 juil. 2015 à 09:32
28 juil. 2015 à 09:32
La MsgBox apparaît toujours sur mon deuxième écran... Ca c'est vraiment lourd... Mais je ne pense pas qu'on puisse y faire grand chose. Certes, elle apparaît centrée mais sur le deuxième écran...
Je vous remercie vraiment énormément pour tout ce que vous m'avez appris et pour l'immense aide apportée ainsi que pour le temps passé à ça.
Je passe le sujet en résolu. Encore merci !
Je vous remercie vraiment énormément pour tout ce que vous m'avez appris et pour l'immense aide apportée ainsi que pour le temps passé à ça.
Je passe le sujet en résolu. Encore merci !
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
28 juil. 2015 à 09:41
28 juil. 2015 à 09:41
Je suis vraiment désolé, j'ai encore trouvé une erreur :s
Si vous répondez non à la MsgBox, et que vous répondez "Tiers précédent" à la MsgBox suivante, le code revient au tiers précédent dont on a répondu Oui à la MsgBox.
En gros, si la colonne N n'a pas été remplie, le code ne le considère pas comme un tiers où l'on peut revenir.
Si vous répondez non à la MsgBox, et que vous répondez "Tiers précédent" à la MsgBox suivante, le code revient au tiers précédent dont on a répondu Oui à la MsgBox.
En gros, si la colonne N n'a pas été remplie, le code ne le considère pas comme un tiers où l'on peut revenir.
f894009
Messages postés
16904
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 mars 2023
1 678
28 juil. 2015 à 10:28
28 juil. 2015 à 10:28
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
28 juil. 2015 à 10:29
28 juil. 2015 à 10:29
Bravo :)
Cette fois tout est parfait.
Merci :)
Bonne continuation !
Cette fois tout est parfait.
Merci :)
Bonne continuation !
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
29 juil. 2015 à 09:37
29 juil. 2015 à 09:37
Bonjour,
Je ne comprend pas trop là... Hier tout marchait parfaitement. Aujourd'hui, je fais "Tiers précédent" j'obtiens "Erreur définie par l'application ou par l'objet"...
Des idées?
Je ne comprend pas trop là... Hier tout marchait parfaitement. Aujourd'hui, je fais "Tiers précédent" j'obtiens "Erreur définie par l'application ou par l'objet"...
Des idées?
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
59
29 juil. 2015 à 15:27
29 juil. 2015 à 15:27
OK donc parfois le programme marche mais très souvent, j'obtiens "erreur définie par l'application ou par l'objet" en faisant "Tiers précédent".
23 juil. 2015 à 15:39
Après avoir testé, le code marche plutôt bien à 2 détails près.
1:/ La ligne Sheets(1).Range("B" & I).Select était utile car elle permet tout au long du code de suivre les lignes concernées en sélectionnant la cellule. Il faut avoir l'impression de parcourir la feuille avec l'écran qui suit. (certaines lignes sont parfois spéciales, le tiers seul ne suffit pas).
2:/Les lignes suivantes se remplissent en effet si le tiers est le même. Cependant, il aurait fallut que seules les lignes suivantes dont le tiers est le même ET dont la colonne D = "RAN" ou "OD" se remplissent.
Merci 1000 fois pour votre aide en tout cas.
Cordialement.
Modifié par f894009 le 23/07/2015 à 15:47
Do While Sheets(1).Range("B" & NT) = memtiersvous entrez dans la boucle si tiers egauxet cette ligne dans le doit correspondre a votre demande, c'est la meme qu'au debut:
If (Sheets(1).Range("D" & I) = "RAN" Or Sheets(1).Range("D" & I) = "OD") And Left(Sheets(1).Range("B" & I), 3) <> 403 Then23 juil. 2015 à 16:07
23 juil. 2015 à 16:17
Vous constaterez que même si il n'y a pas RAN ou OD devant l'écriture, les cases se remplissent quand même si je répond OUI.
23 juil. 2015 à 17:49
Eh oui, je n'ai pas entierement modifie la fameuse ligne:
If (Sheets(1).Range("D" & I) = "RAN" Or Sheets(1).Range("D" & I) = "OD") And Left(Sheets(1).Range("B" & I), 3) <> 403 Thenalors que c'est comme ca vu que je change de pointeur:
If (Sheets(1).Range("D" & NT) = "RAN" Or Sheets(1).Range("D" & NT) = "OD") And Left(Sheets(1).Range("B" & NT), 3) <> 403 Then