A voir également:
- Probleme pour faire une somme sur VBA
- Faire une somme sur excel - Guide
- Somme si couleur - Guide
- Somme en anglais excel - Guide
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- Vba attendre 1 seconde ✓ - Forum VB / VBA
5 réponses
Salut,
Tu peux arriver au résultat de plusieurs manières, mais la plus simple dans ton cas est de faire une boucle sur la colonne indiquant le noms de tes affaires.
La suite dépend de l'organisation de ton fichier :
- Si tes heures sont triées en fonction de tes numéros d'affaires, tu peux faire une deuxième boucle avec un "while" jusqu'à ce que le numéro d'affaire change, laisser un marqueur la où elle s'est arrêtée itérer ta première boucle pour passer à l'affaire suivante et reprendre à partir du marqueur (du genre une variable "marqueur = ligne de changement"). Ca à l'avantage de gagner en temps de calcul sur des grosses listes.
- Sinon si tes heures sont dans le désordre tu peux balayer toute la liste dans ta deuxième liste et pour chaque affaire (toujours itérée dans ta première boucle) tu fais un test avec la cellule "affaire" de ton tableau d'heures.
Bien sur, dans un cas comme dans l'autre, il faudra initialiser une valeur (somme = 0) pour pouvoir y ajouter le nombre d'heure trouvé pour chaque cas valide de ta deuxième boucle.
Après pour sauvegarder, il te suffit de le faire dans ta première boucle avant d'itérer.
Tu peux arriver au résultat de plusieurs manières, mais la plus simple dans ton cas est de faire une boucle sur la colonne indiquant le noms de tes affaires.
La suite dépend de l'organisation de ton fichier :
- Si tes heures sont triées en fonction de tes numéros d'affaires, tu peux faire une deuxième boucle avec un "while" jusqu'à ce que le numéro d'affaire change, laisser un marqueur la où elle s'est arrêtée itérer ta première boucle pour passer à l'affaire suivante et reprendre à partir du marqueur (du genre une variable "marqueur = ligne de changement"). Ca à l'avantage de gagner en temps de calcul sur des grosses listes.
- Sinon si tes heures sont dans le désordre tu peux balayer toute la liste dans ta deuxième liste et pour chaque affaire (toujours itérée dans ta première boucle) tu fais un test avec la cellule "affaire" de ton tableau d'heures.
Bien sur, dans un cas comme dans l'autre, il faudra initialiser une valeur (somme = 0) pour pouvoir y ajouter le nombre d'heure trouvé pour chaque cas valide de ta deuxième boucle.
Après pour sauvegarder, il te suffit de le faire dans ta première boucle avant d'itérer.
Merci de ta reponse, mes données son extraient de plusieurs fichiers excels,
et remplissent une feuille excel ( heures imputees ), je voudrais savoir comment on fait pour comparer des cellules et si passer a la suivante jusqua un comparateur different.
exemple
a = valeur cellule
i = indice cellule
tant que A faire
sommeheures= sum( (comment recup les donnees des cellules de cette plage qui est aleatoire selon les affaires)
jusqu'a i <> i+1
Je sais pas si c'est tres explicite ce que j'ai ecrit, je suis pas tres bon en programation
si tu pouvais me montrer ta 2 eme idees car mes affaires sont dans le desordre par un peite exemple coder sa m'aiderai beacoup
merci de m'aider
et remplissent une feuille excel ( heures imputees ), je voudrais savoir comment on fait pour comparer des cellules et si passer a la suivante jusqua un comparateur different.
exemple
a = valeur cellule
i = indice cellule
tant que A faire
sommeheures= sum( (comment recup les donnees des cellules de cette plage qui est aleatoire selon les affaires)
jusqu'a i <> i+1
Je sais pas si c'est tres explicite ce que j'ai ecrit, je suis pas tres bon en programation
si tu pouvais me montrer ta 2 eme idees car mes affaires sont dans le desordre par un peite exemple coder sa m'aiderai beacoup
merci de m'aider
Envoie moi ton fichier excel à l'adresse que tu trouveras dans mon profile, je te le renverrai avec un module qui va bien.
Pour les autres que ca intéresserait, je met le code ci dessous :
Avec les correspondances suivantes :
Colonne A : N° Affaire
Colonne B : Technicien (non pris en compte dans le traitement)
Colonne C : Heures passées
Colonne F : Liste des différentes affaires (sans ca ca ne marche pas)
Colonne G : Colonne d'accueil pour le total des heures passées sur chaque affaire
Pour les autres que ca intéresserait, je met le code ci dessous :
Sub Sommateur() Dim i As Integer Dim j As Integer Dim Somme As Integer i = 2 j = 2 Somme = 0 While (Cells(i, 6) <> "") While (Cells(j, 1) <> "") If (Cells(j, 1) = Cells(i, 6)) Then Somme = Somme + Cells(j, 3) End If j = j + 1 Wend Cells(i, 7) = Somme Somme = 0 i = i + 1 j = 2 Wend End Sub
Avec les correspondances suivantes :
Colonne A : N° Affaire
Colonne B : Technicien (non pris en compte dans le traitement)
Colonne C : Heures passées
Colonne F : Liste des différentes affaires (sans ca ca ne marche pas)
Colonne G : Colonne d'accueil pour le total des heures passées sur chaque affaire
je peux t'envoye sa du stage mais se soir je t'envoie sa,
je vais essayer avec ce que tu m'as donné
merci
je vais essayer avec ce que tu m'as donné
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Ton classeur m'a donné l'idée d'utiliser un tableau croisé dynamique, et effectivement c'est beaucoup plus simple (pas de macro, exécution instantanée, ...), et si tu veux en plus avoir la somme répartie par chapitre c'est encore plus simple et rapide.
Donc si tu sais comment créer un TCD c'est bon (N° affaire dans les lignes, chapitre dans les colonnes et nombre d'heures dans les données, et choisir la somme dans le champ Pivot Table).
Si tu sais pas, tu vas dans :
- menu Données / Rapport de Tableau Croisé Dynamique
- laisser les options par défaut (liste ou BD XL et TCD)
- sélectionner les trois colonnes concernées
- l'emplacement c'est comme ca t'arrange
- ensuite, il suffit de glisser les bons éléments aux bons endroits (comme indiqué au dessus par exemple).
- Enfin, il reste juste à le mettre en forme si tu as envie (tu trouveras toute l'aide dont tu as besoin dans l'aide excel ou sur internet).
Voila bon week end
Ton classeur m'a donné l'idée d'utiliser un tableau croisé dynamique, et effectivement c'est beaucoup plus simple (pas de macro, exécution instantanée, ...), et si tu veux en plus avoir la somme répartie par chapitre c'est encore plus simple et rapide.
Donc si tu sais comment créer un TCD c'est bon (N° affaire dans les lignes, chapitre dans les colonnes et nombre d'heures dans les données, et choisir la somme dans le champ Pivot Table).
Si tu sais pas, tu vas dans :
- menu Données / Rapport de Tableau Croisé Dynamique
- laisser les options par défaut (liste ou BD XL et TCD)
- sélectionner les trois colonnes concernées
- l'emplacement c'est comme ca t'arrange
- ensuite, il suffit de glisser les bons éléments aux bons endroits (comme indiqué au dessus par exemple).
- Enfin, il reste juste à le mettre en forme si tu as envie (tu trouveras toute l'aide dont tu as besoin dans l'aide excel ou sur internet).
Voila bon week end