Excel parcourt tableau + somme

avalonclass666 Messages postés 6 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Je suis actuellement en galere pour effectuer une tache qui me semblait trivial.
Je ne connais pas du tout le VBA, mais pour des besoiins pro, j'ai été obligé de mis mettre.

Voila mon probleme. J'ai un listing de produit. Et je voudrais recupéré certaines infos contenu dans le linsting pour les mettres en forme dans une autre page de mon classeur pour impression.

En gros la ligne est du genre ( en simplifié )

code -- nb produit -- prix

J'aimerais une fonction qui me permettrai de parcourir la colonne nb produit et lorsque jarrive a une certaine valeur ( en faisant la somme de chaques valeurs ) je puisse avoir les coordonnés de la cellule ou je suis arrivé et de pouvoir me servir de la valeur contenu dans celle-ci.

Merci d'avance pour l'aide fournit.
A voir également:

6 réponses

Utilisateur anonyme
 
Bonjour,

Voici un bout de code qui devrait pouvoir te dépanner.
Les données utilisées sont placées dans les 3 premières colonne de Feuil1 :

A B C
1 Code Nb Produit Prix
2 A 5 15,55
3 B 2 222,78
4 C 3 78,95
5 D 7 99
6 E 9 105,78
7 F 10 28,36

La procédure Parcours affiche une boîte de dialogue pour saisir la somme que l'on veut atteindre. Puis elle parcourt toutes les lignes jusqu'à ce que le cumul soit égal au nombre saisi ou supérieur.
Par exemple, si on saisit 10, le message suivant est affiché : "La somme des produits correspondant à 10 est atteinte en ligne 4". Si on saisit 12, le message affiché est "Somme demandée : 12. La somme des produits approchée par excés : 17 en ligne 5".

Sub Parcours()

Dim UneCertaineValeur As Integer
Dim compteur As Integer
Dim somme As Integer
Dim FinBoucle As Boolean

somme = 0
compteur = 2
FinBoucle = False

UneCertaineValeur = InputBox("Saisissez la somme à atteindre.")
If (UneCertaineValeur = 0) Then
MsgBox ("Une valeur doit être saisie.")
Else
While (FinBoucle = False)
Set CelluleActive = Feuil1.Cells(compteur, 2)
If (CelluleActive.Value = "") Then
FinBoucle = True
Else
If (somme = UneCertaineValeur) Then
FinBoucle = True
Else
If (somme < UneCertaineValeur) Then
somme = somme + CelluleActive.Value
compteur = compteur + 1
Else
FinBoucle = True
End If
End If
End If
Wend

compteur = compteur - 1
Select Case (somme)
Case 0
MsgBox ("La somme est nulle.")
Case UneCertaineValeur
MsgBox ("La somme des produits correspondant à " + Str$(UneCertaineValeur) + _
" est atteinte en ligne " + Str$(compteur))
Case Else
MsgBox ("Somme demandée : " + Str$(UneCertaineValeur) + Chr$(13) + _
"La somme des produits approchée par excés : " + Str$(somme) + _
" en ligne " + Str$(compteur))

End Select
End If

End Sub
1
avalonclassunplug
 
Pardonne cette question stupide, mais je vois nul part ou modifié pour changé la colonne nb produit. ( car enfait elle est pas vraiment en colonne B )

désolé ... :D
0
Utilisateur anonyme
 
Il faut modifier la valeur de la variable compteur :

somme = 0
compteur = 2
FinBoucle = False

Là, elle vaut 2 pour la colonne B mais si tu mets 4, c'est la colonne D qui sera prise en compte.
0
YATA
 
dans le code de framétaux !
change
Set CelluleActive = Feuil1.Cells(compteur, 2) 

le 2 par le vrai numéro de colonne dans laquel se trouve ton NB

+
0
avalonclassunplug
 
Merci mille fois pour vos réponses

Je me permet une derniere question bete, comment faire pour prendre la valeur d'une cellule quand on ne connais pas a l'avance ces coordonnées. En dautre mot,

Sheets("LISTING").[vaiablecolonne, variableligne].Value

Niveau syntaxe je bloque, et je n'arive pas a trouver l'info, j'ai limpression que c'est trop simple.
0

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

Posez votre question
avalonclass666 Messages postés 6 Statut Membre
 
dsl double post, mais je voulais savoir si il était possible de passer des variables/constantes en arguments ?

genre

Sheets("LISTING").[vaiablecolonne+3, variableligne+compteur].Value

??
0
Utilisateur anonyme
 
Bonjour,

En utlisant cette instruction, tu peux récupérer la valeur de n'importe quelle cellule.
Set CelluleActive = Feuil1.Cells(ligne, colonne)

En la plaçant dans une boucle, tu peux balayer une plage dont tu reçois les coordonnées en paramètres dans ta procédure. Par exemple :

Sub Parcours( LigneA as integer, ColonneA as integer, LigneB as integer, ColonneB as integer)
dim Ligne_index as integer
dim Col_index as integer

for Ligne_index = LigneA to Ligne B
for Col_index = ColonneA to ColonneB
Set CelluleActive = Feuil1.Cells(Ligne_index, Col_index + 3)
.......
next Col_index
next Ligne_index
end sub
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

Sheets("LISTING").cells(variableligne,variablecolonne).Value

eric
0