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
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