Boucle en VBA

Mphzdt -  
 mphzdt -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. mphzdt
     
    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
    1. mphzdt
       
      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
    2. mphzdt
       
      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
    3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. mphzdt
       
      merci beaucoup je vais voir ce que je peux en exploiter
      0