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 :

Réalisation de macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Réalisation de macro
    Bonjour,
    Je souhaite créer une macro afin d attribuer automatiquement des références de poste (colonne B de ma feuille 2) pour chaque personne en fonction du code (indiquer en colonne C sur feuille 1 / colonne A sur feuille 2).
    Particularité:
    - j ai 18 codes différents
    - chaque code comporte des références unique.

    Pouvez m aider s’il vous plaît ?

    Nota: je débute sur macro

  2. #2
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 797
    Points : 1 251
    Points
    1 251
    Par défaut
    Bonjour, un petit classeur exemple à montrer ?

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci pour votre retour.
    voici en pJ le fichier.

    en vous remerciant par avance.
    Bonne journée
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 797
    Points : 1 251
    Points
    1 251
    Par défaut
    Le point commun entre tes 2 feuilles est le n° par entreprise qui doit servir à attribuer la référence poste vacant. Le problème c'est que pour 1 n° de référence, tu as plusieurs références poste vacant. Si je prends par exemple le numéro 01.456, en colonne B tu as 12 références différentes. Comment choisir la bonne référence ?

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Macro
    Merci de votre retour. Les numéros peuvent être attribuer au hazard du moment où les numéros entreprises correspondent.

  6. #6
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 797
    Points : 1 251
    Points
    1 251
    Par défaut
    Je ne comprends pas l'intérêt d'attribuer de références au hasard pour un même numéro ???
    Quoi qu'il en soit, voici une macro qui fait ce que tu demandes, à condition de supprimer la formule alea.entre.bornes de la colonne B de ta feuille "poste à attribuer".
    J'ai donc fait un copier/coller des valeurs de la colonne pour tester la macro et ça fonctionne. Si on laisse la formule, les références produites sont aléatoires.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub AssignerPostes()
     
        Dim wsCandidats As Worksheet
        Dim wsPostes As Worksheet
        Dim rngCandidats As Range
        Dim rngPostes As Range
        Dim cell As Range
        Dim postes As Collection
        Dim poste As Range
        Dim randomIndex As Long
     
        ' Feuilles de travail
        Set wsCandidats = ThisWorkbook.Sheets("candidats")
        Set wsPostes = ThisWorkbook.Sheets("poste à attribuer")
     
        ' Plages de données
        Set rngCandidats = wsCandidats.Range("C2:C" & wsCandidats.Cells(wsCandidats.Rows.Count, "C").End(xlUp).Row)
        Set rngPostes = wsPostes.Range("A2:A" & wsPostes.Cells(wsPostes.Rows.Count, "A").End(xlUp).Row)
     
     
        ' Parcourir chaque candidat
        For Each cell In rngCandidats
            Set postes = New Collection
     
            ' Trouver les postes correspondants
            For Each poste In rngPostes
                If poste.Value = cell.Value Then
                    postes.Add poste.Offset(0, 1).Value
                End If
            Next poste
     
            ' Attribuer un poste aléatoire
            If postes.Count > 0 Then
                randomIndex = Int((postes.Count * Rnd) + 1)
                cell.Offset(0, 1).Value = postes(randomIndex)
            End If
        Next cell
     
    End Sub

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Macro
    Bonjour,
    Merci de votre retour.
    Cependant, les références de poste vacant ne correspondent pas au numéro entreprise.
    Quand je fais la macro, les références qui ressortent sont aléatoire et ne sont pas dans mon tableau…

  8. #8
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 797
    Points : 1 251
    Points
    1 251
    Par défaut
    J'ai testé et ça fonctionne à condition de supprimer les formules alea.entre.bornes de la colonne B, comme précisé dans mon message précédent.

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut réalisation macro
    bonjour,

    je m'excuse de revenir vers vous mais je ne comprends pas quelle partie ( formule alea) de la macro supprimer.
    j'ai supprimé la partie "attribuer un poste aléatoire" soit de "if postes" à "end if" et cela ne marche pas. j'ai un message d'erreur de compilation.

    je suis débutante en macro.

    merci d'avance.

    bonne journée

  10. #10
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 797
    Points : 1 251
    Points
    1 251
    Par défaut
    Bonjour, il ne faut rien modifier à la macro, sinon elle ne fait plus le job attendu. Le problème c'est que la colonne B de ta feuille "poste à attribuer" contient la formule ALEA.ENTRE.BORNES qui pose problème à l'exécution de la macro. En supprimant cette formule, la macro fonctionne comme désiré.

    Teste ce classeur:

    FICHIER FORUM - Copie.xlsm

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Quel est le besoin? Sans Excel et sans macro?

    Juste l'input à disposition, et l'output souhaité. Pas certain qu'il faille une macro pour cela, mais avec si peu d'explications, il est malaisé de répondre.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut réalisation macro
    bonjour,
    @Franc, merci de votre retour. mon objectif est d'automatisé l'intégralité de mon tableau. en écrasant la formule cela rajoute des étapes ( c'est un risque d'erreur pour les personnes qui reprendrons mon tableau).
    Puis-je effectuer l’attribution des postes via une formule et non un macro?
    merci d'avance

  13. #13
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 797
    Points : 1 251
    Points
    1 251
    Par défaut
    Bonjour, je ne suis pas un grand expert des formules. Par contre je peux te fournir une macro vba qui peut remplir ta colonne B du même type de nombres aléatoires que dans la formule ALEA.ENTRE.BORNES.
    Tu peux donc exécuter cette macro en premier puis celle que je t'ai fournie précédemment.

    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
    Sub NombresAleatoires()
     
        Dim ws As Worksheet
        Dim rng As Range
        Dim lastRow As Long
     
        ' Définir la feuille de calcul
        Set ws = ThisWorkbook.Sheets("poste à attribuer")
     
        ' Trouver la dernière ligne occupée en colonne A
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
     
        ' Définir la plage à remplir
        Set rng = ws.Range("B2:B" & lastRow)
     
        ' Remplir la plage avec des nombres aléatoires
        rng.Formula = "=INT((99999999 - 10000000 + 1) * RAND() + 10000000)"
        rng.Value = rng.Value
    End Sub

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Tant qu'à mettre 99999999 - 10000000 + 1 en dur dans le code, autant mettre 90000000, non?

    Pour coller à Excel, on pourrait utiliser application.RANDBETWEEN(bornebasse, bornehaute)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut réalisation macro
    Bonjour,

    Merci de votre retour et de votre aide. Je pense que je me suis mal exprimer. Les postes que j'attribue ne sont pas aléatoires.
    Le fichier que je vous ai joint est un exemple, voici pourquoi on retrouve la formule ALÉA.BORNE.
    Dans mon fichier de travail, les postes ne sont absolument pas aléatoires.

    bonne journée.

  16. #16
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    donc si je comprends bien, je vais dans "poste à attribuer" chercher un poste libre dans la même société que la première personne, puis je le marque comme attribué, je passe à la personne suivante et ainsi de suite ?

    Par formule :

    Nom : _Sans titre.png
Affichages : 63
Taille : 48,5 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    =SIERREUR(
       LET(
          Rang;NB.SI($C$1:C2;C2);
          postes;FILTRE('poste à attribuer'!$B$2:$B$362;'poste à attribuer'!$A$2:$A$362=C2);
          INDEX(postes;Rang)
       );"Affectation impossible")
    Dans Rang on calcule le rang de la personne dans la société, dans postes on filtre les postes de la société, reste à récupérer le poste à la ligne Rang. S'il y a erreur, c'est qu'il y a plus de personnes que de postes, pour cette société.

  17. #17
    Nouveau Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2024
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Janvier 2024
    Messages : 9
    Points : 1
    Points
    1
    Par défaut réalisation macro
    bonjour,

    merci de votre aide. j'ai testé la formule et la macro mais les deux ne fonctionnent pas à cause de "LET", que veut dire LET? puis-je le remplacer par une autre fonction?

  18. #18
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Re,

    le LET est une fonction Excel qui permet de définir des variables intermédiaires (ici rang et postes). Tu dois avoir une vieille version d'Excel (en tout cas pas 365) ?
    Sinon pour ce qu'il y a à faire j'ai bien compris ou bien ?

  19. #19
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Hello,
    Citation Envoyé par Tête de chat Voir le message
    le LET est une fonction Excel qui permet de définir des variables intermédiaires (ici rang et postes). Tu dois avoir une vieille version d'Excel (en tout cas pas 365) ?
    Ben flute alors moi avec mon Excel 2019, j'ai une vieille version :
    La fonction LET, introduite dans les versions d'Excel 2021 et Microsoft 365, permet décomposer des formules de calcul complexes en autant de calculs intermédiaires que nécessaires ; ceci pour les rendre plus lisibles et en faciliter la maintenance
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Si pas de LET, il faut remplacer les variables utilisées par LET par leurs formules. Ici, LET servait simplement à "clarifier" la formule (pas convaincu, mais soit, et ce n'est pas une attaque perso, Tête de Chat, c'est juste que si les variables ne sont utilisées qu'une seule fois, LET ne sert pas à grand chose, selon moi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =SIERREUR(
       INDEX(FILTRE('poste à attribuer'!$B$2:$B$362;'poste à attribuer'!$A$2:$A$362=C2);NB.SI($C$1:C2;C2))
       ;"Affectation impossible")
    (Pas testé)

    NB: Il est plus que temps de se mettre aux tables de données pour ce genre de cas => mon tuto https://fauconnier.developpez.com/tu...ux-structures/
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  2. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 14h30
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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