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 :

Aide, classement de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut Aide, classement de données
    Bonjour à tous,

    A partir d'une colonne I :
    1300
    1320
    1380
    1560
    1600
    2000
    3000
    je dois classer ces quantités, en 2 partis (colonne J, et L) :
    -dans la colonne J, je dois avoir toutes les quantités ayant moins de 60 de différence entre soit son précédent, soit son suivant.
    - dans la colonne L, je dois avoir toutes celles qui ne respectent pas cette contrainte.

    Je dois donc avoir ce résultat :
    J L
    1300 2000
    1320 3000
    1380
    1560
    1600

    pour cela, je fais cette macro :

    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
    Public Sub sort()
    Dim i As Long
    Dim j As Long
    Dim l As Long
    i = 3
    j = 6
    l = 6
    Sheet2.Range("k6:v200").ClearContents
    While Sheet2.Cells(i, 1) <> ""
    If ((Cells(i + 1, 7) - Cells(i, 7)) <= 60) Or ((Cells(i, 7) - Cells(i - 1, 7)) <= 60) Then
            Sheet2.Cells(j, 11) = Sheet2.Cells(i, 1)
            Sheet2.Cells(j, 12) = Sheet2.Cells(i, 3)
            Sheet2.Cells(j, 13) = Sheet2.Cells(i, 4)
            Sheet2.Cells(j, 14) = Sheet2.Cells(i, 5)
            Sheet2.Cells(j, 15) = Sheet2.Cells(i, 7)
            Sheet2.Cells(j, 16) = Sheet2.Cells(i, 9)
            j = j + 1
    Else
            Sheet2.Cells(l, 17) = Sheet2.Cells(i, 1)
            Sheet2.Cells(l, 18) = Sheet2.Cells(i, 3)
            Sheet2.Cells(l, 19) = Sheet2.Cells(i, 4)
            Sheet2.Cells(l, 20) = Sheet2.Cells(i, 5)
            Sheet2.Cells(l, 21) = Sheet2.Cells(i, 7)
            Sheet2.Cells(l, 22) = Sheet2.Cells(i, 9)
            l = l + 1
            End If
    i = i + 1
    Wend 
    End Sub
    Cette macro fait bien un trie, cependant, elle ne fonctionne pas pour le 3000
    elle me donne ce résultat :
    J L
    1300 2000
    1320
    1380
    1560
    1600
    3000

    Car elle considère que la cellule suivant 3000 est égal à 0, donc 0-3000, est bien inférieur à 60. Alors qu'elle ne devrait pas y etre étant donnée que 3000-1600 > 60.

    je suis novice dans vba excel, je pense qu'il y a une solution simple, mais je ne la trouve pas !!!

    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est normal puisque vous utilisez "Or" donc comme vous l'avez écrit :

    Car elle considère que la cellule suivant 3000 est égal à 0, donc 0-3000, est bien inférieur à 60. Alors qu'elle ne devrait pas y etre étant donnée que 3000-1600 > 60.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Cells(i + 1, 7) - Cells(i, 7)) <= 60) Or ((Cells(i, 7) - Cells(i - 1, 7)) <= 60) Then
    donc dans cette ligne de code, ce qui est pris en compte est la première partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((Cells(i + 1, 7) - Cells(i, 7)) <= 60)
    Je pense que vous devriez mettre :

    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
    If cells(i + 1, 7) <> ""
    <div style="margin-left:40px">If ((Cells(i + 1, 7) - Cells(i, 7)) <= 60) Or ((Cells(i, 7) - Cells(i - 1, 7)) <= 60) Then</div><div style="margin-left:40px">         Sheet2.Cells(j, 11) = Sheet2.Cells(i, 1)
    Sheet2.Cells(j, 12) = Sheet2.Cells(i, 3)
    Sheet2.Cells(j, 13) = Sheet2.Cells(i, 4)
    Sheet2.Cells(j, 14) = Sheet2.Cells(i, 5)
    Sheet2.Cells(j, 15) = Sheet2.Cells(i, 7)
    Sheet2.Cells(j, 16) = Sheet2.Cells(i, 9)
    j = j + 1
    Else
    Sheet2.Cells(l, 17) = Sheet2.Cells(i, 1)
    Sheet2.Cells(l, 18) = Sheet2.Cells(i, 3)
    Sheet2.Cells(l, 19) = Sheet2.Cells(i, 4)
    Sheet2.Cells(l, 20) = Sheet2.Cells(i, 5)
    Sheet2.Cells(l, 21) = Sheet2.Cells(i, 7)
    Sheet2.Cells(l, 22) = Sheet2.Cells(i, 9)
    l = l + 1
    End If
    </div>End If
    On pourrait aussi tenter de mélanger les "And" avec les "Or" mais c'est parfois trompeur.

    Remarque :

    N'oubliez pas lorsque vous collez votre code de le baliser.
    Voir ici :

    http://www.developpez.net/forums/sho...d.php?t=553797

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut
    merci,

    j'ai réussi, voilà ce qu'il fallait écrire :


    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
    Public Sub jour()
    Dim i As Long
    Dim j As Long
    Dim l As Long
    i = 3
    j = 6
    l = 6
    Sheet2.Range("k6:v200").ClearContents
    While (Sheet2.Cells(i, 1) <> "")
    If (Cells(i + 1, 7) <> "" And ((Sheet2.Cells(i + 1, 7) - Sheet2.Cells(i, 7)) <= 60) Or (Cells(i, 7) - Cells(i - 1, 7)) <= 60) Then
    Sheet2.Cells(j, 11) = Sheet2.Cells(i, 1)
    Sheet2.Cells(j, 12) = Sheet2.Cells(i, 3)
    Sheet2.Cells(j, 13) = Sheet2.Cells(i, 4)
    Sheet2.Cells(j, 14) = Sheet2.Cells(i, 5)
    Sheet2.Cells(j, 15) = Sheet2.Cells(i, 7)
    Sheet2.Cells(j, 16) = Sheet2.Cells(i, 9)
    j = j + 1
    Else
    Sheet2.Cells(l, 17) = Sheet2.Cells(i, 1)
    Sheet2.Cells(l, 18) = Sheet2.Cells(i, 3)
    Sheet2.Cells(l, 19) = Sheet2.Cells(i, 4)
    Sheet2.Cells(l, 20) = Sheet2.Cells(i, 5)
    Sheet2.Cells(l, 21) = Sheet2.Cells(i, 7)
    Sheet2.Cells(l, 22) = Sheet2.Cells(i, 9)
    l = l + 1
    End If
    i = i + 1
    Wend
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Besoin d'aide] Récupéré des données xml dans un champs dynamisque
    Par Endeo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 27/08/2008, 16h22
  2. Classement des données d'une liste modifiable
    Par marinef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/07/2008, 10h36
  3. [Débutant] Aide traitement de données
    Par gaelepely dans le forum MATLAB
    Réponses: 5
    Dernier message: 20/11/2007, 04h20
  4. Réponses: 1
    Dernier message: 23/12/2006, 23h39
  5. Aide userform( insertion données dans classeur)
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 19/12/2005, 09h16

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