Problème adaptation boucle For

Bonjour à tous,

Je rencontre un problème pour intégrer une boucle de type for dans mon code et je n'arrive pas à savoir où se situe le problème exactement.

Le fichier étant trop gros 400ko, je ne peux pas le joindre à ce post.

Le code associé figure en fin de message, et l'image de la UserForm2 également

Le principe du fichier :

Des données de consommation de fuel sont récupérées sur d'autres fichiers excel et sont ensuite copiées et classées en fonction de leur type et de leur appartenance.

Le fonctionnement du fichier :

  • un premier bouton (onglet Home) servant à sélectionner les fichiers dont il faut extraire les données (à travers le code compris dans UserForm1). Les données sont copiées en "vrac" dans l'onglet FuelConsumptionDATA. Je n'ai pas de soucis de ce point de vue là.
  • un deuxième bouton permettant de distribuer les données en "vrac" selon 4 navires et de rassembler par voyage (une ligne de l'onglet FuelConsumptionDATA correspond à une traversée, plusieurs traversées forment un voyage).

Mon problème :

Pour Userform2, l'utilisateur choisi le navire voulu et les voyages à compiler (par exemple, pour compiler les voyages 10 à 15 pour le NAVIRE 1, on sélectionne NAVIRE 1 et on indique 10 et 15 pour numéro de début de voyage et numéro de fin de voyage)

Ce qui se passe actuellement, le voyage 10 sera compilé, mais pas les voyages 11,12,13 & 14 et je ne comprends pas pourquoi.

Pouvez-vous jeter un coup d'oeil rapide et neuf afin de m'indiquer où se situe mon erreur?

Je pense que cela ne doit pas être grand chose, mais je ne suis pas très fort en programmation, du coup j'ai du mal à voir où se situent mes erreurs...

Dans tous les cas, je vous remercie d'avance !

Bonne soirée,

Panpipes

Option Explicit

    Dim navirename1 As String

    Private ch As String 'déclare la variable ch (CHemin)
    Private cd As Workbook 'déclare la variable cd (Classeur Destination)
    Private od As Object 'déclare la variable od (Onglet Destination)

Private Sub UserForm_Initialize()

    ComboBox2.List = Array("Navire 1", "Navire 2", "Navire 3", "Navire 4")
   '  initialise les valeurs du menu déroulant

End Sub

Private Sub CommandButton4_Click()

    Dim var As Integer
    Dim variable(15) As Integer
    Dim i As Integer
    Dim j As Integer

    Dim x As Integer    'définit la variable x (variable entre numéros de voyage)
    Dim x1 As Integer   'définit la variable x1 (numéro du premier voyage)
    Dim x2 As Integer   'définit la variable x2 (numéro du dernier voyage)

    Dim y As Integer    'définit la variable y (variable entre les années)
    Dim y1 As Integer   'définit la variable y1 (année du premier voyage)
    Dim y2 As Integer   'définit la variable y2 (année du dernier voyage)

    Dim navirename2 As String   'définit la variable navirename2 (navire considéré)
    Dim port As String          'définit la variable port (escales lors des voyages)

    Dim od As Object    ' définit la variable od (onglet de destination)
    Dim os As Object    ' définit la variable os (onglet source)

    Set os = Sheets("FuelConsumptionDATA") 'définit l'onglet destination os

    var = 0

    x1 = TextBox1.Value     'x1 est le numéro du premier voyage rentré
    x2 = TextBox1.Value     'x2 est le numéro du deuxième voyage rentré
    y1 = TextBox1.Value     'y1 est l'année du premier voyage rentré
    y2 = TextBox1.Value     'y2 est l'année du deuxième voyage rentré

    If ComboBox2.Value = "Navire 1" Then        'en fonction du navire sélectionné

        navirename2 = "NAVIRE 1"                'définit la variable navirename2
        Set od = Sheets("FuelConsumptionN1")    'définit l'onglet destination od

    ElseIf ComboBox2.Value = "Navire 2" Then

        navirename2 = "NAVIRE 2"         'définit la variable navirename2
        Set od = Sheets("FuelConsumptionN2")   'définit l'onglet destination od

    ElseIf ComboBox2.Value = "Navire 3" Then

        navirename2 = "NAVIRE 3"         'définit la variable navirename2
        Set od = Sheets("FuelConsumptionN3")   'définit l'onglet destination od

    ElseIf ComboBox2.Value = "Navire 4" Then

        navirename2 = "NAVIRE 4"       'définit la variable navirename2
        Set od = Sheets("FuelConsumptionN4")   'définit l'onglet destination od

    End If

    For x = x1 To x2        'liste les données correspondant aux voyages demandés entre x1 et x2

        For i = 4 To 2000

            If os.Range("A" & i).Value = navirename2 And os.Range("C" & i).Value = x Then
                variable(var) = i
                var = var + 1

            Else

            End If

        Next i

    'Next x

        od.Select                           'sélection de l'onglet de destination
        od.Rows("5:5").Select               'sélection de la ligne 5
        Selection.Insert Shift:=xlDown      'insertion d'une ligne pour écriture

        od.Range("A5") = os.Range("F" & variable(var - 1))  'copie de la date
        od.Range("A5") = Format(od.Range("A5"), "mmmm")     'format de la date : mois uniquement

        od.Range("B5") = os.Range("A" & variable(0))        'nom du navire
        od.Range("C5") = os.Range("C" & variable(0))        'numéro du voyage
        od.Range("D5") = os.Range("B" & variable(0)) & " -- " & os.Range("B" & variable(var - 1))

        With od.Range("E5").Validation                      'liste déroulante pour choix des routes
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _
            Operator:=xlBetween, Formula1:="=FuelConsumptionVALUES!$B$4:$B$14"
        End With

        For j = variable(0) To variable(var - 1)

            port = port & os.Range("E" & j) & "/"

        Next j

        od.Range("F5") = port & os.Range("J" & variable(var - 1))   ' copie des escales

        od.Range("G5") = os.Range("F" & variable(0))                ' date de début du voyage
        od.Range("H5") = os.Range("K" & variable(var - 1))          ' date de fin du voyage

        'formules à insérer : consommation théorique en fonction de la route effectuée
        od.Range("I5") = "=IF(R5C5="""","""",(VLOOKUP(R5C5,FuelConsumptionVALUES!R4C2:R15C7,4,FALSE)))"
        od.Range("J5") = "=IF(R5C5="""","""",(VLOOKUP(R5C5,FuelConsumptionVALUES!R4C2:R15C7,5,FALSE)))"
        od.Range("K5") = "=IF(R5C5="""","""",(VLOOKUP(R5C5,FuelConsumptionVALUES!R4C2:R15C7,6,FALSE)))"

        'somme du fuel total consommé par type et par voyage
        od.Range("L5") = WorksheetFunction.Sum(os.Range("M" & variable(0) & ":M" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("P" & variable(0) & ":P" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("S" & variable(0) & ":S" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("V" & variable(0) & ":V" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("Y" & variable(0) & ":Y" & variable(var - 1)))
        od.Range("M5") = WorksheetFunction.Sum(os.Range("N" & variable(0) & ":N" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("Q" & variable(0) & ":Q" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("T" & variable(0) & ":T" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("W" & variable(0) & ":W" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("Z" & variable(0) & ":Z" & variable(var - 1)))
        od.Range("N5") = WorksheetFunction.Sum(os.Range("O" & variable(0) & ":O" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("R" & variable(0) & ":R" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("U" & variable(0) & ":U" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("X" & variable(0) & ":X" & variable(var - 1))) + WorksheetFunction.Sum(os.Range("AA" & variable(0) & ":AA" & variable(var - 1)))

        ' formules à insérer : delta entre la consommation théorique et la consommation réelle
        od.Range("O5") = "=IF(R5C5="""","""",R5C9-R5C12)"
        od.Range("P5") = "=IF(R5C5="""","""",R5C10-R5C13)"
        od.Range("Q5") = "=IF(R5C5="""","""",R5C11-R5C14)"

    Next x

    Unload Me 'vide et ferme l'UserForm2

End Sub

Private Sub Label1_Click()

End Sub

Private Sub Label2_Click()

End Sub

Private Sub Label3_Click()

End Sub

Private Sub Label4_Click()

End Sub

Private Sub Label5_Click()

End Sub

Private Sub CommandButton5_Click()

    Unload Me 'vide et ferme l'UserForm1

End Sub
userform2

Bonjour

Tu as cjoint pour les fichiers >300 ko http://cjoint.com/index.php

Sinon regardes ce bout de code : Toutes les variables sont identiques

    x1 = TextBox1.Value     'x1 est le numéro du premier voyage rentré
   x2 = TextBox1.Value     'x2 est le numéro du deuxième voyage rentré
   y1 = TextBox1.Value     'y1 est l'année du premier voyage rentré
   y2 = TextBox1.Value     'y2 est l'année du deuxième voyage rentré

Bonjour Banzai64,

Merci beaucoup pour ta réponse rapide.

Effectivement, je suis passé plein de fois au dessus sans le voir, désolé...

Merci pour l'adresse sur cjoint.

Pour information si tu veux, voici le lien pour le fichier :

=>

J'ai fait la modification concernant le numéro des textbox, quelques corrections et ça à l'air de marcher (pour le moment).

Merci de ton aide!!

Panpipes

Rechercher des sujets similaires à "probleme adaptation boucle"