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 :

[VBA] Parcourir une plage de cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut [VBA] Parcourir une plage de cellule
    Bonsoir,

    Je souhaite créer une fonction qui effectue le traitement suivant :

    MaFunction(plage,searchwhat,numcolonne)

    Plage correspond à une plage de cellule et numcolone à un numéro de colonne contenant les valeurs dans la plage de cellules selectionnée.
    serachwhat correspond à une clé à trouver dans la plage de données.

    par exemple

    VAR1 TOTO 4
    VAR2 TITI 4
    VAR3 TOTO 3
    VAR1 FFF 2
    VAR2 RRR 5

    Ma fonction aura en paramètre la plage de cellule allant de VAR1 (en haut à gauche) à 5 en bas à droite et la valeur 3 correspondant à la 3eme colonne puisque c'est elle qui contient les valeurs.

    le but est d'avoir à la sortie :
    VAR1 6 (4+2)
    VAR2 9 (4+5)
    var3 3 (3)

    J'ai donc crée une fonction qui devait lire une plage de donnée, repérer les valeurs de la plage et faire les somme des chiffres correspondant

    peut être qu'avec les formule excel c'est possible mais je n'y arrive pas.

    j'ai fait ceci :


    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
     
    Function grade2(PlageACopier As Range, what)
     
    Dim numberofcellulle As Integer
    numberofcellulle = PlageACopier.Count
     
    Dim nb As Integer
    nb = 0
     
    Dim i As Integer
    Dim j As Integer
     
    For i = 0 To PlageACopier.Columns.Count
     
        For j = 0 To PlageACopier.Rows.Count
        Dim s As String
     
        If s = PlageACopier.FormulaR1C1(i + 1, j + 1) Then
            nb = nb + 1
        End If
     
        Next j
    Next i
     
    garde2 = nb
    End Function
    mais mon "if" ne fonctionne pas, je ne parvient pas à récupérer les valeurs de mes cellules. Parfois je récupére la formule et ça ne me convient pas non plus. J'ai essayé Value à la place de FormulaR1C1 mais sans succés

    Merci pour votre aide.
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    déjà pour ce qui est de la formule Excel tu peu ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI($A$1:$A$5;"VAR1";$C$1:$C$5)
    avec $A$1:$A$5 := Plage de recherche

    et $C$1:$C$5 : Colonne à 'Sommer'


  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ensuite pour ton code ...

    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlageACopier.FormulaR1C1(i + 1, j + 1)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlageACopier.Cells(i + 1, j + 1)
    par contre je n'ai pas compris ce que tu voulais faire exactement .. avec tes 2 boucles for imbriquée ...

    tu pourrai modifier ton code ainsi :
    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
    Function grade2(PlageACopier As Range, what) As Integer
     
    Dim numberofcellulle As Integer
    numberofcellulle = PlageACopier.Count
     
    Dim nb As Integer
    nb = 0
     
    Dim j As Integer
     
     
    For j = 0 To PlageACopier.Rows.Count
     
        If what = PlageACopier.Cells(j + 1, 1) Then
            nb = nb + PlageACopier.Cells(j + 1, 3) 'Rajoute colonne 3...
     
        End If
     
    Next j
     
    grade2 = nb
    End Function

  4. #4
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut
    merci beaucoup.
    la formule excel focntionne très bien et je préfère éviter les macros quand c'est possible.

    Je regarde le code tout à l'heure mais c'est résolu avant !

    Grand merci
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2014, 09h06
  2. Parcourir une plage de cellules
    Par youbewt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2013, 22h03
  3. [VBA]Parcourir une liste de cellule
    Par mwa33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/04/2007, 13h20
  4. VBA Effacer une plage de cellules
    Par monsterfab dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2006, 18h18
  5. [VBA] Copier une plage de cellules dans un fichier fermé
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 17h52

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