Boucles imbriquées
Résolu/Fermé
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
-
Modifié par Whismeril le 30/04/2015 à 09:46
Prunett - 5 mai 2015 à 16:19
Prunett - 5 mai 2015 à 16:19
6 réponses
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
23 avril 2015 à 10:09
23 avril 2015 à 10:09
Bonjour,
difficile sans voir l'organisation de ton classeur
pour essayer d'^tre efficace
Mettre le classeur (environ 1000 à 2000 lignes) sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Dans l'attente
difficile sans voir l'organisation de ton classeur
pour essayer d'^tre efficace
Mettre le classeur (environ 1000 à 2000 lignes) sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Dans l'attente
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
23 avril 2015 à 10:23
23 avril 2015 à 10:23
Voici le lien http://www.cjoint.com/data3/3DxkKB92WkC.htm
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
23 avril 2015 à 10:54
23 avril 2015 à 10:54
Bien reçu, merci,
je regarde dès que...
je regarde dès que...
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
23 avril 2015 à 11:11
23 avril 2015 à 11:11
Merci beaucoup
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
23 avril 2015 à 13:31
23 avril 2015 à 13:31
Et voilà
proposition:
https://www.cjoint.com/?3DxnSE1S3Rf
tu dis
proposition:
https://www.cjoint.com/?3DxnSE1S3Rf
tu dis
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
23 avril 2015 à 13:54
23 avril 2015 à 13:54
Tout d'abord, merci
Ensuite, j'ai plusieurs questions :
- Dans la partie "initialisations", la ligne
- Dans la partie mémorisation,
Vous écrivez
- Toujours dans la partie mémorisation, lorsque vous écrivez Jour=Jour+1, c'est grâce à la ligne du dessus qu'il comptabilise une journée de 24 heures (soit le step 24) ?
- Dans la partie affichage des résultats, j'ai une erreur de type 9
Ensuite, j'ai plusieurs questions :
- Dans la partie "initialisations", la ligne
Derlig = Columns("A").Find("*", , , , , xlPrevious).Row, je ne comprends pas à quoi sert cette ligne, ni pourquoi il faut écrire .Find("*", , , , , xlPrevious).Row Est ce que c'est pour indiquer la fin de la colonne ? Mais si c'est pour cela, pourquoi mettre autant de virgules et que signifie xlPrevious ?
- Dans la partie mémorisation,
Vous écrivez
For Lig=2 to derling Step 24, je vois qu'il n'y a pas beosin de déclarer Lig, mais pourquoi ?
- Toujours dans la partie mémorisation, lorsque vous écrivez Jour=Jour+1, c'est grâce à la ligne du dessus qu'il comptabilise une journée de 24 heures (soit le step 24) ?
- Dans la partie affichage des résultats, j'ai une erreur de type 9
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
Modifié par michel_m le 23/04/2015 à 14:15
Modifié par michel_m le 23/04/2015 à 14:15
- Dans la partie affichage des résultats, j'ai une erreur de type9
effectivement, excuse-moi,parenthèse mal placée (changement au dernier moment sans teste :-/
correction:
qu'il n'y a pas beosin de déclarer Lig, mais pourquoi ?
??? lig est déclaré comme integer dans les déclarations
Est ce que c'est pour indiquer la fin de la colonne ? oui
Mais si c'est pour cela, pourquoi mettre autant de virgules et que signifie xlPrevious ?
parce que xlprevious est le 6° paramêtre de la fonction et que je n'ai pas besoin du 2° au 5° ni du 7° au 9° (regarde l'aide en ligne)
sens de recherche:
xlprevious<==> avant
xlnext=après
Michel
en espèrant que...
effectivement, excuse-moi,parenthèse mal placée (changement au dernier moment sans teste :-/
correction:
Range("H3").Resize(UBound(T_out), 4) = T_out
qu'il n'y a pas beosin de déclarer Lig, mais pourquoi ?
??? lig est déclaré comme integer dans les déclarations
Est ce que c'est pour indiquer la fin de la colonne ? oui
Mais si c'est pour cela, pourquoi mettre autant de virgules et que signifie xlPrevious ?
parce que xlprevious est le 6° paramêtre de la fonction et que je n'ai pas besoin du 2° au 5° ni du 7° au 9° (regarde l'aide en ligne)
sens de recherche:
xlprevious<==> avant
xlnext=après
Michel
en espèrant que...
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
23 avril 2015 à 14:38
23 avril 2015 à 14:38
Merci beaucoup !
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
30 avril 2015 à 09:21
30 avril 2015 à 09:21
Bonjour,
J'ai voulu réutiliser le même principe de la boucle que tu m'avais envoyé pour calculer la moyenne des températures extérieures chaque jours de l'année.
J'ai donc écrit le code suivant :
Et j'ai les problèmes suivant :
- Tout d'abord, à cause de la ligne
- Ensuite, ma fonction moyenne ne fonctionne pas
En vous remerciant,
J'ai voulu réutiliser le même principe de la boucle que tu m'avais envoyé pour calculer la moyenne des températures extérieures chaque jours de l'année.
J'ai donc écrit le code suivant :
Sub temp_moy_24h()
Dim Derlig As Integer, Nbre_jours As Integer
Dim Lig As Integer, Jour As Integer, tab_temp_moy_ext
Dim T_jour As Range
Dim T_temp As Range
Dim oSh As Worksheet
Set oSh = Worksheets("Données inter PMV et DR")
'Température extérieure moyenne sur 24h
'initialisations
Application.ScreenUpdating = False
'nettoyage tableau résultats
oSh.Range("AN2:AN8760").ClearContents
Derlig = oSh.Columns("A").Find("*", , , , , xlPrevious).Row
Nbre_jours = (Derlig - 1) / 24
ReDim tab_temp_moy_ext(Nbre_jours, 3)
'------Mémorisation des températures maxi/mini par jour/mois
For Lig = 2 To Derlig Step 24
Jour = Jour + 1
Set T_jour = oSh.Range(Cells(Lig, "A"), Cells(Lig, "B"))
Set T_temp = oSh.Range(Cells(Lig, "D"), Cells(Lig + 23, "D"))
tab_temp_moy_ext(Jour, 1) = T_jour(1, 1)
tab_temp_moy_ext(Jour, 2) = T_jour(1, 2)
tab_temp_moy_ext(Jour, 3) = Application.WorksheetFunction.Average(T_temp)
Next
'-----Restitutions des mesures
oSh.Range("AN2").Resize(UBound(tab_temp_moy_ext), 3) = tab_temp_moy_ext
End Sub
Et j'ai les problèmes suivant :
- Tout d'abord, à cause de la ligne
Set T_jour = oSh.Range(Cells(Lig, "A"), Cells(Lig, "B")), j'ai une erreur de type 1004 : "La méthode Range de l'objet Worksheet a échoué". Lorsque j'essaie dans un autre fichier où il n'y a aucune macro il n'y a pas ce problème.
- Ensuite, ma fonction moyenne ne fonctionne pas
tab_temp_moy_ext(Jour, 3) = Application.WorksheetFunction.Average(T_temp)
En vous remerciant,
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
30 avril 2015 à 10:15
30 avril 2015 à 10:15
re,
1:
2:
dans
worksheetfunction est inutile car implicite
3;
ReDim tab_temp_moy_ext(Nbre_jours, 3)
tel quel indique un départ d'index à 0
à mettre avant sub
ou
dans la déclaration
la 1° méthode est préférable et "option explicit" souvent négligé est particulièrement utile
1:
Dim T_jour As RangeT_jour et T_temp sont des variables tableau contenant des données et non des cellules
Dim T_temp As Range
dim T_jour
dim T _temp
ou mais c'est implicite
dim T_jour as variant
dim T _temp as variant
2:
dans
Application.WorksheetFunction.Average(T_temp)
worksheetfunction est inutile car implicite
Application.Average(T_temp)suffit. inutile d'encombrer le code
3;
ReDim tab_temp_moy_ext(Nbre_jours, 3)
tel quel indique un départ d'index à 0
à mettre avant sub
option explicit
option base 1
ou
dans la déclaration
ReDim tab_temp_moy_ext( 1 to Nbre_jours, 1 to 3)
la 1° méthode est préférable et "option explicit" souvent négligé est particulièrement utile
Prunett
Messages postés
30
Date d'inscription
jeudi 5 mars 2015
Statut
Membre
Dernière intervention
12 mai 2015
30 avril 2015 à 10:36
30 avril 2015 à 10:36
Re,
Même avec les modifications ci dessus, j'ai toujours les mêmes problèmes.
Déjà une des choses que je ne comprends absolument pas, comment cela se fait-il que ce code se lance dans un autre fichier excel alors que dans mon fichier de base il trouve une erreur de type 1004.
Et même dans l'autre fichier, je n'arrive pas à avoir la moyenne des températures.
Même avec les modifications ci dessus, j'ai toujours les mêmes problèmes.
Option Explicit
Option Base 1
Sub temp_moy_24h()
Dim Derlig As Integer, Nbre_jours As Integer
Dim Lig As Integer, Jour As Integer, tab_temp_moy_ext
Dim T_jour As Variant
Dim T_temp As Variant
Dim oSh As Worksheet
Set oSh = Worksheets("Données inter PMV et DR")
'Température extérieure moyenne sur 24h
'initialisations
Application.ScreenUpdating = False
'nettoyage tableau résultats
oSh.Range("AN2:AN8760").ClearContents
Derlig = oSh.Columns("A").Find("*", , , , , xlPrevious).Row
Nbre_jours = (Derlig - 1) / 24
ReDim tab_temp_moy_ext(Nbre_jours, 3)
'------Mémorisation des températures maxi/mini par jour/mois
For Lig = 2 To Derlig Step 24
Jour = Jour + 1
Set T_jour = oSh.Range(Cells(Lig, "A"), Cells(Lig, "B"))
Set T_temp = oSh.Range(Cells(Lig, "D"), Cells(Lig + 23, "D"))
tab_temp_moy_ext(Jour, 1) = T_jour(1, 1)
tab_temp_moy_ext(Jour, 2) = T_jour(1, 2)
tab_temp_moy_ext(Jour, 3) = Application.Average(T_temp)
Next
'-----Restitutions des mesures
oSh.Range("AN2").Resize(UBound(tab_temp_moy_ext), 3) = tab_temp_moy_ext
End Sub
Déjà une des choses que je ne comprends absolument pas, comment cela se fait-il que ce code se lance dans un autre fichier excel alors que dans mon fichier de base il trouve une erreur de type 1004.
Et même dans l'autre fichier, je n'arrive pas à avoir la moyenne des températures.
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
30 avril 2015 à 14:32
30 avril 2015 à 14:32
Pourtant, il me semble bien que ca marchait chez moi
Comme je n'ai pas conservé mon classeur...
remet le tien en PJ et je regardai mais quand,...
Comme je n'ai pas conservé mon classeur...
remet le tien en PJ et je regardai mais quand,...
michel_m
Messages postés
16593
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
7 mars 2023
3 291
1 mai 2015 à 11:10
1 mai 2015 à 11:10
Bonjour Prunette
ci joint tableau complèté avec calcul de la moyenne
testé avec succès
https://www.cjoint.com/?3Ebly31pcBH
ci joint tableau complèté avec calcul de la moyenne
testé avec succès
https://www.cjoint.com/?3Ebly31pcBH