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 :

Récupération de valeur par VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut Récupération de valeur par VBA
    Bonjour un tous ...
    Bon voila la situation. Pour etre claire je vais détailler vite fait
    Disons que col A j'ai des noms de produits "c" et que col B j'ai des valeurs. Les mêmes nom sont répartie aléatoirement (ex: A1 - A15 - A20).
    J'aimerais pouvoir additionner chacune des valeurs "d" correspondantes et renvoyer le resultats dans une autre cellule ... J'espère avoir été assez précis ! Je vous passe le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    With Application.ActiveCell
                            ActiveSheet.Cells.Find(Det1, LookAt:=xlWhole).Activate
                            NumCol = .Column
                            End With
                                Sheets(Det1).Activate
                                Do
                                a = a + 1
                                c.Offset(columnOffset:=10).Activate
                                Selection.Copy
                                Sheets("BILAN PERTE").Cells(NumLg, a).PasteSpecial (xlPasteValues)
                                d = c.Offset(columnOffset:=1).Value
                                res = d + c.Offset(d).Value 'ICI CA NE PASSE PAS'
                                Set c = Sheets(Det1).Cells.FindNext(c)
                                Loop While Not c Is Nothing And c.Address <> firstAddress
    Mes variables sont toutes définies
    Le code est un peu plus long et je pense que c'est pas nécessaire que vous l'ayez en entier. Mais si vous preferer je vous le donne.
    Si vous trouver l'erreur ...
    Merci pour le coup de

  2. #2
    Membre éprouvé Avatar de zebulon2212
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    1 commence par donner a tes nom de variables des noms plus parlant
    2 declare tes variable au debut de ta fonction
    3 indente ton code pour qu'il soit plus clair
    4 sert toi des balise [ CODE][ /CODE] pour mettre ton code sur le forum

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Par défaut
    Salut Toad08, Salut Forum,

    pourquoi utiliser un code VBA et pas une fonction excel du genre somme.si(...) ?

    Si c'est juste pour récupérer une somme de valeur avec un critère je pense que ca sera plus simple... et s'il y a plus de critère, il y a toujours l'écriture matricielle...

    et si tu veux réutiliser le résultat dans ton code, tu pourras toujours appeler la valeur de la cellule non ?

    A moins que je n'ai pas très bien compris...

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    En effet comme l'a souligné zebulon, pas évident de s'y retrouver sans vraiment savoir ce que signifie chaque variable

    A vue de nez, je vois un premier truc qui cloche dans ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = d + c.Offset(d).Value 'ICI CA NE PASSE PAS'
    Offset(d) ? Offset doit avoir 2 valeurs Offset(1, 2)
    1 étant le décalage de ligne et 2 le décalage de colonne

  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Désolé de vous répondre un peu tard ....
    Bon je vous donne un peu plus du code, je pense que ce sera plus clair ainsi.
    Pour résumer je voudrais juste savoir si il est possible d'utiliser la fonction "Offset" pour une valeur de variable. Quand j'ecris "d + c.Offset(d).Value" je pensais qu'il additionnerai la nouvelle valeur "d" puis l ancienne par "Offset(d)"


    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
     Dim NomduMois as String
    Dim c, NumLg, NumCol, res, d as Variant
     
    Set c = Sheets(NomduMois).Cells.Find(NomProduit, LookAt:=xlWhole) "LA JE TROUVE LE NOM DU PRODUIT RECHERCHE SUR LA FEUILLE 1"
        If Not c Is Nothing Then
        firstAddress = c.Address                
        a = 2
        Sheets("BILAN PERTE").Activate
        ActiveSheet.Cells.Find(NomProduit, LookAt:=xlWhole).Activate
            With Application.ActiveCell
            NumLg = .Row
            End With "ICI J'AI FIXE LA LIGNE SUR LA FEUILLE "BILAN PERTE" OU JE VEUX QUE CHAQUE VALEURS SOIENT COLLE"
              Do
              a = a + 1
              c.Offset(columnOffset:=10).Activate
              Selection.Copy
              Sheets("BILAN PERTE").Cells(NumLg, a).PasteSpecial (xlPasteValues) "ICI JE LUI DIS DE COLLER SUR LA MEME LIGNE CHAQUE VALEUR QU'IL TROUVERA LES 1 A LA SUITE DES AUTRES"
                      d = c.Offset(columnOffset:=1).Value "LA JE VOUDRAIS QUE SUR LA FEUILLE 1, d CORRESPONDE A UNE 2ème VALEUR ETANT TJRS SUR LA LIGNE NomProduit" 
                      result = d + c.Offset(d).Value 'ICI CA NE PASSE PAS, JE VOUDRAIS QU'IL ADDITIONNE LES VALEURS A CHAQUE QU'IL TROUVE NomProduit" POUR QUE result SOI LE RESULTAT DE TT LES VALEURS ADDITIONNE
                         Set c = Sheets(Det1).Cells.FindNext(c)
                         Loop While Not c Is Nothing And c.Address <> firstAddress
         Else
         Exit Sub
         End if
    Bon j'espère avoir été plus précis dans mon problème .... Merci pour l'aide en tout cas ...

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Apparement tu ne saisis pas très bien le fonctionnement d'un Offset donc je vais essayer d'expliquer plus clairement

    Offset(columnOffset:=10) c'est ok mais plus simple de l'écrire Offset(0, 10), imagine que tu dois faire un décalage de 2 lignes et de 2 colonnes, tu devrais écrire Offset(RowOffset:=2, ColumnOffset:=2) alors que Offset(2, 2) suffit.

    Donc en supposant que ta variable d = 5, si tu dis Offset(d) bin...il doit faire l'Offset dans quel sens, à gauche, à droite, en haut, en bas ? Offset de 5 lignes ou Offset de 5 colonnes ? Comme il n'est pas devin, il va buguer sur cette ligne.

    En résumé, oui tu peux effectuer un Offset avec une variable mais comme ceci : Offset(d, 0) ou Offset(0, d) ou Offset(-d, 0) ou Offset(0, -d)

    Voilà, @+

  7. #7
    Membre averti
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Donc si j'ai bien compris on peux utiliser la fonction"Offset" uniquement par rapport à une cellule et non par rapport a une valeur ? Je veux dire que si o 1er Loop il trouve 6 et au 2ème il trouve 9 ... Offset ne pourra pas me permettre de recuperer la valeur 6 ??
    Les valeurs qui sont recherché et que je veux qu'ils calculent sont dans des lignes differentes mais dans la meme colonne.
    Donc si je lui dis de faire un "Offset (d,0)" il reviendra sur la cellule contenant la precedente valeur ; située sur la ligne precedente ou il avait trouvé le NomProduit ?

  8. #8
    Membre averti
    Inscrit en
    Février 2008
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 33
    Par défaut
    Salut a tous,Et bien a force de preserver et par vos coup de pouce je viens de trouver la solution !!
    D'abord il a fallu que je passe les "With" ou je definie : NumLg et NumCol avant le "with" ou je met "Set c....." (Je sais par pourquoi d'ailleurs mais ca marche maintenant)
    Ensuite j'ai remplacé :

    result = d + c.Offset(d).Value

    Par

    result = d + result (en ayant mis avant le "Do" result=0

    Car en fait ma valeur "result" sera toujours egal a la valeur précédente car il varie pas ...
    Et oui tout simplement
    Bon ca a l'air compliqué tout sa ... et ca l'ai pour moi mais bon sa peu peu etre aidé qqn !!

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bon...j'allais y venir

    Tu peux supprimer la ligne
    et directement écrire à la place de d = c.Offset(columnOffset:=1).Value
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = result + c.Offset(columnOffset:=1).Value

    @+

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

Discussions similaires

  1. [XL-2010] copier collage spécial les valeurs par VBA
    Par Obelix77 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/06/2015, 23h02
  2. [XL-2007] Associer deux valeurs par VBA
    Par AgriPhilou dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 10/07/2011, 21h59
  3. Récupération de valeurs par défaut
    Par Stouille89 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/08/2008, 08h28
  4. Comment faire un regroupement de valeur par VBA?!
    Par athos7776 dans le forum IHM
    Réponses: 3
    Dernier message: 10/07/2007, 17h42
  5. [VBA-A] Valeur par défaut
    Par chetflo dans le forum IHM
    Réponses: 5
    Dernier message: 22/12/2005, 13h22

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