[VBA] Question de synthaxe je pense

Alanderson69 Messages postés 36 Statut Membre -  
Alanderson69 Messages postés 36 Statut Membre -
Bonjour,

Je voudrais améliorer un fichier Excel. Ce fichier comporte (au maximum) 52 onglets (1 par semaine de l'année).
Dans chaque onglet, les colonnes B et C comportent respectivement une référence et une quantité.
Dans un 53ème onglet appelé "Recherche", je souhaite effectuer la somme de toutes les quantités (total des 52 semaines) d'une référence écrite par l'utilisateur.
voila le programme que j'ai crée, mais qui malheureusement ne fonctionne pas :

Sub Calcul()
'
' Calcul Macro
' Macro enregistrée le 09/07/2009 par Alanderson

somme = 0

Dim Feuille As Worksheet
For Each Feuille In Worksheets
Sheets("Recherche").Select
Range("A5").Select
'A5 est la cellule dans laquelle je veux que le total apparaisse
ActiveCell.Formula = "=recherchev(A2,'" & Feuille & "'!B3:C60,2,Faux)"
'A2 est la cellule dans laquelle l'utilisateur entre la référence
somme = somme + Val(Range("A5").Value)
Next Feuille

Range("A5").Value = somme

End Sub

Le problème se pose apparemment sur la ligne soulignée.
Merci de jeter un oeil et de corriger mon erreur.

Alanderson
Configuration: Windows 2003
Firefox 3.0.11

14 réponses

  1. le père
     
    Bonjour

    je ne suis pas spécialiste, mais il me semble que les formules doivent être entrées en anglais dans le VB, même si après elles apparaissent en français dans la feuille
    ActiveCell.Formula = "=vlookup(A2,'" & Feuille.Name & "'!B3:C60,2,False)"

    Et s'il te plaît, plus jamais de h à "syntaxe"
    0
  2. Alanderson69 Messages postés 36 Statut Membre
     
    Oula ! je suis désolé pour le "h" ^^

    Le problème sur la formule de recherche a en effet disparu, mais j'ai un soucis sur la reconnaissance du format de la variable :

    somme = somme + Range("A5").Value

    Il me sort une erreur : Incompatibilité de type.
    J'ai essayé : Val(Range("A5").Value) pour convertir en nombre mais ça ne fonctionne pas non plus.

    Merci de me tenir au courant si tu vois une possibilité.
    0
  3. le père
     
    C'est sûrement que A5 contient autre chose qu'un nombre. Qu'y a-t-il donc dans A5 ?
    0
  4. le père
     
    Ok, vu. Quand la recherche n'aboutit pas, tu as la valeur #N/A et c'est là que tu as ton problème.
    Il ne faut faire l'addition que si le rechercheV aboutit :
    If IsNumeric(Range("A5").Value) Then somme = somme + Val(Range("A5").Value)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alanderson69 Messages postés 36 Statut Membre
     
    Eh bien, cela marche plutot bien ! Merci pour ca !
    Dernière petite nuance à laquelle je n'avais pas encore pensé :

    Si une référence est plusieurs fois dans la colonne B, est-ce possible de toutes les comptabiliser ?
    Pour le moment, il ne me prend que la première trouvée. Je pense qu'il dois falloir balayer toute la feuille et lui dire de poursuivre même s'il a trouvé une première valeur.
    Quelqu'un a une idée pour programmer ca ?

    Merci pour tout
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour à tous,

    Je ne vois pas l'intérêt d'utiliser des formules alors que l'on est en VBA..

    cette macro parcourt les feuilles en évitant la feuille "recherche" et teste si la valeur de A2 existe dans le tableau B3:B60

    Sub consolider()
    Dim valeur
    Dim Feuille As Worksheet
    Dim somme As Single, total As Single
    
    valeur = Sheets("recherche").Range("A2")
    
    For Each Feuille In Worksheets
       If Feuille.Name <> "recherche" Then
            With Feuille
                If Application.CountIf(Range("B3:B60"), valeur) > 0 Then
                    somme = .Range("B2:B60").Find(valeur, .Range("B2")).Offset(0, 1)
                End If
            End With
         total = total + somme
        End If
    Next
    
    Sheets("recherche").Range("A5") = total

    end sub

    Je ne connais l'ensemble du problème mais il y a une fonction consolider dans XL. peut-être que...
    voir ce site inconturnable
    http://boisgontierjacques.free.fr/
    0
  8. Alanderson69 Messages postés 36 Statut Membre
     
    michel_m,

    quand j'execute ta macro, le résultat qui me reviens est "0". D'après ce que tu as rentré comme info, j'attendrais un "67.5".

    De plus, s'il existe plusieurs toto dans la colonne d'une feuille, je ne pense pas que ca marche.

    C'est vraiment cool de ta part de te donner du mal.
    Peux-tu me dire si c'est réalisable ?

    Merci d'avance
    0
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    ben oui, mais fallait savoir qu'il pouvait y avoir plusieurs toto...Je dois m'absenter: en attendant, regarde dans l'exemple de l'aide de FIND ce serait à adapter au niveau de l'affectation de somme (ligne en italique)

    pour le 0, que je suis c... (le bruit des cigales, sans doute, pour justifier mon erreur ) ;-)
    l'affectation de total était mal placée!!!

    as tu regardé le site indiqué ?

    Sub consolider()
    Dim valeur
    Dim Feuille As Worksheet
    Dim somme As Single, total As Single
    valeur = Sheets("recherche").Range("A2")
    For Each Feuille In Worksheets
       If Feuille.Name <> "recherche" Then
            With Feuille
            test = Feuille.Name
                If Application.CountIf(Range("B3:B60"), valeur) > 0 Then
                    somme = .Range("B2:B60").Find(valeur, .Range("B2")).Offset(0, 1)
                     total = total + somme
                End If
            End With
         
        End If
    Next
    Sheets("recherche").Range("A5") = total
    End Sub
    


    0
  10. Alanderson69 Messages postés 36 Statut Membre
     
    j'ai regardé ton site, en effet, mais je n'ai pas trouvé l'info concernant le bouclage des ligne pour trouver plusieurs valeurs par page. J'essaye de regarder de plus près. Si je trouve, je laisserais un post ici. Dans le cas inverse, si tu peux continuer à me donner un coup de main, ca serait avec plaisir !

    Merci encore
    0
  11. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    ce que j'ai voulu dire:as tu regardé l'aide Microsoft pour FIND et son exemple ?
    c'est très simple à adapter: tu as juste à changer la plage de recherche (B3:B60) et
    c.value=2 en
    total=total+c.offset(0,1)
    plus besoin de la variable somme

    je te laisse terminer (chez moi, ca marche)

    bonne soirée
    0
  12. Alanderson69 Messages postés 36 Statut Membre
     
    Eh bien malgré 2 heures passées à essayer de faire fonctionner ce programme pourtant pas compliqué, ... je suis bloqué. Est-ce possible que tu m'envoies le programme s'il marche chez toi ? Je regarderaisalors comment tu as fait.

    Merci michel_m
    0
  13. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

    Moi aussi, j'ai passé et je continue de passer des heures à chercher et à me planter: c'est comme cela qu'on progresse TRES petit à petit.
    Donc... je t'ai mis en gras ce qui est à adapter à partir de l'aide MS, le reste de la proc est bonne (déclaration à changer)

    With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
    firstAddress = c.Address
    Do
    c.Value = 5 ==> total=total+c. (la cellule à gauche=)
    Set c = .FindNext(c)
    Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
    End With

    0
  14. Alanderson69 Messages postés 36 Statut Membre
     
    Est-ce possible que tu m'envoies le fichier sur Cjoint ?
    Le problème est que la valeur a chercher avec le Find est variable en fonction de ce que rentre l'utilisateur.
    J'ai essayé de créer une variable mais je n'arrive pas à l'appeler dans e Find .

    Merci d'avance !
    0