[VBA] Question de synthaxe je pense

Fermé
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009 - 9 juil. 2009 à 13:24
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009 - 10 juil. 2009 à 10:12
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

14 réponses

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
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
9 juil. 2009 à 13:41
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
C'est sûrement que A5 contient autre chose qu'un nombre. Qu'y a-t-il donc dans A5 ?
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
9 juil. 2009 à 14:16
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 juil. 2009 à 14:22
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 juil. 2009 à 14:41
0
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
9 juil. 2009 à 14:46
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 juil. 2009 à 15:15
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
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
9 juil. 2009 à 15:20
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 juil. 2009 à 17:38
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
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
10 juil. 2009 à 09:04
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 juil. 2009 à 09:17
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
Alanderson69 Messages postés 35 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
10 juil. 2009 à 10:12
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