Boucle en VBA

Fermé
Mphzdt - 3 juin 2014 à 10:30
 mphzdt - 3 juin 2014 à 14:45
Bonjour,

Dans un tableur excel , je dispose de plusieurs feuilles, à chacune d'elles correspond une entreprise à étudier.

Dans chaque feuille, on a répertorié les domaines d'acitivité et la consommation de café correspondant à l'ensemble des salariés du domaine d'activité.
Le probème : en dessous de chaque domaine avec le total, est repris le nom du domaine avec en face le prénom de chaque collaborateur appartenant au domain ainsi que leur consommation annuelle de café (ce qui permet de calculer le total de la consommation dans le domaine en première ligne.

J'aurais donc besoin d'une boucle pour récupérer le nom de chaque domaine et le total, car pour chaque entreprise et donc pour chaque feuille, les domaines ne sont pas les mêmes, ce qui m'empêche de procéder par rechercheV

De plus, le grand nombre de valeurs de chaque feuille m'empêche de procéder à la main.

Quelle boucle dois-je utiliser pour récupérer la consommation totale du domaine, c'est à dire la valeur chiffrée si la valeur de la cellule du dessus est différente de celle dont il faut récupérer la consommation de café.

En vous remerciant par avance pour votre aide précieuse.

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 juin 2014 à 10:38
Bonjour,

Combien d'entreprises et combien de domaines ?

Existe t il une liste des domaines ? une liste des entreprises ?

la valeur chiffrée si la valeur de la cellule du dessus est différente de celle dont il faut récupérer la consommation de café.
???? que veux tu dire ?

pour faciliter

mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
0
Non il n'y a pas de listes mais les données sont classées par domaine.

On se retrouve avec un fichier de cette structure :

Domaine d'actitivté Prénom Consommation de café (en litres par année)
Comptabilité 25
Comptabilité Hubert 6
Comptabilité Jérémie 7
Comptabilité José 10
Comptabilité Patrick 2
Secrétariat 35
Secrétariat Germaine 10
Secrétariat Jacqueline 5
Secrétariat Patricia 15
Secrétariat Josiane 5
Direction 60
Direction Robert 30
Direction Jean 20
Direction Edouard 10
0
ceci est un exemple, il y a des tonnes d'entrées dans le vrai fichier.
Désolé pour le fichier mais je ne peux pas accéder à un hébergeur sur mon poste
0
En gros vu l'exemple il faut que la boucle aille cherche la première valeur du domaine "Compta" (donc 25), puis la première valeur du domaine "Secrétariat" (donc 35), car ce sont les totaux, mais sans se préoccuper des valeurs en-dessous qui reprennent le nom du domaine
0
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 734
3 juin 2014 à 11:25
Bonjour

Exemple de macro pour recuperer les infos en colonne A et B d'une feuille2 sur 1000 lignes à partir de la 2eme et les reporter sur une feuille 3
A adapter à tes besoins

Sub decompte()
For n = 2 To 1002
If WorksheetFunction.CountIf(Sheets("Feuil2").Range("A1:a" & n), Sheets("Feuil2").Range("A" & n)) = 1 Then
x = x + 1
Sheets("Feuil3").Range("A" & x).Value = Sheets("Feuil2").Range("A" & n).Value
Sheets("Feuil3").Range("B" & x).Value = Sheets("Feuil2").Range("B" & n).Value
End If
Next
End Sub

Cddlmnt
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 juin 2014 à 12:14
Bonjour

Option Explicit

Sub conso_ste()
Application.ScreenUpdating = False
conso_cafe "boite1"
End Sub
Sub conso_cafe(boite)
Dim Derlig As Integer, T_in
Dim D_domaine As Object, Idx As Integer
Dim Ligvide As Integer

Set D_domaine = CreateObject("Scripting.Dictionary")

With Sheets(boite)
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
T_in = .Range("A2:C" & Derlig)
End With

For Idx = 1 To UBound(T_in)
If Not D_domaine.exists(T_in(Idx, 1)) Then
D_domaine.Add T_in(Idx, 1), T_in(Idx, 3)
End If
Next

With Sheets("inconnu")
Ligvide = .Columns("A").Find("", .Range("A1"), xlValues).Row
.Cells(Ligvide, "A").Resize(D_domaine.Count, 1) = Application.Transpose(D_domaine.keys)
.Cells(Ligvide, "B").Resize(D_domaine.Count, 1) = Application.Transpose(D_domaine.items)
End With
Set D_domaine = Nothing
End Sub


sans explications de ta part

j'ai considéré que le nom de la société était marqué dans l'onglet et que la restitution se faisait dans une feuille nommée "inconnu" ou peut-^tre, mais non demandé, qu'il serait intéressant de préciser la société

Comme tu marques que tu as des "tonnes"de lignes,ce qui est très subjectif, j'ai évité de passer par des retranscriptions cellule par cellule

Il te faut boucler sur les noms de société avec la macro conso_ste
0
merci beaucoup je vais voir ce que je peux en exploiter
0