Pb boucle en VBa avec USF
gds35
Messages postés
24
Statut
Membre
-
gds35 Messages postés 24 Statut Membre -
gds35 Messages postés 24 Statut Membre -
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
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
Configuration: Windows XP Internet Explorer 6.0
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-
-
-
-
-
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
-
-
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... -
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
;) -
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) -
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.-
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) -
J'ai oublié le lien ...https://www.cjoint.com/?iywh2Gkc0L
-
-
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é.
;) -
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+ -
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
-
Ma variable i est initialisée à 19 en deburt de Prg
Oui, mais elle est déclarée où?
-
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 -
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... -
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 -
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.
-
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 -
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
-
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+ -
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