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 sur colonne avec tableau à dimensions multiple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut test sur colonne avec tableau à dimensions multiple
    bonjour à tous
    je plante sur le probleme suivant
    j'ai une colonne (la clonne J) qui contient des nombres issus de calcul de somme et cela de la ligne 3 à 1500 lignes .
    ex : 45,78,52,60,14,........

    objectif
    pour chaque nombre , je cherche à savoir si le nombre suivant lui sera superieure, inferieur ou egale et combien de fois cela s'est produit .

    ex pour le chiffre 15
    1) savoir combien de fois il est present dans ma colonne J
    2) savoir conbien de lfois le chiffre 15 a eu un nb suivant qu'il lui a ete superieur
    3)savoir combine de fois le chifrre 15 a eu de nb suivant qu'il lui à ete inferieur
    4)savoir combine de fois le chifrre 15 a eu de nb suivant qu'il lui à ete inferieur



    pour faire cela je suis parti avec un tableau à dimensions multiple mais je me suis perdu


    voici mon code de depart
    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
     
    Private Sub CommandButton1_Click()
    'definin le tableausomme(S-1,nb defois que la val S-1 a ete trouve, test S-1>S0, testS-1>S0, terst S-1=S0)
    Dim tableausomme(90, 200, 200, 200, 200) As Integer
    Dim test1, test2, test3 As Integer
    Dim sommemoins1, somme0 As Integer
    'lire la feuil1 colonne J a partir de la ligne 2 jusqu'a la ligne 1500
    'pour chaque valeur trouvée remplir le tableausomme
    For ligne = 3 To 1500
     
         sommemoins1 = Feuil1.Cells(ligne - 1, 10)
         somme0 = Feuil1.Cells(ligne, 10)
         occurencesommecoursemois1
         If sommemoins1 > somme0 Then test1 = 1 Else test1 = 0 'test si somme-1 >somme0
         If sommemoins1 < somme0 Then test2 = 1 Else test2 = 0 'test si somme-1< somme0
         If sommemoins1 = somme0 Then test3 = 1 Else test3 = 0 'test si somme-1=soemme0
     
     
     
         tableausomme(sommesemoins1, 0, test1, test2, test3) = tableausomme(sommemoins1, 0, test1, test2, test3) + 1
     
     
    Next ligne
     
    'lecture du tableau somme pour chaque somme et'ecrire le resultat dans le textbox1
    'ex: pour la somme X  s'est presenté y fois , la somme suivante a ete superieure W fois, inferieur S fois  et egale Z fois
    soit
    'pour la somme 45 s'est presente 35 fois , la somme suivante a ete superieure 28 fois, inferieure 4 fois et egale 3 fois
     
     
     
    End Sub

    c'est à lecture de mon tableau que je plante

    merci de votre aide

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour
    Pourquoi un tableau?
    Soit ta question n'est pas complète soit tu te complique un peu la vie


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     DerniereLigne = Range("j65536").End(xlUp).Row 'ou 1500 si la valeur est toujours la même
    For i = 2 to DerniereLigne -1
    If cells(i,10)>cells(i+1,10) then nbinf=nbinf+1
    If cells(i,10)=cells(i+1,10) then nbegal=nbegal+1
    If cells(i,10)<cells(i+1,10) then nbsup=nbsup+1
    next i
     
    msgbox "Il y a eu :" & chr(13) & "-" & nbinf & " valeur inférieure à la précédente" &  chr(13) & "-" & nbegale & " valeur égale à la précédente" &  chr(13) & "-" & nbsup & " valeur supérieure à la précédente"
    Edit ayé je croi que j'ai compris je travail sur un code
    (par contre je croi que tu n'as pas trop compris l'utilisation des tableaux

  3. #3
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    ton problème se résoud facilement par des formules excel :
    j'ai mis des valeurs sur J2:J1500
    Nb de valeur 15 :
    Nb de suivants inférieurs à 15
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(($J$2:$J$1500=15)*($J$3:$J$1501<15))
    Nb de suivants supérieurs à 15
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(($J$2:$J$1500=15)*($J$3:$J$1501>15))

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Voila peut être que c'est ceci que tu souhaite faire

    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
    Dim liste As New Collection
    Dim i As Long, DerniereLigne As Long
    Dim k As Long, nbinf As Long, nbsup As Long, nbegal As Long
    Dim resultat() As Double
     
    DerniereLigne = Range("j65536").End(xlUp).Row
    On Error Resume Next
    For i = 1 To DerniereLigne
        liste.Add Cells(i, 10), CStr(Cells(i, 10))
    Next i
    On Error GoTo 0
    ReDim resultat(1 To 4, 1 To liste.Count)
    For k = 1 To liste.Count
    nbinf = 0
    nbsup = 0
    nbegal = 0
        For i = 2 To DerniereLigne - 1
            If Cells(i, 10) = liste.Item(k) Then
                If Cells(i, 10) > Cells(i + 1, 10) Then nbinf = nbinf + 1
                If Cells(i, 10) = Cells(i + 1, 10) Then nbegal = nbegal + 1
                If Cells(i, 10) < Cells(i + 1, 10) Then nbsup = nbsup + 1
            End If
        Next i
        resultat(1, k) = liste.Item(k)
        resultat(2, k) = nbinf
        resultat(3, k) = nbegal
        resultat(4, k) = nbsup
    Next k
    For k = 1 To liste.Count
    MsgBox "Il y a eu pour la valeur" & resultat(1, k) & " :" & Chr(13) & "-" & resultat(2, k) & " valeur inférieure qui suivaient" & Chr(13) & "-" & resultat(3, k) & " valeur égale qui suivaient" & Chr(13) & "-" & resultat(4, k) & " valeur supérieure qui suivaient"
    Next k
    Voila le contenu de ma colonne j
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    10
    10
    11
    11
    12
    12
    10
    10
    10
    9
    9
    11
    11
    9
    Hmm par contre pour tes 1500 valeur enlève peut être le message box c'est juste pour te montrer comment utiliser le tableau
    Le tableau a 2 dimension de taille
    4 et nombre de valeur différente
    la première dimmention permet a 1 davoir la valeur testé en 2 le nombre de valeur inférieur qui suivai, en 3 nombre de valeur égale et en 4 le nombre de valeur sup qui suivait.

    La deuxième dimension permet de passer d'un valeur testé a l'autre
    tu devrais pouvoir remplacer la dernière boucle par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil3").Range("A1:D" & liste.Count) = WorksheetFunction.Transpose(resultat)
    pour en faire un tableau dans une autre feuille

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Par défaut
    bonjour
    merci de vos reponses rapides .

    il est vrai que je peux me compliquer , parfois la tache ......

    j'ai à peine modifier le code pour mon affichage

    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
     
    Private Sub CommandButton1_Click()
     
     
    Dim liste As New Collection
    Dim i As Long, DerniereLigne As Long
    Dim k As Long, nbinf As Long, nbsup As Long, nbegal As Long
    Dim resultat() As Double
     
    DerniereLigne = Range("j65536").End(xlUp).Row
    On Error Resume Next
    For i = 2 To DerniereLigne
        liste.Add Cells(i, 10), CStr(Cells(i, 10))
    Next i
    On Error GoTo 0
    ReDim resultat(1 To 4, 1 To liste.Count)
    For k = 1 To liste.Count
    nbinf = 0
    nbsup = 0
    nbegal = 0
        For i = 2 To DerniereLigne - 1
            If Cells(i, 10) = liste.Item(k) Then
                If Cells(i, 10) > Cells(i + 1, 10) Then nbinf = nbinf + 1
                If Cells(i, 10) = Cells(i + 1, 10) Then nbegal = nbegal + 1
                If Cells(i, 10) < Cells(i + 1, 10) Then nbsup = nbsup + 1
            End If
        Next i
        resultat(1, k) = liste.Item(k)
        resultat(2, k) = nbinf
        resultat(3, k) = nbegal
        resultat(4, k) = nbsup
    Next k
    For k = 1 To liste.Count
    UserForm1.TextBox1.Value = UserForm1.TextBox1.Value & "Il y a eu pour la valeur" & resultat(1, k) & " :" & Chr(13) & "-" & resultat(2, k) & " valeur inférieure qui suivaient" & Chr(13) & "-" & resultat(3, k) & " valeur égale qui suivaient" & Chr(13) & "-" & resultat(4, k) & " valeur supérieure qui suivaient" & vbCrLf
    Next k 'Voila le contenu de ma colonne j
    merci à KRoVAX
    et aux autres

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

Discussions similaires

  1. Faire un update sur colonnes avec condition
    Par calou_33 dans le forum SQL
    Réponses: 2
    Dernier message: 05/03/2009, 17h33
  2. Probleme double clic sur colonne avec MsFlexgrid
    Par skywalker48 dans le forum IHM
    Réponses: 1
    Dernier message: 22/01/2009, 14h31
  3. Test sur une variable tableau évoluée
    Par p_12345 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/12/2007, 09h52
  4. Test sur formulaire avec liste des erreurs
    Par Nicos77 dans le forum Langage
    Réponses: 37
    Dernier message: 17/11/2005, 10h22
  5. Requete sur table avec Tableau
    Par Sichagadel dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/11/2005, 14h05

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