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 chevronné Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 402
    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.

  2. #2
    Expert éminent


    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
    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


    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
    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 chevronné Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 402
    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

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

Discussions similaires

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

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