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 :

compter le nombre de caractères max dans une colonne.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    technique
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : technique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Par défaut compter le nombre de caractères max dans une colonne.
    Bonjour,

    je requière à nouveau votre aide car je bloque !

    je souhaite afficher en bas d'un tableau le nombre de cratères maximum par colonne... mais.... ! j'ajoute des variable à la pelle pour m'assurer que les valeurs sont bien prisent en compte... rien y fait.

    voici ce que j'ai écris :

    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
    Sub nb_car()
     
    'déclaration
     
    Dim nb_ As Double
    Dim nb_max As Double
    Dim act_cell As Range
    Dim nbcol As Integer
    Dim nbrow As Double
     
     
    'ne met pas à jour l'affichage pendant l'execution de la macro
    Application.ScreenUpdating = False
     
    'donne une valeur aux variable en comptant le nombre de colonnes et le nb de lignes
    nbcol = ActiveSheet.UsedRange.Columns.Count    'Cells(1, Columns.Count).End(xlToLeft).Column
    nbrow = ActiveSheet.UsedRange.Rows.Count       'Cells(Rows.Count, 1).End(xlUp).Row
        'MsgBox (nbcol)
        'MsgBox (nbrow)
     
     
    For i = 1 To nbcol
     
        nb_ = 0
        nb_max = 0
     
        For j = 2 To nbrow
            act_cell = ActiveSheet.Cells(j, 1).Activate
     
            nb_ = Len(act_cell)
                If nb_ > nb_max Then
                nb_max = nb_
                End If
        Next j
     
            Range(nbrow + 1, i).Value = nb_max
     
    Next i
     
     
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Beaucoup d'erreurs et/ou incohérences que je vais te laisser d'abord essayer de corriger seul :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim nb_ As Double
    Dim nb_max As Double
    je vois mal comment un nombre de caractères pourrait être décimal . (bien que ce typage en double soit superfétatoire, mais non la cause de ta difficulté principale)
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    act_cell = ActiveSheet.Cells(j, 1).Activate
    a) ce n'est pas la cellule J,1, mais la cellule J,i , qu'il te faut regarder
    b) que vient ici faire ce 'Activate ?
    c) une cellule étant un objet, l'instruction Set est nécessaire pour lui affecter une variable .

    Je reviendrai vers toi au vu des corrections que tu auras apportées sur ces bases.

  3. #3
    Membre averti
    Homme Profil pro
    technique
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : technique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Par défaut merci pour tes remarques
    Merci Unparie pour ton aide.

    effectivement le nombre de caractère ne sera pas décimal.

    concernant la cellule (j,1) est un oubli de ma part, j'ai limiter les boucles pour essayer de trouver la solution ou les erreurs. j'avais donc désactivé la boucle For i...

    par contre, que viens faire le .Activate ... et bien ... pour activer la cellule pour laquelle je veux avoir le nombre de caractère ? mais si tu pose la question c'est que ce n'est pas utile voir problématique.

    et oui Set ... merci;-)

    j'ai fait un peu de ménage, mais maintenant, c'est ce qui fonctionné précédemment qui s'allume en jaune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbrow = ActiveSheet.UsedRange.Rows.Count
    sinon voila les modif que j'ai apportées :
    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
    Sub nb_car()
     
    'déclaration
    Dim nb_ As Integer
    Dim nb_max As Integer
    Dim act_cell As Range
    Dim nbcol As Integer
    Dim nbrow As Integer
     
    'ne met pas à jour l'affichage pendant l'execution de la macro
    Application.ScreenUpdating = False
     
    'donne une valeur aux variables en comptant le nombre de colonnes et le nb de lignes
    nbcol = ActiveSheet.UsedRange.Columns.Count    'Cells(1, Columns.Count).End(xlToLeft).Column
    nbrow = ActiveSheet.UsedRange.Rows.Count       'Cells(Rows.Count, 1).End(xlUp).Row
        'MsgBox (nbcol)
        'MsgBox (nbrow)
     
    For i = 1 To nbcol
        nb_ = 0
        nb_max = 0
     
        For j = 2 To nbrow
            act_cell = Cells(j, i)
            nb_ = Len(act_cell)
                If nb_ > nb_max Then
                nb_max = nb_
                End If
        Next j
     
        Set Range(nbrow + 1, i).Value = nb_max
     
    Next i
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sauf si l'utilisation du VBA est indispensable pour le projet, la formule matricielle ci-dessous permettra d'apporter la réponse
    Exemple 1 - Plage normale
    Exemple 2 - Plage d'un tableau structuré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=MAX(NBCAR(T_Contact[Nom]))}
    Pour valider une formule matricielle Ctrl+Maj+Entrée
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Homme Profil pro
    technique
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : technique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Par défaut merci :-)
    cela fonctionne parfaitement pour ce que je souhaite faire. un grand merci


    effectivement je n'ai pas nécessairement besoin d'un macro. Je ne pense pas aux fonctions matricielle !



    je reste cependant curieux de la rédaction d'une macro.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    je reste cependant curieux de la rédaction d'une macro.
    ainsi, par exemple et si l'on ne veut pas trop s'éloigner de ton premier mécanisme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim nb As Integer, nb_max As Integer, nbrow As Long, k As Long, n As Long
    Application.ScreenUpdating = False
    nbrow = ActiveSheet.UsedRange.Rows.Count
    For k = 1 To ActiveSheet.UsedRange.Columns.Count
        nb_ = 0
        nb_max = 0
        For n = 2 To nbrow
           nb = Len(ActiveSheet.Cells(n, k).Text)
           If nb > nb_max Then nb_max = nb
        Next
        Cells(nbrow + 1, k).Value = nb_max
    Next
    Application.ScreenUpdating = False

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Citation Envoyé par 20dxxx Voir le message
    [...]
    je reste cependant curieux de la rédaction d'une macro.
    Voir ma signature...

    Tu peux utiliser Evaluate("MAX(LEN(A1:A104))") en transposant la solution de Philippe. Avec Evaluate, Excel n'a pas besoin de la validation matricielle

    Nom : 2019-11-18_060844.png
Affichages : 1174
Taille : 17,6 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Compter le nombre de caractères identiques dans une chaine
    Par patricktoulon dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/08/2019, 17h15
  2. Compter le nombre de caractères contenus dans une balise HTML
    Par adissa357 dans le forum Général Java
    Réponses: 2
    Dernier message: 16/10/2013, 13h19
  3. compter le nombre de valeurs distinctes dans une colonne
    Par huître dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/06/2011, 19h31
  4. [MySQL] Compter le nombre de valeurs identiques dans une colonne d'une table
    Par luca120 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 00h40
  5. Réponses: 28
    Dernier message: 11/10/2006, 22h36

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