Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

boucle imbriqué

lao31

XLDnaute Occasionnel
Bonjour le forum,

j'ai essayé de me lancer dans une macro pour faire des boucles, mon soucis est que je cale au niveau de la 2eme boucle
car j'ai des cases vides ou sans valeur dans ma colonne x
auriez vous la gentillesse de m'expliquer comment faire cette 2eme boucle.
explication sur mes desideratas dans le fichier joint
Cordialement

Lao
 

Pièces jointes

  • bouclenx.xlsm
    21.9 KB · Affichages: 34
  • bouclenx.xlsm
    21.9 KB · Affichages: 33

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

re bonjour le forum

En attendant une aide de votre part, je me suis lancé en essayant de faire differemment.
cela m'iplique de rentrer chaque fois mes valeurs de depart de boucle.
je pens que cela est vraiment moche ou en tout cas certainement pas tres efficace.
pourriez vous m'indiquer une façon plus catholique ?
cordialement
lao
 

Pièces jointes

  • bouclenx.xlsm
    77.1 KB · Affichages: 22
  • bouclenx.xlsm
    77.1 KB · Affichages: 24

Dranreb

XLDnaute Barbatruc
Re : boucle imbriqué

Bonjour.

Un peu moins évident qu'à première vue :
VB:
Sub TrouveAsk()
Dim F As Worksheet, Te(), Ts(), L&, TVal(1 To 7) As Double, TSup(1 To 7) As Boolean, JMax&, J&, K&
Set F = Sheets("essai")
Te = Intersect(F.[A:D], F.UsedRange).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 1)
For L = 2 To UBound(Ts, 1)
   If Not IsEmpty(Te(L, 4)) Then JMax = JMax + 1: TVal(JMax) = Te(L, 4): TSup(JMax) = TVal(JMax) > Te(L, 3)
   J = 1: Do While J <= JMax
      If TVal(J) > Te(L, 3) Xor TSup(J) Then
         Ts(L, 1) = Te(L, 1)
         JMax = JMax - 1
         For K = J To JMax: TVal(K) = TVal(K + 1): TSup(K) = TSup(K + 1): Next K
      Else
         J = J + 1: End If: Loop: Next L
F.[E1].Resize(UBound(Ts, 1)).Value = Ts
End Sub
Remarque: Détecte seulement les 1ers passages de seuils, mais dans les 2 sens.
 
Dernière édition:

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

Bonjour le forum, Dranreb

Merçi dranreb, cela fonctionne parfaitement, mais serait il possible d'avoir le resultat des recherche valeurs aux niveaux des lignes ou se trouve la valeur de n recherché ( comme dans ma macro pas tres catho je te le concede et surtout avec trop de manip 1 par recherche.)
et pour corser le tout:
dans l'exemple on recherche les 1ere valeurs superieures. Pourrait on chercher aussi quand c'est nécessaire les 1ere valeur inferieures ? comme dans le fichier joint

Cordialement

Lao
 

Pièces jointes

  • bouclenx.xlsm
    77.1 KB · Affichages: 36
  • bouclenx.xlsm
    77.1 KB · Affichages: 19

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

re,

Desolé pour ma reponse trop rapide, je n'avais pas vu que cela fonctionné dans les deux sens, c'est impeccable.
Juste donc la possibilité d'avoir la reponse des recherches a cote des valeurs recherchés.
cela serait parfait.

cordialement

Lao
 

Dranreb

XLDnaute Barbatruc
Re : boucle imbriqué

Pourquoi n'était-ce pas demandé dans le modèle depuis le début ?
Enfin voilà :
VB:
Sub TrouveAsk()
Dim F As Worksheet, Te(), Ts(), L&, TVal(1 To 7) As Double, _
   TSup(1 To 7) As Boolean, TL(1 To 7), JMax&, J&, K&
Set F = Sheets("essai")
Te = Intersect(F.[A:D], F.UsedRange).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 1)
For L = 2 To UBound(Ts, 1)
   If Not IsEmpty(Te(L, 4)) Then
      JMax = JMax + 1
      TVal(JMax) = Te(L, 4)
      TSup(JMax) = TVal(JMax) > Te(L, 3)
      TL(JMax) = L
      End If
   J = 1: Do While J <= JMax
      If TVal(J) > Te(L, 3) Xor TSup(J) Then
         If IsEmpty(Ts(L, 1)) Then Ts(L, 1) = IIf(TSup(J), _
            ">", "<=") & " " & TVal(J) ' Instruction à supprimer si elle ne sert à rien…
         Ts(TL(J), 1) = Te(L, 1)
         JMax = JMax - 1
         For K = J To JMax
            TVal(K) = TVal(K + 1)
            TSup(K) = TSup(K + 1)
            TL(K) = TL(K + 1): Next K
      Else
         J = J + 1: End If: Loop: Next L
F.[E1].Resize(UBound(Ts, 1)).Value = Ts
End Sub
 
Dernière édition:

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

bonjour le forum, bonjour Dranred,

Pourquoi n'était-ce pas demandé dans le modèle depuis le début ?
parceque je pensai qu'en regardant ma macroa savoir rentré les lignes choisis et avoir le resultat était parlant.
Mais j'avoue que souvent dans mes demandes je suis confus.
De plus a partir de vos reponses souvent brillantes, vous me donnez d'autres idées et du coup je pars dans une autre direction et effectivement cela parfois s'eloigne de la demande initiale.

Pour le coup Dranreb tu m'as donné un reponse qui depasse même ma demande ( en mrquant dans la macro a supprimé si pas néccessaire ) et je t'en remerçie, cela me sera neccessaire.
Le tout fonctionne parfaitement et dans les deux sens et les recherches se font beaucoup plus rapidement qu'avec ma stupide methode.
alors une nouvelle fois un grand merçi.
Vais eplucher ta macro pour essayer de comprendre , je vois ce qu'elle fait, mais j'avoue que parfois c'est dur pour moi e comprendre alors je m'hasarde a faire du pas a pas pour voir l'influence de telle ou telle ligne, cela releve souvent d'un travail de titan et qui surtout me prends la tete. mais un jour je ne desespere pas de bien maitriser. la retraite me donnera du temps. c'est bon d'apprendre
merçi a vous y a un coté alttruiste chez vous qui me redonnes de l'espoir.

cordialement

Lao31
 

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

Bonjour le forum, bonjour Dranreb,

A nouveau j'ai besoin d'aide pour avancer. j'ai bien pris note et essayer de comprendre le code de Dranreb, pour l'adapter a mes reels besoins.
et toujours j'en reviens a mes limites quand je veux avancer dans mes projets.
a partir de la macro de Dranreb, j'aimerai trouver des valeurs MIN et des valeurs MAX provenant d'un intervalle de date ( date trouver par une recherche ). deja je m'embrouille dans ma demande.
avec un fichier cela devrait être plus clair.
j'ai penser a des solutions en remplaçant les dates par des nombres, mais cela ne me semble pas tres judicieux e de toute façon je ne saurai pas comment prendre ces valeurs dans les formules. Hum c'est mieux de voir le fichier joint.

cordialement

Lao31
 

Pièces jointes

  • Copie de bouclenx-1.xlsm
    92.4 KB · Affichages: 25

Dranreb

XLDnaute Barbatruc
Re : boucle imbriqué

Bonjour.

Comment ça entre deux dates ? Lesquelles ?
Si chaque nouvelle valeur spécifiée en colonne D devait annuler la précédente ç’aurait été bien plus simple. Là la recherche reste active tant que la condition n'est pas remplie, c'est pourquoi elles sont toutes trimballées dans un petit ensemble de tableaux à 7 postes maxi. Il en faut deux de plus: un pour les meilleures différences absolues et un pour les numéros de lignes ou on les a trouvées.
Mais je n'ai sans doute rien compris je vois, en relisant. J'ai cru qu'il s'agissait de restituer, tout à la fin, au lieu des dates/heures où les seuils avaient été franchis, pour ceux qui ne l'ont pas été, celles où ils s'en étaient approché le mieux.
J'ai bien du mal à comprendre ce que vous voulez…

Edit: si c'est l'heure exacte du passage du seuil par interpolation linéaire des heures encadrantes selon la valeur de seuil cherchée et les valeurs encadrantes correspondantes, vous l'auriez dit comme ça je suppose ?

Edit2: Sinon expliquez moi peut être d'un peu plus loin ce que représentent les valeurs des colonne B et C dans le sujet du problème, et ce que vous cherchez à en dégager exactement en spécifiant des valeur à venir possibles de ci de là. Parce que là, je n'y comprends vraiment rien.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : boucle imbriqué

Autre remarque:
j'ai penser a des solutions en remplaçant les dates par des nombres
La colonne A contient des textes, non des dates avec heures. Pour pouvoir faire des calculs de temps il faudrait simplement commencer par les convertir en dates et heures.

Edit: Après j'ai relu 10 fois ce que vous avez écrit et ça m'a l'air plus simple qu'il n'y parait (même si je suis frustré de ne pas savoir à quoi tout ça correspond). Il suffit de garder dans 1 tableau(1 To 7) supplémentaire le maxi colonne B ou le mini colonne C jusqu'au franchissement du seuil. On peut s'appuyer sur TSup(J) pour déterminer quel calcul il faut faire.
 
Dernière édition:

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

Bonjour le forum, Dranreb

J'ai converti le texte ( date et heure pour moi ) en nombre. et j'ai essayé d'etre plus clair dans ma demande.

avec les nombres je retrouverai facilement les dates et heures correspondantes. étant donnés que les datas de la colonne A sont des minutes il me suffit de savoir la date correspondant a A1 pour en deduite la date de la colonne An

cordialement

Lao31

J'espere que vous comprendrz ma demande dans le fichier joint.
 

Pièces jointes

  • Copie de bouclenx-2.xlsm
    85.6 KB · Affichages: 25

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

Re Dranreb,

Pour expliquer ce que je cherche, je vais essayer de reformuler mes recherches.
J'ai 3 colonnes qui correspondent a un historique qui est tres long.
la colonne A est la date et l'heure (que je peux facilement ecrire en nombre puisque c'est une suite a intervalle regulier d'une minute )

la colonne B est la valeur Max de la minute correspondant a la colonne A

la colonne C est la valeur MIN de la minute ....... colonne A

La colonne D est la colonne de valeur objectif personnel (pour le futur a venir)

la E est celle qui me donne le resultat de votre macro ( suite a ma demande ) elle me donne en fait la date et l'heure a laquelle mon objectif a était atteint.

pour la colonne F j'aimerai avoir la valeur minimale de la ( col C ) correspondant a l'intervalle entre mon objectif atteint ( col E ) et Objectif initial ( col D)

pour la colonne G j'aimerai avoir la valeur Maximale ( col B ) correspondant a l'intervalle entre mon objectif atteint ( col E ) et Objectif initial ( col D).

Peut être suis je plus clair en expliquant de la sorte sinon je m'en excuse.

cordialement

Lao31
 

Dranreb

XLDnaute Barbatruc
Re : boucle imbriqué

Mais ce n'est pas à faire en reparcourant à nouveau tout entre les 2. Vous pouvez le faire au fur et à mesure puisque les infos pour les test sont notées dans de petits tableaux (1 to 7) et l'y restent jusqu'au passage de seuil.
C'est à faire derrière le dernier Else avant le J = J + 1: End If: Loop: Next L
Quelque chose comme ça …ou l'inverse :
VB:
      Else
         If TSup(J) Then
            If Te(L, 2) > TLim(J) Then TLim(J) = Te(L, 2)
         Else
            If Te(L, 3) < TLim(J) Then TLim(J) = Te(L, 3)
            End If
         J = J + 1: End If: Loop: Next L
Prévoir naturellement l'initialisation :
VB:
      TLim(JMax) = IIf(TSup(JMax), Te(L, 3), Te(L, 2))
et la restitution:
VB:
         Ts(TL(J), 2) = TLim(J)
Naturellement 2 colonnes pour Ts, maintenant :
VB:
ReDim Ts(1 To UBound(Te, 1), 1 To 2)
…
F.[E1].Resize(UBound(Ts, 1), 2).Value = Ts
 
Dernière édition:

lao31

XLDnaute Occasionnel
Re : boucle imbriqué

re Dranbed, le forum

J'ai essayé de tenir compte de tes codes et je ne sais pas si je les ai placés au bon endroit.
voici :
ub trouveask1()
Dim F As Worksheet, Te(), Ts(), L&, TVal(1 To 7), TLim(1 To 7) As Double, _
TSup(1 To 7) As Boolean, TL(1 To 7), JMax&, J&, K&
Set F = Sheets("essai")
Te = Intersect(F.[A], F.UsedRange).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 2)
For L = 2 To UBound(Ts, 1)
If Not IsEmpty(Te(L, 4)) Then
JMax = JMax + 1
TVal(JMax) = Te(L, 4)
TSup(JMax) = TVal(JMax) > Te(L, 3)
TL(JMax) = L
TLim(JMax) = IIf(TSup(JMax), Te(L, 3), Te(L, 2))
End If
J = 1: Do While J <= JMax
If TVal(J) > Te(L, 3) Xor TSup(J) Then
' If IsEmpty(Ts(L, 1)) Then Ts(L, 1) = IIf(TSup(J), _
">", "<=") & " " & TVal(J) ' Instruction à supprimer si elle ne sert à rien…
Ts(TL(J), 1) = Te(L, 1)
Ts(TL(J), 2) = TLim(J)
JMax = JMax - 1
For K = J To JMax
TVal(K) = TVal(K + 1)
TSup(K) = TSup(K + 1)
TL(K) = TL(K + 1): Next K
Else
If TSup(J) Then
If Te(L, 2) < TLim(J) Then TLim(J) = Te(L, 2)
Else
If Te(L, 3) > TLim(J) Then TLim(J) = Te(L, 3)
End If
J = J + 1: End If: Loop: Next L
'F.[E1].Resize(UBound(Ts, 1)).Value = Ts
F.[E1:F2].Resize(UBound(Ts, 2)).Value = Ts
End Sub

et malheureusement cela ne fonctionne que pour la 1ere ligne.

J'en deduis que je n'ai pas placé tes modifs aux bons endroits.
est ce que vous pouvez confirmer, et me signaler ou j'ai fais l'erreur ?

Cordialement

Lao31
 

Dranreb

XLDnaute Barbatruc
Re : boucle imbriqué

À première vue oui, mais difficile à lire. À l'avenir veuillez mettre des balise aux codes que vous reproduisez:
VB:
 au début, et à la fin /highlight également entre crochets droits (que je n'ai pas mis pour que les 2 ne soient justement pas pris comme balises, afin de vous les montrer)
Vérifiez si les test et les choix de colonnes sont dans le bon sens. Je n'ai pas trop fait attention, quand on risque de faire le contraire du contraire… c'est comme un moteur triphasé: on le branche n'importe comment, puis on intervertit deux fils si on voit qu'il tourne à l'envers !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…