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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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).RowEst 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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 304
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