Pb boucle en VBa avec USF

Fermé
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009 - 17 août 2008 à 13:34
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009 - 25 août 2008 à 12:14
Bonjour,

J'ai un soucis ds un code VBA , et patoge , voila un extrait du code

SaiMTransport:
'
Range("O" & i).Select
Do While MTransp = ""
Load M_TRANSPORT
M_TRANSPORT.Show
If Range("O" & i).Value <> "" Then
GoTo SaiNBRepas
Else
message = MsgBox("LA SAISIE DU MOYEN DE TRANSPORT EST OBLIGATOIRE", vbOKOnly, "FRAIS DE DEPLACEMENT")
End If
Loop
'
SaiNBRepas:
'
Ma valeur i du range est incrementee si l'utilisateur demande la saisie d'une autre ligne , lorsque sur la 2eme ligne j'affiche mon USF avec sa LB , et que je sélectionne une autre valeur que la 1ere ligne , cette valeur en ligne 2 remplace la valeur de la ligne 1 et me met la valeur de la ligne 2 à blanc , et boucle sur l'erreur . Pige pas merci de votre aide. Cordialement GDS35

17 réponses

Salut

dans le module de ton usf "M_TRANSPORT",

il faut remplacer la sub :

Private Sub CommandButton5_Click()
'
Range("O19").Value = ListBox4.Value
Unload M_TRANSPORT
M_TRANSPORT.Hide
'
End Sub

par :

Private Sub CommandButton5_Click()
'
Range("O" & i).Value = ListBox4.Value
Unload M_TRANSPORT
M_TRANSPORT.Hide
'
End Sub
0
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
21 août 2008 à 17:03
Resalut,

Si je remplace : Range("O19").Value = ListBox4.Value
par
Range("O" & i).Value = ListBox4.Value
lors de la saisie , l'USF M_TRANSPORT ne s'affiche plus .

Jy perd mon latin

Merci encore GDS35
-1
bérylion > gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
21 août 2008 à 21:25
????

YAPA de raison, ça n'a aucun rapport.

t'as rien modifié d'autre ?
0
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009 > bérylion
22 août 2008 à 07:04
Salut ,

J'ai modifié le code de l4USF et supprimer le Dim i as integer ds SaiDetails

GDS35
-1
bérylion > gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
22 août 2008 à 09:00
re-

aïe !!

faut IMPERATIVEMENT laisser " Public i% " en tout début du module standard

sinon, forcément, ça va couiner...

t'as modifié comment le code du USF ??
0
bérylion > gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
22 août 2008 à 12:22
re-

tu peux reécupérer ton fichier sur le lien que tu as donné.

sinon, j'ai "sabré" un peu la bestiole, et ça donne ça : https://www.cjoint.com/?iwmunc3C4C
0
re

t'as aussi un autre pb : y faut vider les variables (qui servent à rien) de tes inputbox

Dim Motif As String
Dim Lieu As String
Dim DateDep As String
Dim HeureDep As String
Dim HeureArr As String
Dim DateArr As String
Dim HeureDepMission As String
Dim HArrRes As String
Dim MTransp As String
Dim NBrep As Integer

elles sont stockées tant que la sub n'est pas réinitialisée, donc tes boucles ne font qu'un tour...
0
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
21 août 2008 à 16:34
Salut , Mon AMI,

Je debute et suis vraiment novice , comment vider mes variables ????
Merci de ton aide
-1
re-

ajoute cette ligne (en gras) après chaque boucle :

SaiMotif:
            Range("A" & i).Select
            If Range("A" & i) <> "" Then
            GoTo SaiLieu
            Else
            Do While Motif = ""
            Motif = UCase(InputBox(TITRE, TITRE1, Motif, 5500, 8500))
            Loop
            ActiveCell.FormulaR1C1 = Motif
            Motif = Empty
            GoTo SaiLieu
            End If


;)
0
re-

chui pas un habitué du coin..., alors je sais pas si je je suivrai le jusqu'au bout.

(au besoin - et c'est pas pour faire de la pub - tu peux me trouver plus fréquement ici : http://forum.pcastuces.com)
0
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
22 août 2008 à 18:45
Salut mon AMI , je te comprends de ne pouvoir suivre a bout de Bras un Nul , mais j'ai noté adr ou peux te joindre ,cependant , un GRAND MERCI pour tous les efforts faits pour GDS35 . Il te présente toutes ses AMITIES les + Sincères A+
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
belle approche !

cependant, perso, tant qu'a faire entrer des usf la-dedans j'aurais tout fait sur un seul et même.
(ça permet de tester les controls du usf uniquement, et de "préformater" les réponses plus simplement...)

si j'ai un peu de temps la semaine prochaine je vous ponds un truc sur un seul usf avec toutes les fioritures qui vont bien.
0
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
23 août 2008 à 20:20
RESALUT , Bérylion , j'ai un peu adapté ton code modifié qui fonctionne a merveille , et je le fais progresser , tant bien que mal , tu es vraiment un AMI SUPER , je t'enverrais mon code tel qu'il sera dimanche soir avant de reprendre le taf lundi , maintenant qu'il fonctionne + ou - bien je ne voudrais pas tout casser , je vais chercher a incorporer la saisiie des dates sous forme jjmmaaa et les recuper dans la cellule a déquate jj/mm/aaaa et les heures idem.
Je ne sais comment te remercier de ton aide .... suis confus de te mettre ainsi a contribution.
Bonne soirée Des + cordialement GDS35 (Mail Perso gds35@free.fr n'hésite pas à m'envoyer les pieces jointes)
-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
24 août 2008 à 22:09
J'ai oublié le lien ...https://www.cjoint.com/?iywh2Gkc0L
-1
re

bof, pour les remerciements chui pas obligé tu sais, mais ça fait tjs plaisir :D

bon, j'ai pas regardé ta dernière mouture, mais comme je disais plus haut,
moi je verrais plutôt ça géré depuis un seul usf

si j'ai le temps demain je regarde ça entre la clop et le café.

;)
0
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
25 août 2008 à 12:14
Merci mon AMI , Bon Appetit , Bon Café et Bonne Clop
-1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
17 août 2008 à 17:55
Bonjour,
Avec le morceau de code que tu donne c'est vraiment pas clair, d'après ce que je comprend,
ta valeur de i est modifiée dans ton UF. M_TRANSPORT, mais la variable i, elle est déclarée où ?
Si pas dans un module la variable n'est pas 'visible ' dans toute l'appli.
A+
-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
18 août 2008 à 10:51
Salut , Ma variable i est initialisée à 19 en deburt de Prg , puis elle est incrementée de + 1 si j'ai une seconde ligne a saisir
-1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
18 août 2008 à 11:29
Ma variable i est initialisée à 19 en deburt de Prg
Oui, mais elle est déclarée où?
-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
18 août 2008 à 12:24
Je t'envoi le code ecrit , encore merci de ton Aide Gds35
i = 19 ' Incrementation Saisie tant que la validation de la feuille n'est pas faite
'
' SAISIE DU MOTIF DU DPL
'
SaiMotif:
Range("A" & i).Select
If Range("A" & i) <> "" Then
GoTo SaiLieu
Else
Do While Motif = ""
Motif = UCase(InputBox(TITRE, TITRE1, Motif))
Loop
ActiveCell.FormulaR1C1 = Motif
GoTo SaiLieu
End If
'
' SAISIE DETAILS DU DEPLACEMENT
'
SaiLieu:
Range("E" & i).Select
If Range("E" & i) <> "" Then
GoTo SaiDateDep
Else
Do While Lieu = ""
Lieu = UCase(InputBox(TITRE, TITRE2, Lieu))
Loop
ActiveCell.FormulaR1C1 = Lieu
GoTo SaiDateDep
End If
'
SaiDateDep:
Range("I" & i).Select
If Range("I" & i) <> "" Then
GoTo HDep
Else
Do While DateDep = ""
DateDep = UCase(InputBox(TITRE, TITRE3, DateDep))
On Error GoTo SaiDateDep
Loop
Range("I" & i) = CDate(DateDep)
GoTo HDep
End If
'
HDep:
Range("J" & i).Select
If Range("J" & i) <> "" Then
GoTo HArr
Else
Do While HeureDep = ""
HeureDep = InputBox(TITRE, TITRE4, HeureDep)
On Error GoTo HDep
Loop
ActiveCell.FormulaR1C1 = HeureDep
GoTo HArr
End If
'
HArr:
'
Range("K" & i).Select
If Range("K" & i) <> "" Then
GoTo SaiDateArr
Else
Do While HeureArr = ""
HeureArr = InputBox(TITRE, TITRE5, HeureArr)
On Error GoTo HArr
Loop
ActiveCell.FormulaR1C1 = HeureArr
GoTo SaiDateArr
End If
'
SaiDateArr:
'
Range("L" & i).Select
If Range("L" & i) <> "" Then
GoTo SaiHDepMission
Else
Do While DateArr = ""
DateArr = InputBox(TITRE, TITRE6, DateArr)
On Error GoTo SaiDateArr
If DateArr < DateDep Then
message = MsgBox("DATE ARRIVEE < DATE DEPART !!", vbYesNo, "FRAIS DE DEPLACEMENT")
If message = vbYes Then
DateArr = ""
ActiveCell.FormulaR1C1 = DateArr
GoTo SaiDateArr
Else
DateDep = ""
Range("I" & i).Select
ActiveCell.FormulaR1C1 = DateDep
Range("L" & i) = CDate(DateArr)
GoTo SaiDateDep
End If
End If
Loop
Range("L" & i) = CDate(DateArr)
GoTo SaiHDepMission
End If
'
SaiHDepMission:
'
Range("M" & i).Select
If Range("M" & i) <> "" Then
GoTo SaiHArrRes
Else
Do While HeureDepMission = ""
HeureDepMission = InputBox(TITRE, TITRE7, HeureDepMission)
On Error GoTo SaiHDepMission
Loop
ActiveCell.FormulaR1C1 = HeureDepMission
GoTo SaiHArrRes
End If
'
SaiHArrRes:
'
Range("N" & i).Select
If Range("N" & i) <> "" Then
GoTo SaiMTransport
Else
Do While HArrRes = ""
HArrRes = InputBox(TITRE, TITRE8, HArrRes)
On Error GoTo SaiHArrRes
Loop
ActiveCell.FormulaR1C1 = HArrRes
GoTo SaiMTransport
End If
'
SaiMTransport:
'
Range("O" & i).Select
Do While MTransp = ""
Load M_TRANSPORT
M_TRANSPORT.Show
If Range("O" & i).Value <> "" Then
GoTo SaiNBRepas
Else
message = MsgBox("LA SAISIE DU MOYEN DE TRANSPORT EST OBLIGATOIRE", vbOKOnly, "FRAIS DE DEPLACEMENT")
End If
Loop
'
SaiNBRepas:
'
Range("P" & i).Select
NBrep = InputBox(TITRE, TITRE9, NBrep)
ActiveCell.FormulaR1C1 = NBrep
GoTo Nuits
'
Nuits:
Range("Q" & i).Select







message = MsgBox("AUTRE DEPLACEMENT??", vbYesNo, "FRAIS DE DEPLACEMENT")
If message = vbYes Then
i = i + 1
GoTo SaiMotif
Else
GoTo Choix
End If
'
Choix:
MsgBox ("CouCou")
End Sub
-1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
19 août 2008 à 03:15
Je vois rien dans ce code qui peut faire une erreur bien qu'il soit un peu... brouillon, beaucoup de goto pas nécessaire entre-autre.
La question est toujours la même... OU TU DECLARE TA VARIABLE I...
Dans un module général tu met
Dim i as long
et tu dit...
-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
19 août 2008 à 19:54
Salut mon Ami , je t'envoi le code complet , car je ne vois comment faire pour envoyer une piece jointe , je suis novice et peut être un peu borné en vba ne sais .

Sub SaiDetails()
'
Dim message As String ' definition de la variable des MsgBox
Dim i As Integer 'Definition de la variable pour la boucle de saisie
'
' RECUPERATION DU NOM & PRENOM
'
Dim Nom As String
Range("B7").Select
Nom = Range("B7").Value
'
' DEFINITION DES CONSTANTES EN TETE INPUTBOX SAIDETAILS
'
TITRE = "DE : " & Nom
Const TITRE1 = "MOTIF DU DEPLACEMENT"
Const TITRE2 = "LIEU DU DEPLACEMENT"
Const TITRE3 = "DATE DE DEPART - FORMAT XX/XX/XXXX"
Const TITRE4 = "HEURE DE DEPART - FORMAT XX:XX"
Const TITRE5 = "HEURE D'ARRIVEE - FORMAT XX:XX"
Const TITRE6 = "DATE D'ARRIVEE - FORMAT XX/XX/XXXX"
Const TITRE7 = "HEURE DEPART DE MISSION - FORMAT XX:XX"
Const TITRE8 = "HEURE ARRIVEE RESIDENCE - FORMAT XX:XX"
Const TITRE9 = "NOMBRE DE REPAS ???"
'
' DEFINITION DES VARIABLES DES CELLULES DE LA SAISIE DES DETAILS DES DPL
'
Dim Motif As String
Dim Lieu As String
Dim DateDep As String
Dim HeureDep As String
Dim HeureArr As String
Dim DateArr As String
Dim HeureDepMission As String
Dim HArrRes As String
Dim MTransp As String
Dim NBrep As Integer

'
Dim SaiMotif As String
Dim SaiLieu As String
Dim SaiDateDep As String
Dim SaiHeureDep As String
Dim SaiHeureArr As String
Dim SaiDateArr As String
Dim SaiHeureDepMission As String
Dim SaiHArrRes As String
Dim SaiMTRansp As String
Dim SaiNBRepas As String
'
i = 19 ' Incrementation Saisie tant que la validation de la feuille n'est pas faite
'
' SAISIE DU MOTIF DU DPL
'
SaiMotif:
Range("A" & i).Select
If Range("A" & i) <> "" Then
GoTo SaiLieu
Else
Do While Motif = ""
Motif = UCase(InputBox(TITRE, TITRE1, Motif, 5500, 8500))
Loop
ActiveCell.FormulaR1C1 = Motif
GoTo SaiLieu
End If
'
' SAISIE DETAILS DU DEPLACEMENT
'
SaiLieu:
Range("E" & i).Select
If Range("E" & i) <> "" Then
GoTo SaiDateDep
Else
Do While Lieu = ""
Lieu = UCase(InputBox(TITRE, TITRE2, Lieu, 5500, 8500))
Loop
ActiveCell.FormulaR1C1 = Lieu
GoTo SaiDateDep
End If
'
SaiDateDep:
Range("I" & i).Select
If Range("I" & i) <> "" Then
GoTo HDep
Else
Do While DateDep = ""
DateDep = UCase(InputBox(TITRE, TITRE3, DateDep, 5500, 8500))
On Error GoTo SaiDateDep
Loop
Range("I" & i) = CDate(DateDep)
GoTo HDep
End If
'
HDep:
Range("J" & i).Select
If Range("J" & i) <> "" Then
GoTo HArr
Else
Do While HeureDep = ""
HeureDep = InputBox(TITRE, TITRE4, HeureDep, 5500, 8500)
On Error GoTo HDep
Loop
ActiveCell.FormulaR1C1 = HeureDep
GoTo HArr
End If
'
HArr:
'
Range("K" & i).Select
If Range("K" & i) <> "" Then
GoTo SaiDateArr
Else
Do While HeureArr = ""
HeureArr = InputBox(TITRE, TITRE5, HeureArr, 5500, 8500)
On Error GoTo HArr
Loop
ActiveCell.FormulaR1C1 = HeureArr
GoTo SaiDateArr
End If
'
SaiDateArr:
'
Range("L" & i).Select
If Range("L" & i) <> "" Then
GoTo SaiHDepMission
Else
Do While DateArr = ""
DateArr = InputBox(TITRE, TITRE6, DateArr, 5500, 8500)
On Error GoTo SaiDateArr
If DateArr < DateDep Then
message = MsgBox("DATE ARRIVEE < DATE DEPART !!", vbYesNo, "FRAIS DE DEPLACEMENT")
If message = vbYes Then
DateArr = ""
ActiveCell.FormulaR1C1 = DateArr
GoTo SaiDateArr
Else
DateDep = ""
Range("I" & i).Select
ActiveCell.FormulaR1C1 = DateDep
Range("L" & i) = CDate(DateArr)
GoTo SaiDateDep
End If
End If
Loop
Range("L" & i) = CDate(DateArr)
GoTo SaiHDepMission
End If
'
SaiHDepMission:
'
Range("M" & i).Select
If Range("M" & i) <> "" Then
GoTo SaiHArrRes
Else
Do While HeureDepMission = ""
HeureDepMission = InputBox(TITRE, TITRE7, HeureDepMission, 5500, 8500)
On Error GoTo SaiHDepMission
Loop
ActiveCell.FormulaR1C1 = HeureDepMission
GoTo SaiHArrRes
End If
'
SaiHArrRes:
'
Range("N" & i).Select
If Range("N" & i) <> "" Then
GoTo SaiMTransport
Else
Do While HArrRes = ""
HArrRes = InputBox(TITRE, TITRE8, HArrRes, 5500, 8500)
On Error GoTo SaiHArrRes
Loop
ActiveCell.FormulaR1C1 = HArrRes
GoTo SaiMTransport
End If
'
SaiMTransport:
'
Range("O" & i).Select
Do While MTransp = ""
Load M_TRANSPORT
M_TRANSPORT.Show
If Range("O" & i).Value <> "" Then
GoTo SaiNBRepas
Else
message = MsgBox("LA SAISIE DU MOYEN DE TRANSPORT EST OBLIGATOIRE", vbOKOnly, "FRAIS DE DEPLACEMENT")
End If
Loop
'
SaiNBRepas:
'
Range("P" & i).Select
NBrep = InputBox(TITRE, TITRE9, NBrep)
ActiveCell.FormulaR1C1 = NBrep
GoTo Nuits
'
Nuits:
' Range("Q" & i).Select







message = MsgBox("AUTRE DEPLACEMENT??", vbYesNo, "FRAIS DE DEPLACEMENT")
If message = vbYes Then
i = i + 1
GoTo SaiMotif
Else
GoTo Choix
End If
'
Choix:
MsgBox ("CouCou")
End Sub
-1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
20 août 2008 à 22:25
bon, comme déjà dit, c'est un problème avec l'endroit où tu déclare ta variable i.
Dans quel type de module tu met le code ci-dessus ?, un moduel de feuille ou un module général ?
Si c'est un module général, ce qui serait bien, tu change la ligne

Sub SaiDetails() 
' 
Dim i As Integer 'Definition de la variable pour la boucle de saisie 

par,

Public i As Integer 'Definition de la variable pour la boucle de saisie 
Sub SaiDetails() 

Si tu veux travailler avec la variable i ailleur que dans cette macro, i doit être visible de partout et notament de ton UF... si j'ai bien compris.
Si ça marche toujours pas tu peu mettre ton classeur sur https://www.cjoint.com/
et mettre le lien dans un poste suivant, sinon ont risque de tourner en rond encore longtemps.


-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
21 août 2008 à 12:13
Merci mon AMI , ta solution n'est pas la bonne , j'ai joint mon fichier a https://www.cjoint.com/?ivmlRlZyfT
Encore Merci de ton aide , car ne suis pas doué et débutant. GDS35
-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
22 août 2008 à 12:41
Grd Merci mon AMI , J'ai récupére mon fichier et en ai fait une sauvegarde , je vais tester tes precieuses MAJ durant le WE et te tiendrait au courant , encore merci Bon WE GDS35
-1
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
23 août 2008 à 09:58
Rebonjour,
J'ai pas eu le temps de te répondre plus tôt mais si encore d'actualité, ton classeur debugué et simplifié.
https://www.cjoint.com/?ixj5VrUL3L
Tu dit...
A+
-1
gds35 Messages postés 23 Date d'inscription mardi 19 décembre 2006 Statut Membre Dernière intervention 13 février 2009
24 août 2008 à 22:05
Salut mon AMI , j'espere que tu as passé un bon WE ici en Bretagne plutot pluvieux et froid . Bref .... voila ou j'en suis rendu , je n'ai pas modifié la facon de saisir les dates ... j'ai ajouté des codes pour alimenter le pied de l'etat de frais , maintenant lors de la valid de la feuille veux si le moyen de transport est V.PERSONNEL obligé la la saisie du nb Chevaux , KM et PU , ce que je pourrais faire par la suite .... MERCI A TOI ET BONNE SEMAINE
GDS35
-1