[VBA] Question de synthaxe je pense
Alanderson69
Messages postés
36
Statut
Membre
-
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
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
A voir également:
- [VBA] Question de synthaxe je pense
- Excel compter cellule couleur sans vba - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Find vba - Astuces et Solutions
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
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"
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"
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é.
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é.
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)
Il ne faut faire l'addition que si le rechercheV aboutit :
If IsNumeric(Range("A5").Value) Then somme = somme + Val(Range("A5").Value)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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/
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/
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
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
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é ?
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
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
Merci encore
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
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
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
Merci michel_m
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
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