boucle - VB/VBA/VBS - Programmation
Marsh Posté le 09-08-2006 à 10:46:56
je decris plus précisement mon problème car j'ai avancé.
J'ai donc un tableau sur une feuille avec en ligne les clients et en colonne les mois. Ce tableau contient donc des valeurs numériques.
Mes données de départ son une date de début de traitement et une date de fin.
je cherche a sommer les valeurs numériques / mois / client dans une cellule.
Voila mon code :
Dim cptCliDeno As Integer
Dim LigneDeno As Integer
Dim MoisColonne As Integer
.Range("AD51" ) = 0
'case contenant la somme recherchée
MoisColonne = 0
For cptCliDeno = 33 To 49 Step 1
If .Range("R" & cptLigneDeno) = ListBoxDenoCli.Value Then
LigneDeno = cptCliDeno
Next
'permet de récupérer la ligne du client concerné, cette partie marche
.Columns("S:AD" )
'deja je sais pas si on peut faire ca, et moi je voudrais selectionner que les cellules des colonne S à AD mais que la ligne concernant le client trouvé
.Range("S" & LigneDeno).Activate
For Each Cell in Selection
MoisColonne = MoisColonne + 1
If MoisColonne >= Month(DateDebut) Or MoisColonne <= Month(DateFin) Then
.Range("AD51" ) = .Range("AD51" ) + Cell.Value
End If
Next
voila mais evidement ma selection pourri et ma boucle sur cette selection ne marche pas
Merci à tous !
Marsh Posté le 09-08-2006 à 10:53:49
ou alors avoir un tableau de 12 case Int
Denominateur(12) As Integer
dans lequel je pourrai mettre tous les dénominateurs pour chaque mois pour un client voulu
il suffirai simplement de boucler sur la ligne voulu et de sommer chaque cellule
on fait comment pour faire une selection d'une ligne ?
par exemple pour selectionner les cellules "S44" à "AD44", boucler dessus pour sommer la valeur des cellules ?
Marsh Posté le 09-08-2006 à 10:57:29
Columns("S:AD" )
'deja je sais pas si on peut faire ca, et moi je voudrais selectionner que les cellules des colonne S à AD mais que la ligne concernant le client trouvé
.Range("S" & LigneDeno).Activate
For Each Cell in Selection
MoisColonne = MoisColonne + 1
TabDeno(MoisColonne) = Cell.Value
Next
un truc du genre
Marsh Posté le 09-08-2006 à 15:16:34
personne sait ???
me manque que ca pour finir mon prog !!!
Marsh Posté le 09-08-2006 à 15:28:47
On attendait que tu te fasses ta réponse !
mavar = 44
For each o in Range("S" & mavar & ":AD" & mavar )
Marsh Posté le 09-08-2006 à 15:38:39
voila ce que j'ai fait :
For Each o in Range("S" & LigneDebut & ":AD" & LigneDebut)
Marsh Posté le 09-08-2006 à 15:39:15
Citation : je continue mon truc pour trouver |
Tu continues pour trouver quoi ? ma réponse te suffit pas ?
Je n'ai pas été plus loin car je te trouve un peu... brouillon et je n'ai pas tout compris, mais ce début de boucle devrait te suffire pour sommer le contenu.
A+
Marsh Posté le 09-08-2006 à 15:40:37
voila ce que j'ai fait :
MoisColonne = 1
LigneDebut = 44
For Each o in Range("S" & LigneDebut & ":AD" & LigneDebut)
TabDeno(MoisColonne) = o
LigneDebut = LigneDebut + 1
MoisColonne = MoisColonne + 1
Next o
mais ca me fait une erreur 457 : cette clé est déjà associé à un élément de cette collection
Marsh Posté le 09-08-2006 à 16:16:44
je capte pas la depuis que j'ai eu cette erreur mon userform refuse de se lancer ????
Marsh Posté le 10-08-2006 à 08:46:36
en fait la la procedure initialize de mon userform, j'ai 2 autres listbox que j'alimente de cette maniere :
Dim Cell As Range, Valeur As Range
Dim Unique As New Collection
Dim j As Byte
On Error Resume Next
For Each Cell In Range("enr_incidents!Customers" )
Unique.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0
For Each Valeur In Unique
ListCli.AddItem Valeur
ListCli2.AddItem Valeur
ListBoxDenCli.AddItem Valeur
Next Valeur
'alimentation de la listbox client en enlevant les redondances
ListBoxResp.MultiSelect = fmMultiSelectExtended
'initialisation de la multi selection de la listbox client
Dim Cell2 As Range, Valeur2 As Range
Dim Unique2 As New Collection
For Each Cell2 In Range("enr_incidents!ResponsabiliteZ" )
Unique2.Add Cell2, CStr(Cell2)
Next Cell2
On Error GoTo 0
For Each Valeur2 In Unique2
ListBoxResp.AddItem Valeur2
Next Valeur2
'alimentation de la listbox responsabilité en enlevant les redondances
et depuis que j'ai mis le code ci dessus, pour lancer mon userform je dois enlever une des 2 alimentations de mes listbox sinon j'ai une erreur 457.
D'ou cela provient il ?
Marsh Posté le 10-08-2006 à 08:55:43
Pour ma boucle je pense que mon code est correct, mais des que
For Each Cell In Range("S" & LigneDeno & ":AD" & LigneDeno)
MoisColonne = MoisColonne + 1
TabDeno(MoisColonne) = CInt(Cell)
Next
Mais des que j'ai mis ces lignes et que j'ai voulu lancer le userform, j'ai eu la meme erreur 457 ...
Marsh Posté le 10-08-2006 à 09:02:01
et meme si j'enleve ce code, l'erreur est toujours la et le seul moyen de la virer est de retirer l'alimentation d'une de mes listbox au démarrage ... qqun à un idee ???
Marsh Posté le 09-08-2006 à 09:00:58
pour boucler sur les lignes c'est facile on utilise par exemple
With Worksheets("mafeuille" )
Dim i As Integer
For i = 1 To 2000 Step 1
.Range("A" & i) = machin
Next
Mais pour boucler sur les colonnes?
par exemple pour boucler de la colonne S à AD ?
Merci à tous