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 :

Ranger des chiffres par catégories [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut Ranger des chiffres par catégories
    Bonjour à tous,

    Ravi de poser ma première question sur ce forum ! J'ai déjà pu me sortir de bien des situations grâces à celui-ci (merci à vous!!)! Mais aujourd'hui... je bloque.


    Voici mon problème :

    (le doc Excel est en pièce jointe)
    J'ai une liste de valeurs correspondant à des températures en colonne C (elles sont dans le désordres)

    Je souhaite connaître le nombre de valeurs correspondant à des catégories, exemple : nombre de valeurs comprises entre 190°C et 200°C, nombre de valeurs comprises entre 180° et 190° (etc...) que je souhaite placer en colonne F.

    Malheureusement je n'arrive pas à faire ce que je souhaite (je suis débutant en vba). Au lieu de me dire combien de valeur il y a par catégorie, la macro me met toutes les valeurs dans la première case F3 . Voici mon code :

    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
     
    Sub categorie_delta_dt()
    'Cette macro me permet de classer les variations de température par catégorie afin d'obtenir l'histogramme recherché
     
    'la ligne ci-dessous permet de réaliser la macro plus vite car l'affichage n'est pas fait au fur et à mesure
    Application.ScreenUpdating = False
     
        Dim anumero_ligne As Integer, nb_ligne As Integer
        anumero_ligne = 301
        nb_ligne = 3
     
        While anumero_ligne > nb_ligne
     
            If 190 < cells(anumero_ligne, 3) < 200 Then
            cells(3, 6) = cells(3, 6) + 1
     
            ElseIf 180 < cells(anumero_ligne, 3) < 190 Then
            cells(4, 6) = cells(4, 6) + 1
     
            ElseIf 170 < cells(anumero_ligne, 3) < 180 Then
            cells(5, 6) = cells(5, 6) + 1
     
            ElseIf 160 < cells(anumero_ligne, 3) < 170 Then
            cells(6, 6) = cells(6, 6) + 1
     
            ElseIf 150 < cells(anumero_ligne, 3) < 160 Then
            cells(7, 6) = cells(7, 6) + 1
     
            Else
     
            End If
            anumero_ligne = anumero_ligne - 1
     
        Wend
     
    Application.ScreenUpdating = True
     
    End Sub

    Voyez-vous un problème dans mon code? Avez-vous des idées pour solutionner cela ?

    Merci d'avance,
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 113
    Par défaut
    Bonjour Hugo,

    Pq passer par une macro là où, à mon avis, un TCD devrait suffire ?

  3. #3
    Membre éprouvé Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 104
    Par défaut
    Bonjour et bienvenu !

    Quelques petites questions/remarques :

    - Pourquoi décrémente tu anumero_ligne au lieu de faire un for qui va parcourir toute ta colonne (ce serai plus simple je trouve) ?
    - Fait attention à tes tests : Si une valeur est égale a 190° par exemple, elle ne sera pas prise en compte car exclue de tes tests (pense au <= )

    Bonne journée

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Guy7700 Voir le message
    Pq passer par une macro là où, à mon avis, un TCD devrait suffire ?
    Il serait aussi possible de se contenter de l'utilisation de la fonction FREQUENCE() qui fait ça très bien et qui a l'avantage de s'actualiser dynamiquement.
    https://support.office.com/fr-FR/art...7-fd9ea898fdb9
    Attention, c'est une fonction matricielle donc à valider avec Ctrl+Shift+Entrée.

    Cette fonction est (pour simplifier) l'équivalent d'une succession de NB.SI.ENS() bornés, donnant le nombres d'occurrences de valeurs source selon une échelle donnée.
    Ca semble donc correspondre exactement à ce que tu demandes.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il serait aussi possible de se contenter de l'utilisation de la fonction FREQUENCE() qui fait ça très bien et qui a l'avantage de s'actualiser dynamiquement.
    https://support.office.com/fr-FR/art...7-fd9ea898fdb9
    Attention, c'est une fonction matricielle donc à valider avec Ctrl+Shift+Entrée.

    Cette fonction est (pour simplifier) l'équivalent d'une succession de NB.SI.ENS() bornés, donnant le nombres d'occurrences de valeurs source selon une échelle donnée.
    Ca semble donc correspondre exactement à ce que tu demandes.
    Salut Menhir,

    Merci beaucoup pour le partage de cette fonction que je ne connaissais pas, c'est exactement ce que je souhaite faire, sauf que je voudrais pouvoir automatiser ce processus via une macro de sorte que l'utilisateur n'ai qu'à appuyer sur un bouton plutôt que de devoir entrer la fonction à la main.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Hugodjo Voir le message
    sauf que je voudrais pouvoir automatiser ce processus via une macro de sorte que l'utilisateur n'ai qu'à appuyer sur un bouton plutôt que de devoir entrer la fonction à la main.
    Une fois que la fonction est en place, il n'est pas nécessaire d'appuyer sur un bouton, elle remets à jour ses résultat toute seule, comme toutes les fonctions.
    Vu que dans ta macro les numéros de lignes sont "en dur" dans le code, il ne sera pas plus simple à l'utilisateur de la modifier.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    si tu fais un TCD ou même un graphique croisé dynamique ta macro se résumera à 1 ligne : le rafraîchissement du TCD.
    eric

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Une fois que la fonction est en place, il n'est pas nécessaire d'appuyer sur un bouton, elle remets à jour ses résultat toute seule, comme toutes les fonctions.
    Vu que dans ta macro les numéros de lignes sont "en dur" dans le code, il ne sera pas plus simple à l'utilisateur de la modifier.
    Menhir,

    Merci pour ta réponse. En effet les numéros de lignes sont "en dur" mais c'est parce que je ne savais pas comment faire pour aller chercher la dernière ligne de mon tableau (mais maintenant j'ai trouvé comment faire ).
    Je cherche donc toujours à automatiser ce processus, car le nombre de lignes peut varier.
    J'ai fais quelques recherches et pris en compte vos remarques voici le code que j'ai actuellement (j'ai toujours le même problème qu'initialement, on dirait qu'Excel ne prend pas en compte mes comparaisons "160 < cells(i, 3) < 170". A chaque fois que j'exécute la macro, Excel ajoute +150 dans la cellule correspondant à la première catégorie [190;200] ... ) :

    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
     
    Sub categorie_delta_dt()
    'Cette macro me permet de classer les variations de température par catégorie afin d'obtenir l'histogramme recherché
     
    'la ligne ci-dessous permet de réaliser la macro plus vite car l'affichage n'est pas fait au fur et à mesure
    Application.ScreenUpdating = False
     
        Dim numero_ligne As Integer
        numero_ligne = Range("C" & Rows.Count).End(xlUp).Row
     
     
        For i = 3 To numero_ligne
     
     
            If 190 < cells(i, 3) < 200 Then
            cells(3, 6) = cells(3, 6) + 1
     
            ElseIf 180 < cells(i, 3) < 190 Then
            cells(4, 6) = cells(4, 6) + 1
     
            ElseIf 170 < cells(i, 3) < 180 Then
            cells(5, 6) = cells(5, 6) + 1
     
            ElseIf 160 < cells(i, 3) < 170 Then
            cells(6, 6) = cells(6, 6) + 1
     
            ElseIf 150 < cells(i, 3) < 160 Then
            cells(7, 6) = cells(7, 6) + 1
     
            Else
     
            End If
            i = i + 1
            Next
     
    Application.ScreenUpdating = True
     
    End Sub
    Une idée de la raison du problème ?

    Merci d'avance,

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Par défaut
    Citation Envoyé par Guy7700 Voir le message
    Bonjour Hugo,

    Pq passer par une macro là où, à mon avis, un TCD devrait suffire ?
    Salut Guy7700,

    Car je souhaite automatiser le processus, de sorte qu'une personne qui ne connaisse pas le document n'ait qu'à appuyer sur un bouton pour obtenir la liste par catégorie.
    Mon objectif final étant d'obtenir un Histogramme : nombre/catégorie

    Bien à toi,

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

Discussions similaires

  1. PROC FORMAT remplaçant des chiffres par des noms de variables
    Par joyeux_lapin13 dans le forum SAS Base
    Réponses: 11
    Dernier message: 09/06/2011, 09h09
  2. [Débutant] [fprintf] alignement des chiffres par rapport au dernier
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 6
    Dernier message: 24/05/2011, 12h04
  3. Regroupement des données par catégorie
    Par Niagala dans le forum Excel
    Réponses: 3
    Dernier message: 07/11/2007, 10h19
  4. remplacer des chiffres par des lettres, & vis versa
    Par Argorate dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/08/2006, 19h36

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