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 :

Somme sur valeur texte cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Points : 151
    Points
    151
    Par défaut Somme sur valeur texte cellule
    Bonjour, je débute en VBA et j'ai besoin de faire une somme conditionnelle particulière. La taille de mon tableau est variable, et le contenu des cellules est au format texte m'indiquant des noms d'objets.
    Le but de la manip est de lire chaque cellule et un peu a la maniere d'une programmation shell, faire un somme des itérations; je m'explique

    soit le tableau contenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    blanc
    bleu
    rouge
    rouge
    vert
    orange
    ...
    Je veux sortir dans une nouvelle feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    blanc | 1
    bleu   | 1
    rouge | 2
    ...
    Si quelqu'un de généreux pouvait m'aider rien qu'à trouver dans la faq car aprés un peu de recherches, pas de réponses.

    Merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bonjour rikau,
    Tu tiens à le faire par macro ?
    Si oui, peux-tu trier ton tableau ?
    Sinon, regarde la fonction Excel NBVAL
    Tu peux également utiliser cette fonction dans VBA.
    A+

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'avais un code pour supprimer les doublons sans trier les données qu'on peut utiliser dans ton cas mais t'expliquer les modifs à effectuer pour l'adapter aurait été plus compliqué que de le faire...
    Le principe :
    Un tableau à deux dimensions :
    Dimension 0 => Le nom du produit
    Dimension 1 => Le compteur
    Dans une première boucle sur les lignes de la plage de données
    - Tant que ligne "visible" et renseignée
    - Mémoriser le nom du produit dans le tableau (0, NomProduit)
    Dans une seconde boucle (imbriquée dans boucle1
    - Tant que produit trouvé,
    -> incrémenter le compteur du produit
    (Tableau(1, Compteur) = Tableau(1, Compteur) + 1)
    -> Masquer la ligne
    - Fin boucle2 -> Produit non trouvé
    - Incrémentation du N° de ligne
    -Fin Boucle1 -> Plus de ligne visible ou renseignée
    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
    Option Explicit
     
    Sub ListerNombreDeProduits()
    Dim FL1 As Worksheet, NB As Integer
    Dim Valeur() As String, c As Range, i As Integer, j As Integer
    Dim NoLigne As Long, DerLig As Long
        Set FL1 = Worksheets("Feuil1")
        NoLigne = 2 'en supposant que les noms de produits commencent à la ligne 2
        Do
            If Not Cells(NoLigne, 1) = "" And Not Rows(NoLigne).Hidden Then
                i = i + 1
                ReDim Preserve Valeur(0 To 1, i)
                Valeur(0, i) = Cells(NoLigne, 1)
                Valeur(1, i) = 1
                Do
                    With FL1.Range("A" & NoLigne + 1, [A65536].End(xlUp))
                        DerLig = 0
                        Set c = .Find(Valeur(0, i), LookIn:=xlValues, LookAt:=xlWhole)
                        If Not c Is Nothing Then
                            If c.Row > NoLigne Then
                                Valeur(1, i) = Valeur(1, i) + 1
                                DerLig = c.Row
                                Rows(c.Row).EntireRow.Hidden = True
                            End If
                        End If
                        Set c = Nothing
                    End With
                Loop While DerLig > NoLigne
            End If
            NoLigne = NoLigne + 1
        Loop While NoLigne < FL1.Range("A65536").End(xlUp).Row
        'Affichage
        For j = 1 To i
            MsgBox "Qu de " & Valeur(0, j) & " = " & Valeur(1, j)
        Next
        FL1.Cells.EntireRow.Hidden = False
    End Sub
    On peut faire ça avec une collection mais là, je n'ai pas le code
    Tu ne dis pas où tu veux placer le résultat, tu sauras adapter ?
    A+

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Points : 151
    Points
    151
    Par défaut
    Oui je peux trier le tableau, mais en affichage je le laisse trier sur une autre colonne.
    Le fait de le faire en macro permet je pense de lancer les "calculs" et permettre de faire les tri voulus.
    Je ne suis pas complètement contre un petit bout de code existant

    Cordialement

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu as testé le code que je t'ai mis et qui évite le tri ?

    PS - Adapte le N° de colonne (A ou 1 dans mon code) à celui de la colonne concernée

  6. #6
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Points : 151
    Points
    151
    Par défaut
    Désolé de la prise de temps de réponse, déplacement pro oblige...

    J'ai testé ton code et une erreure d'execution apparait vers cette boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With FL1.Range("A" & NoLigne + 1, [A65536].End(xlUp))
    Je suis à la recherche de ce qui coince mais pour l'instant je n'ai pas eu trop le temps de tester.

    Une question quand meme.Dans ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        NoLigne = 2 'en supposant que les noms de produits commencent à la ligne 2
        Do
            If Not Cells(NoLigne, 1) = "" And Not Rows(NoLigne).Hidden Then
                i = i + 1
                ReDim Preserve Valeur(0 To 1, i)
                Valeur(0, i) = Cells(NoLigne, 1)
                Valeur(1, i) = 1
                Do
                    With FL1.Range("A" & NoLigne + 1, [A65536].End(xlUp))
                        DerLig = 0
    Si avant le With je fais un print de NoLigne , j'obtiens 4 à la première execution, normale?

    Merci quand meme pour le temps consacré de ta part je vais m'y mettre plus profondement dans le week-end.

    Cordialement

    np 3/12/2007 11:35: Finalement apres un bon week end de repos, la solution se trouvait tout simplement dans le tableau croisé dynamique...

    Merci encore pour l'aide apportée.

    Cordialement

    rikau2

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

Discussions similaires

  1. [XL-2010] Somme de valeur suivant condition sur cellule
    Par EricBOG dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/07/2013, 11h30
  2. Remplissage de tableau à partir de condition sur valeurs de cellule
    Par 00seb dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/05/2012, 15h05
  3. Réponses: 3
    Dernier message: 06/04/2012, 14h31
  4. [XL-2007] Somme sur Nombre Texte
    Par aCe_GiK dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2011, 14h58
  5. Somme suivant valeur texte
    Par Pierrot_rennes dans le forum Excel
    Réponses: 4
    Dernier message: 09/09/2008, 13h48

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