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 :

Fct : Range accès à une cellule par son "index" [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut Fct : Range accès à une cellule par son "index"
    Bonjour à tous,

    Voila je cherche à faire quelque chose de relativement simple je pense. Seulement n'ayant aucune notion en VBA, j'ai du mal à faire proprement ce que je veux.

    Je dis proprement car j'ai réussi à faire ce que je voulais ... mais pas élégamment ... D'où mon message.

    J'ai deux variables RANGE ressources et durees
    Je parcours ressources grâce à une boucle For Each ... Next
    A chaque itération j'ai un compteur qui me tient informé de combien d'itération j'ai fait : compteur

    Ma question est la suivante :
    Comment, à un instant t, accéder directement à la cellule compteur de ma variable durees ? (dans le but ensuite de récupérer la valeur de cette cellule).

    Comme parfois un bout de code vaut mieux qu'un long discours, en gros voila ce que j'ai mais que je voudrais plus élégant :

    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
     
    Function CalculTempsRessource(CodeReference As Integer, CodeRessource As Range, Duree As Range) As Variant
        ' On pourrait nettement mieux faire
        ' mais je ne sais pas comment faire
        ' pour accéder directement à un élement
        ' de Range
        '
        ' Je continue à chercher !
        Dim i As Integer
        Dim temps() As Double
        ReDim temps(0 To Duree.Count - 1)
        CalculTempsRessource = 0
        i = 0
        For Each Cell In Duree
            temps(i) = Cell.Value
            i = i + 1
        Next Cell
        i = 0
        For Each Code In CodeRessource
            If Code.Value = CodeReference Then
                CalculTempsRessource = CalculTempsRessource + temps(i)
            End If
            i = i + 1
        Next Code
    End Function
    En gros j'aimerais ne pas avoir à construire ce premier tableau ...


    Merci d'avance à quiconque m'aidera !

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Si tu as un numéro de colonne et un numéro de ligne tu peux accéder à ta cellule comme ça :

    Un exemple =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Macellule as range,Lig as double, Col as integer
    Lig = 1
    Col = 1
    Set Macellule = Cells(Lig,Col)

  3. #3
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Bonjour,

    Malheureusement non je n'ai pas de numéro de colonne et de ligne.

    Un exemple d'appel à cette fonction est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =CalculTempsRessource(A4;D2:D45;B2:B45)
    A la rigueur, est-ce que quelqu'un serait capable de me dire quels fonctions sont appelées dans l'utilisation de For Each ?

    Merci quand même d'avoir essayé !

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ce n'est pas la fonction SOMME.SI par hasard?

    Quand même, j'ai regroupé tes 2 boucles (en ayant supposé que les 2 plages ont la même taille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function CalculTempsRessource(ByVal CodeReference As Integer, CodeRessource As Range, Duree As Range)
    Dim Cel As Range
    Dim coldif As Integer, ligdif As Integer
     
    coldif = Duree.Cells(1, 1).Column - CodeRessource.Cells(1, 1).Column
    ligdif = Duree.Cells(1, 1).Row - CodeRessource.Cells(1, 1).Row
     
    For Each Cel In CodeRessource
        If Cel.Value = CodeReference Then
            CalculTempsRessource = CalculTempsRessource + Cel.Offset(ligdif, coldif).Value
        End If
    Next Cel
    End Function

  5. #5
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Bonjour,

    Si effectivement c'était exactement cette fonction que je cherchais (SOMME.SI) ... Mais je ne la connaissais pas ...
    Merci pour l'info,


    Par contre pour des raisons plus personnelles, si quelqu'un à la réponse à ma question initiale je suis toujours preneur


    Merci

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Le bout de code, ne répondait pas à la question?

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

Discussions similaires

  1. Sélection d'une cellule par son adresse
    Par Sherman750 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/12/2014, 21h40
  2. [XL-2007] Trouver une cellule par son nom
    Par jmh51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/08/2013, 12h53
  3. Réponses: 3
    Dernier message: 08/09/2008, 21h20
  4. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33

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