IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

test addition par rapport à la première valeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut test addition par rapport à la première valeur
    Bonjour j'ai un petit soucis pour compléter mon code.

    J'aimerais réaliser un test qui détecte un écart de '1' entre deux valeurs de ma colonne, voici un exemple concret

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Donnée	Intensité
    2	4
    4	100
    8	2
    9	3	
    10	4
    11	5
    22	1
    Si l'utilisateur rentre un seuil de 1%, seul les valeurs ayant un écart de 1 seront conservé et ayant un seuil supérieur à l'intensité et ayant une précision de + ou - "precision".
    Les données deviendront:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    8	2    A
    9	3    A+1		
    10	4    A+2	
    11	5    A+3
    Si l'utilisateur rentre un seuil de 6%, seul les valeurs ayant un écart de 1 seront conservé et ayant un seuil supérieur à l'intensité et ayant une précision de + ou - "precision".

    Les données deviendront:

    Voici mon début de code que je n'arrive pas à compléter (je suis néophyte...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim i As Integer
    Dim addition as double
    dim derniereligne as integer
    dim precision as double
    dim n as double
    dim seuil as integer
    dim intensite as double
     
     
     
    derniereligne = Sheets("Feuil1").Range("A65536").End(xlUp).Row '- 2
    addition=1
    precision=(n*addition)/100
    intensite=Sheets("Feuil").Cells(j,4)
    seuil=val(UserForm1.TextBox5.Value)
     
     
    for i=2 to derniereligne
    n=textbox1.value
    if cells(i,1).value+addition<cells(i+1,1).value+precision and cells(i,1).value+addition>cells(i+1,1).value-precision then
    			stocker les données
    	else if continuer
    	end if		
     
    	For j = i + 1 To derniereligne
            If intensite >= seuil Then
    			garder la valeur
    		else supprimer la valeur
    	next j		
    next i
    Merci par avance

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Que veux tu faire des valeur trouevé (écart de 1 en tenant compte de la précision)? les copier? , les garder mais supprimer les autre?

    essaye ceci, je supprime directement les valeur qui ne corespondent pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    derniereligne = Sheets("Feuil1").Range("A65536").End(xlUp).Row '- 2
    addition = 1
     n = TextBox1.Value 'il faut donner une valeur a n avant de l'utiliser
    precision = (n * addition) / 100
     
    seuil = Val(UserForm1.TextBox5.Value)
     
     
    For i = 2 To derniereligne
     
        If Cells(i, 1).Value + addition < Cells(i + 1, 1).Value + precision And Cells(i, 1).Value + addition > Cells(i + 1, 1).Value - precision Then
         If intensite > seuil Then
            Rows(i).Delete
        End If  
       i=i+1
        Else
            Rows(i).Delete
        End If
    intensite = Sheets("Feuil").Cells(i, 4) 
        If intensite > seuil Then
            Rows(i).Delete
        End If
    Next i
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Bonjour, bonjour, je souhaiterais conserver les valeurs qui corresponde en écrivant à la colonne 6 (cells(i,6)) A pour la première valeur, A+1 pour la deuxième etc etc

    Comme ceci.

    8 A
    9 A+1
    10 A+2
    17 A
    18 A+1

    Merci

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    Ce que je ferais :

    1) trier le tableau (sur colonne "Donnée") par ordre croissant
    2) une boucle For de la dernière ligne vers la 1ère (step - 1) pour éviter les croche-pieds au Delete et :
    - faire mes tests entre les valeurs de la ligne i et celles de la ligne i-1 en vue de décider de la suppression ou non

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bon j'ai une version pas très jolie qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Dim i As Integer
    Dim addition As Double
    Dim derniereligne As Integer
    Dim precision As Double
    Dim n As Double
    Dim seuil As Integer
    Dim intensite As Double
     
     Dim na  As Integer
     
    derniereligne = Range("A65536").End(xlUp).Row '- 2
    addition = 1
    n = TextBox1.Value
    precision = (n * addition) / 100
    seuil = Val(UserForm1.TextBox5.Value)
     
     
     
    na = 0
    For i = 2 To derniereligne
    '   n = TextBox1.Value
        If Cells(i, 1).Value + addition < Cells(i + 1, 1).Value + precision And Cells(i, 1).Value + addition > Cells(i + 1, 1).Value - precision Then
            If na = 0 Then
                Cells(i, 6) = "A"
            Else
               Cells(i, 6) = "A+" & na
            End If
            na = na + 1
            i = i + 1
            Cells(i, 6) = "A+" & na
            na=na+1
        Else
            Rows(i).Delete
            If i <> derniereligne Then
            i = i - 1
            End If
        End If
        If Cells(i, 2) > seuil Then
            Rows(i).Delete
        End If
    Next i
    Si personne ne fait mieux j'essayerais de faire quelque chose de mieu ce week end

    edit : comme la dit ucfoutu il fadrait le parcourir a l'envers pour éviter les bidouille i=i-1
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Euh oui en effet, cette version bug en fait je n'arrive pas à l'arrêter
    Si quelqu'un à une autre soluce ça serait chouette.

    Merci

  7. #7
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Effectivement. Ca pose vraiment bcp de problème de le faire dans ce sens Va faloir le parcourir a l'envers

    Edit : question tu veux dabord tester les différence ou dabord tester le seuil?

    avec un seuil de 2
    2 3
    3 1
    dans le premier cas on a
    3 1
    dans le deuxième rien
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour, Krovax,

    Fais donc plutôt ta boucle ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = dernièreligne To 2 step - 1
    et tu n'auras pas besoin de changer dangereusement la valeur de i , ne risquant ainsi plus de "tomber" sur un indice n'existant plus !
    et, bien sur, tu fais tes comparaiusons en sens inverse (si ligne i - ligne i-1 = 1)

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour à tous,

    personnellement je n'ai rien compris, car dans les données exemples
    les valeurs de la colonne Données et les Valeurs de la colonne Intensité repondent aux critères; en clair quelle colonne faut-il tester ?

    Faut-il récupérer les lignes pour lesquelles on-seulement l'intensité correpond au critère du seuil et pour lesquelles les valeurs en colonne Données sont successives ?
    D'après ce que je comprends la première ligne (données=2, Intensité=4) n'est pas prise en raison de l'écart avec la ligne suivante.
    C'est ça ?

    bon, je considère qu'il faut tester la colonne intensité et ne prendre que les lignes dont les données sont successives.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    FirstLigne=0 'Sert à conserver la dernière ligne correspondante
     
    For i=2 To DerniereLigne
      if cells(i,2)*(1+precision)=intensite or cells(i,2)*(1-precision)=intensite Then
         if firstLigne=0 then 
               FirstLigne=i
         else
            if cells(i,1)-cells(firstligne,1)=i-firstligne then
               cells(firstligne,6)="A"
                cells(i,6)="A+" & i-firstligne
            else
                firstligne=0
            endif 
         endif
      else
        firstLigne=0
      Endif
    Next

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Merci ucfoutu c'était juste que j'avais un peu la flemme de revoir le test du coup ca ma fait perdre plus de temps quautre chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Dim i As Integer
    Dim addition As Double
    Dim derniereligne As Integer
    Dim precision As Double
    Dim n As Double
    Dim seuil As Integer
    Dim intensite As Double
     
     Dim na  As Integer
     
    derniereligne = Range("A65536").End(xlUp).Row '- 2
    addition = 1
    n = TextBox1.Value
    precision = (n * addition) / 100
    seuil = Val(UserForm1.TextBox5.Value)
     
    'on supprime ceux qui n'atteigne pas le seuil
    For i = derniereligne To 3 Step -1
        If Cells(i, 2) > seuil Then
            Rows(i).Delete
        End If
    Next i
     
    'on teste les ecart avecv le précédent et le suivant
    For i = derniereligne To 3 Step -1
        If Cells(i, 1) - addition < Cells(i - 1, 1) + precision And Cells(i, 1) - addition > Cells(i - 1, 1) - precision _
        Or Cells(i, 1) + addition < Cells(i + 1, 1) + precision And Cells(i, 1) + addition > Cells(i + 1, 1) - precision Then
        Else
            Rows(i).Delete
        End If
    Next i
     
    'on met les A+
    derniereligne = Range("A65536").End(xlUp).Row
    For i = 2 To derniereligne
    If na = 0 Then
        Cells(i, 6) = "A"
    Else
       Cells(i, 6) = "A+" & na
    End If
    na = na + 1
    Next i
    Si tu veu tester l'écart entre les valeur avant de supprimer les données qui n'atteigne pas le seuil inverse les deux première boucle fo
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Euh merci merci pour vos réponses.

    Pour répondre à Ilank il faut en effet conserver uniquement les données supérieur au seuil et qui ont des données qui se suivent.
    Celles qui se suive doivent être identifié (la premiere par "A", la seconde "A+1" etc etc).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Données    Intensité
    11		5
    12		1	
    13		12
    17		1
    19		9
    21		5
    22		88
    Doit devenir à condition que l'intensité soit supérieur au seuil ( tout ce qui est inférieur au seuil on peut le supprimer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Données		Intensité
    11		5		A
    12		1		A+1
    13		12		A+2
    21		5		A
    22		88		A+1
    Voilà voilà, j'ai essayé vos deux codes mais ça n'a pas l'air de fonctionner.


    Le dernier programme me supprime toutes les valeurs et n'en conservent aucune

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    marie33000,
    j'ai bien saisi que seules les valeurs dont les données sont successives sont à récupérer, là où j'ai du mal à te suivre c'est le seuil, l'intensité et la précision. Tu indiques que le Seuil est un pourcentage, qu'il y a une Intensité donnée fixe et une précision. Mais comment manipule-t-on l'ensemble.
    Bref faut-il faire :
    Cells(i,2)*(1+precision)>Seuil
    Cells(i, 2)/Intensite>Seuil*(1+precision) and Cells(i, 2)/Intensite>Seuil*(1-precision)


    Dans le code ci-dessous, modifie le premier test qui ici vérifie que si la Cells(i,1) est supérieure au seuil.
    Bref, modifie cette ligne pour qu'elle corresponde à ce que tu cherches, le reste du code vérifie que les numéros de lignes sont successives à la dernière ligne vérifiant le test.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    FirstLigne=0 'Sert à conserver la dernière ligne correspondante
     
    For i=2 To DerniereLigne
      if cells(i,2)>Seuil Then
         if firstLigne=0 then 
               FirstLigne=i
         else
            If (Cells(i, 1) - Cells(FirstLigne, 1)) <= Round((i - FirstLigne) * (1 + precision), 1) And Cells(i, 1) - Cells(FirstLigne, 1) >= Round((i - FirstLigne) * (1 - precision), 1) Then
               cells(firstligne,6)="A"
                cells(i,6)="A+" & i-firstligne
            else
                firstligne=i
            endif 
         endif
      else
        firstLigne=0
      Endif
    Next

  13. #13
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Alors pour répondre à tes interrogations, le seuil et l'intensité sont des pourcentages.
    L'intensité est une colonne dans une feuille excel alors que le seuil doit être rentré par l'utilisateur via un textbox

    Voici un algo pour l'intensité et le seuil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si seuil>intensité alors 
      on supprime
    sinon on conserve la ligne
    fin si
    En somme toutes intensité inférieur au seuil que l'on rentre implique que l'on supprime la ligne concerné.

    Merci je vais tester ton code

  14. #14
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Ma variable precision permet de jouer sur l'écart "addition"

    Exemple:
    addition=1
    precision=10%

    Les valeurs min et max pour lesquels cela fonctionnera sera:
    1-10%(1)
    1+10%(1)

    Soit 0,9 et 1,1

    Precision permet uniquement de jouer sur "addition".
    J'aurais du l'appeler "écart" ça aurait été plus compréhensible.

    Exemple je rentre une precision de 10%

    ecart entre chaque valeur=1

    Voici mes données

    9,9
    10
    11
    12
    15

    Je devrais avoir

    9,9 A
    11 A+1
    12 A+2

    Car l'écart max est de 1,1 (toléré par la précision de 10%)

  15. #15
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Oui, je ne comprends pas plus ce que vient faire la colonne Intensité si en fait elle n'est jamais testée, ni la précision.

    bref regarde le code plus haut et remplace la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if cells(i,2)>Seuil Then
    par le test que tu souhaites faire le reste du code place les "A" et "A+" pour les lignes correpondantes.

  16. #16
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    La precision et le seuil sont à déclarer et ont un role important dans le programme...


    l'ecart à detecter est de '1'
    l'utilisateur rentre un seuil qui sera comparé à la colonne intensité
    l'utilisateur rentre la precision qui permettra de donner plus ou moins de marge sur l'ecart


    Voici un algo du fonctionnement du programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Pour i allant de la ligne 2 jusqu'a la derniereligne
    ecart=1
     
    precision= (ecart*n)/100  ' n est la valeur que l'utilisateur rentre comme precision
    z=n/100 'si l'utilisateur rentre 10% --> z=0,1
    bornesup=(ecart*(1+z)) ' bornesup=ecart*1,1 (augmentation de 10%)
    borneinf=(ecart*(1-z)) ' borneinf=ecart*0,9 (baisse de 10%)
     
        si ecart compris entre borneinf et bornesup alors
            on conserve les valeurs et on affecte des A , A+1 au valeur successives
        fin si
     
        Si seuil (rentré par l'utilisateur)<intensité (colonne2) alors
            supprimer ligne(i)
        sinon si conserver ligne(i)
        fin si
     
    fin pour
    Voici mon code que je n'arrive pas à faire fonctionner:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Option Explicit
    Private Sub CommandButton1_Click()
     
    Dim i As Integer
    Dim ecart As Double
    Dim precision As Double
    Dim n As Double
    Dim z As Double
    Dim borneinf As Double, bornesup As Double
    Dim intensite As Double
    Dim seuil As Double
    Dim derniereligne As Integer
     
     
     
     
    n = TextBox1.Value
    seuil = TextBox2.Value
    ecart = 1
    precision = (ecart * n) / 100 ' n est la valeur que l'utilisateur rentre comme precision
    z = n / 100 'si l'utilisateur rentre 10% --> z=0,1
    bornesup = (ecart * (1 + z)) ' bornesup=ecart*1,1 (augmentation de 10%)
    borneinf = (ecart * (1 - z)) ' borneinf=ecart*0,9 (baisse de 10%)
     
     
    derniereligne = Range("A65536").End(xlUp).Row
     
    For i = 2 To derniereligne
    Cells(i, 2) = intensite
        If Cells(i + 1, 1) - Cells(i, 1) > borneinf And Cells(i + 1, 1) - Cells(i, 1) < bornesup Then
            Cells(i, 3) = "A"
        Else
         Rows(i).Delete
        End If
     
        If seuil < intensite Then
        Rows(i).Delete
        End If
     
    Next i
     
    End Sub
    Je n'arrive pas à supprimer les valeurs qui n'ont pas le bon écart pi aussi définir les suites (A au 1er chiffre, A+1 au deuxième etc etc)

    Si quelqu'un a une solution qui fonctionne ça serait vraiment chouette.

    Merci

  17. #17
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    QUest ce qui ne colle pas avec le dernier code que je t'ai donnée?
    Il collait bien avec mon fichier exemple
    il faux juste faire plusiseur boucle ce qui est bien plus simple.

    Ma question si ton seuil est de 3 (tu garde ceu a 1 et 2)
    que tu a
    val seuil
    1 2
    2 6
    5 1
    6 1
    7 1

    tu veux garder (2 est effacé car le seuil est mauvais puis 1 aussi car le 2 aura disparu)
    6 1 A
    7 1 A+1

    ou
    1 2 A
    6 1 A+1
    7 1 A+2
    (on garde le 1,2,6,7 puis on supprime le 2 qui n'atteins pas le seuil si j'ai bien suivit c'est ce que fait ton programme actuel)
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  18. #18
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Avec ton dernier code, lorsque je cliquais sur le bouton toutes les valeurs sont supprimés.

    Sinon pour le reste je suis désolée je n'ai pas tout compris à ce que tu as écris.

    J'aimerais juste utiliser ce programme pour détecter des écarts en fonction de la precision et du seuil.

    Je rentre un seuil de 3% dans le textbox (toutes les intensités inférieur sont supprimés --> ligne a supprimer)
    Je rentre une precision de n pourcent qui permet de donner une marge à l'ecart (au lieu de '1', on pourrait avoir un ecart variable de 0,9 à 1,1 pour une precision de 10%)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Données Intensité
    2	2	
    3	2
    5	2	
    6	2
    7	2	
    12  	2
    Me donnerait rien car le seuil de 3% est supérieur au intensité.

    Si maintenant j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Données Intensité
    2	55	
    3	44
    5	11	
    6	8
    7	6	
    12  	5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    J'obtiendrais ceci:
    2	55	A
    3 	44      A+1
    5	11	A
    6 	8	A+1
    7	6	A+2
    '12' est supprimé car:
    12-7=5 alors que l'écart doit valoir '1'
    12-6=6
    12-5=7 etc etc

    Il n'y as pas d'écart de '1' entre '12' et une autre données

  19. #19
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Marie33000, peux-tu tester le code plus haut; il y a un souci avec les valeurs et les variables de type single et double, c'est le nombre de décimales.
    En clair, tu n'auras pas 1.1 mais un truc du genre 1,099999998555.

    Je t'explique mon code;
    l'idée est de conserver l'indice de la dernière ligne pour laquelle l'intensité est supérieure au seuil, puis pour les lignes suivantes dont l'intensité est aussi supérieure au seuil de tester la différence entre
    l'écart entre le n° de la ligne courante et l'indice conservé et les valeurs leur première colonne, la différence doit correspondre à la précision.

    En reprenant un exemple :

    9.9 n° ligne 2 => je conserve cette ligne pour tester les autres
    11 n° ligne 3 => 11-9.9>=(3-2)*borinf et (11-9.9)<=(3-2)*bornsup
    12.1 n°ligne 4 => 12-9.9>=(4-2)*bornif et 12-9.9<=(4-2)*bornsup
    13 n°ligne 5 .....

  20. #20
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    Euh j'ai utilisé ton code mais il ne se passe rien quand je clique sur le bouton .
    (j'ai utlisé les deux possibilités : Cells(i,2)/Intensite>Seuil*(1+precision) and Cells(i,2)/Intensite>Seuil*(1-precision) et aussi Cells(i,2)*(1+precision)>Seuil).

    Rien n'y fait, je n'ai pas de détection d'écart et pas de "A" lié au suite de chiffre.
    Ce n'est pas grave si ce n'est pas 1,1 (c'était un exemple, le principal étant d'avoir un écart variable grâce a la précision)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Activer un Select par rapport a la valeur d'un autre select.
    Par bullrot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/11/2008, 13h17
  2. [MySQL] Requête de sélection par rapport à la première lettre d'un champ
    Par herve911 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/01/2008, 01h31
  3. Réponses: 8
    Dernier message: 23/11/2007, 17h46
  4. Afficher une valeur par rapport à une autre valeur
    Par alexiisme dans le forum Modélisation
    Réponses: 5
    Dernier message: 24/08/2007, 12h43
  5. [JSTL] Test dynamique par rapport à un paramètre
    Par cosmos38240 dans le forum Taglibs
    Réponses: 3
    Dernier message: 21/12/2005, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo