Pb boucle en VBa avec USF

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
Configuration: Windows XP
Internet Explorer 6.0

17 réponses

  1. bérylion
     
    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
    1. gds35 Messages postés 24 Statut Membre
       
      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
    2. bérylion > gds35 Messages postés 24 Statut Membre
       
      ????

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

      t'as rien modifié d'autre ?
      0
    3. gds35 Messages postés 24 Statut Membre > bérylion
       
      Salut ,

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

      GDS35
      -1
    4. bérylion > gds35 Messages postés 24 Statut Membre
       
      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
    5. bérylion > gds35 Messages postés 24 Statut Membre
       
      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
  2. bérylion
     
    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
    1. gds35 Messages postés 24 Statut Membre
       
      Salut , Mon AMI,

      Je debute et suis vraiment novice , comment vider mes variables ????
      Merci de ton aide
      -1
  3. bérylion
     
    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
  4. bérylion
     
    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
    1. gds35 Messages postés 24 Statut Membre
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bérylion
     
    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
    1. gds35 Messages postés 24 Statut Membre
       
      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
  7. bérylion
     
    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
    1. gds35 Messages postés 24 Statut Membre
       
      Merci mon AMI , Bon Appetit , Bon Café et Bonne Clop
      -1
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  9. gds35 Messages postés 24 Statut Membre
     
    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
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Ma variable i est initialisée à 19 en deburt de Prg
    Oui, mais elle est déclarée où?
    -1
  11. gds35 Messages postés 24 Statut Membre
     
    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
  12. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  13. gds35 Messages postés 24 Statut Membre
     
    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
  14. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  15. gds35 Messages postés 24 Statut Membre
     
    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
  16. gds35 Messages postés 24 Statut Membre
     
    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
  17. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  18. gds35 Messages postés 24 Statut Membre
     
    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