IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer des boucles avec critères variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut Créer des boucles avec critères variables
    Bonjour à tous ceux qui me liront, j'espère que vous passez un bon dimanche.

    Je vous expose mon problème avec un fichier joint simple qui l'illustre (supprimé après avoir vu que cela n'était pas permis).

    J'ai une colonne avec les noms de clients, une autre avec les noms d'employés qui travaillent pour ces clients, une avec le CA, une avec les couts et enfin la marge faite. Seulement, lorsqu'il s'agit d'offre "forfait" le CA n'est pas précisé pour chaque employé. L'objectif est de l'afficher pour chaque employé. J'ai bien sûre pu le trouver en faisant des "somme.si" avec pleins de conditions et en précisant les clients possibles. Mais il y en a beaucoup et l'idée est de gagner du temps lors du traitement de la base de donnée.

    J'aimerai donc créer une boucle qui, lorsqu'elle rencontre "forfait" dans la colonne B identifie le client concerné, ici C, puis avec une autre boucle fait la somme des coûts des clients identiques qui suivent, dans la colonne F par exemple. La deuxième pourrait avoir une ligne Exit when client différent de client Forfait.

    J'arrive à faire des boucles et à identifier la cellule Forfait mais je ne sais pas comment demander à ma macro d'identifier le client lié puis faire la somme des couts employés liés.

    J'en appelle donc à votre aide s'il vous plait

    Merci

    La Riquette

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le tableau croisé dynamique ne peut pas résoudre ce problème ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut
    Merci d'avoir lu mon message.
    Non le tcd ne fait que croiser les données présentes dans la base. Hors, les montants sont absents pour les forfaits et donc absent sur le tcd.
    Voilà comment se présente la base :

    ---A--- ---B--- 	---C--- ---D--- ---E---
    Clients	Nom		CA	Coûts	Marge
    A	Paul		50	10	40
    A	Paul		50	10	40
    A	Paul		50	10	40 
    C	Forfait		50 	0 	50
    C	Jacques		0 	10 	-10
    C	François	0 	20 	-20
    B	John		40 	10 	30
    B	Vincent		30 	10 	20

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Alors comment reconstituer une donnée absente ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut
    Et bien ici sous "forfait" II y a Jacques et François qui n'ont pas de CA mais les couts. "Forfait" à le CA global. En faisant la somme des couts on obtient les coûts du forfaits. Ensuite un prorata permet de trouver le CA de chaque employé.
    Donc ce que j'aimerai faire c'est une boucle qui lorsqu'elle trouve "forfait" sélectionne son client puis fait la somme des coûts qui ont le même client

    Ma macro actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Forfait
    For i = 3 to 10000
    If Instr(1, Ucase(Cells(i, "ColonneNom").Value), UCase("Forfait") = 1 then
    Dim client as string
    client = Cells(i, "colonneclient")
    For i = 1 to 50
    Cells.Select = application.worksheetfunction.sum(range(cells(i, "colonnecoûts"), cells(rows.count, "colonnecoûts").End(xlUp)))If cells(i, "colonneclient") <> client then
    exit for
    end if
    next
    end function
    Si quelqu'un sait pourquoi elle ne fonctionne pas merci de m'aider

  6. #6
    Membre confirmé
    Profil pro
    Administration et finances
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administration et finances
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Par défaut
    Il me semble plus adéquat de traiter le problème en deux étapes tout à fait distinctes:
    1. D'abord, traitement uniquement des "Forfait" en répartissant les chiffres d'affaires de ce type entre les employés concerné (à l'aide d'une clé de répartition préalablement définie et identification des employés concernés par chaque Forfait)
    2. Une fois la première étape achevée, la question du "Forfait" ne doit plus se poser en principe (le cas particulier "Forfait" n'existe plus). On procède alors au calcul du CA par agent.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2016
    Messages : 4
    Par défaut
    Cependant, pour répartir le CA "forfait" entre les employés il faut identifier les employés qui sont au sein de ce forfait. Le regroupement doit être fait en observant le même client pour les employés que celui attribué au "forfait".
    Voici mon code avec commentaires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function forfait()
     
        For i = 3 To 10000
     
    'Je souhaite que la boucle sélectionne les cellules Nom = "forfait"
        If InStr(1, UCase(Cells(i, "L").Value), UCase(" forfait")) = 1 Then
     
    'Puis sur la même ligne identifie le projet concerné dans la colonne I
            Dim projet As String
            client = Cells(i, "I")
     
    'Ensuite, identifie les autres projets identiques pour faire la somme de leurs coûts
            For j = 1 To 50
            If client = Cells(j, "I") Then
            Cells.Select = Application.WorksheetFunction.Sum(Range(Cells(i, "AQ"), Cells(Rows.Count, "AQ").End(xlUp)))
            End If
              If Cells(j, "I") <> client Then
                Exit For
              End If
     
        Next
        End If
        Next
     
     
    End Function

Discussions similaires

  1. [Débutant] Créer une boucle avec des checkbox
    Par Shennong dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/07/2012, 15h00
  2. [XL-2007] Créer des onglets avec des variables d'une première feuille
    Par panpulilu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2010, 19h20
  3. [PHP-JS] Comment créer une boucle avec des headers
    Par djinnwatcher dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 15h48
  4. Réponses: 3
    Dernier message: 07/04/2005, 15h04
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo