Discussion Créer une macro avec "If"

  • mardi 8 mai 2012 15:41
     
     

    Bonjour à tous,

    Je suis très novice en création de macro. je commence à peine à lire le langage VBA.

    J'aimerais créer une macro avec la formule suivante en utilisant le langage VBA, fonction "if". La réponse doit aboutir en A1:A5 sur la feuil1.

    =SI(ET(A10=1;A11=1);

    Réponse: Copier/Coller '[Feuil2.xlsm]fichier'!A1:A5

    La formule sera répétée dans la macro, à plusieurs reprise, comme suit:

    =SI(ET(A10=1;A11=1);

    =SI(ET(A10=2;A11=1);

    =SI(ET(A10=3;A11=1);....et ce jusqu'a SI(ET(A10=12;A11=5) (Au total 60 fois "if")

    Suis-je limité dans l'utilisation du"if" en VBA comme je le suis dans l'utilisation du "si" dans une formule ?

    Ou, y aurait-il une façon de créer la macro pour exprimer la formule en son entier sans répéter le "if" à plusieures reprises comme ce sera le cas ci-haut.

    Merci beaucoup de votre aide


    Golfeur01

Toutes les réponses

  • mardi 8 mai 2012 16:11
    Modérateur
     
     

    Bonjour,

    Il n'y a pas besoin de 60 If.

    Est-ce que le classeur cible doit être créé ou bien il existe déjà ?

    Est-ce que la feuille cible s'appelle toujours fichier ?

    Il faudrait aussi nous expliquer plus en détail ce que vous voulez faire et quand et comment la copie doit s'effectuer...

    1. Automatiquement ?
    2. Par le click sur un bouton ?

    Pour vous situer, une boucle for/next peut répondre en quelques lignes à ce que vous souhaitez faire mais il manque des infos pour vous aider...


    Argy

  • mardi 8 mai 2012 16:27
     
     

    Bonjour,

    Sans trop comprendre votre exemple, sachez ceci:

    Si votre macro retourne une formule Excel dans une cellule OUI vous êtes limité par le nombre de SI imbriqués (c'est à dire fonction SI dans une autre fonction SI ou plutôt comme élément d'un argument si_vrai ou si_faux d'une autre fonction SI). Cette limite est de 07.

    Par contre vous avez la possibilité de créer une fonction personnalisée dans laquelle vous utiliserez une structure Select Case ... End Select (Choix multiples) et la pas de limitation.


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users


    • Modifié MehdiH mardi 8 mai 2012 16:31
    •  
  • mardi 8 mai 2012 18:11
     
     

    Merci Argy de votre réponse rapide.

    Le classeur cible existe déjà. (Festi-Danse) / La feuille cible change de nom selon la catégorie des danseurs. Catégories que l'on pourrait nommées Cat.01, Cat.02, Cat.03...Etc...Etc...jusqu'à 12 catégories. Chaque catégorie peux être reliée à 5 groupes différents.

    Il y a 5 tableaux sur la '[Feuil2.xlms]Fichier'! que j'ai appellés Groupe 01, Groupe 02 - 03 - 04 et 05.

    Groupe 01: A1:A5, groupe 02: B1:B5, Groupe 03:C1:C5, Groupe 04: D1:D5, Groupe 05: E1:E5

    L'inscription dans la cellule A10 représente la catégorie des danseurs (de 1 - 12 )

    L'inscription dans la cellule A11 représente les groupes (de 1 - 5 )

    Je voudrais que lorsque j'inscris 1 en A10 et 1 en A11, le groupe 01 de la Cat01 se copie en A1:A5 de la feuille 1. Si j'inscris 1 en A10 et 2 en A11, le groupe 02 de la Cat01 se copie. Si j'inscrit 2 en A10 et 1 en A11, le groupe 01 de la Cat02 se copie. Si j'inscris 2 en A10 et 2 en A11, le groupe 02 de la Cat02  se copie, et ainsi de suite....

    C'est pourquoi j'ai mentionné 60 "if" qui représente 5 groupes X 12 catégories.  

    SVP ne me demandé pas trop de détails techniques concernant le langage VBA. Comme je le mentionnais en intro. je suis novice dans le domaine.

    Merci


    Golfeur01

  • mardi 8 mai 2012 18:14
     
     

    Bonjour MehdiH,

    Merci de l'intéret que vous portez à ma question. SVP voir la réponse que j'ai donné à Argy.

    Bonne journée


    Golfeur01

  • mercredi 9 mai 2012 10:06
    Modérateur
     
     

    Non, je ne veux pas de détails techniques mais pratiques.

    En fait c'est plus clair mais vous n'avez pas expliqué où  se situe le classeur dans lequel vous entrez vos valeurs.

    Ne serait-il pas plus simple que ce soit le même classeur ?

    Auriez vous la possibilité de fournir un classeur exemple (via cjoint par exemple) ?

    Merci


    Argy

  • mercredi 9 mai 2012 14:41
     
     

    Je suis désolé, j'ai tendance à compliquer les choses lorsqu'elles doivent être simples.

    Vous mentionnez de vous fournir un classeur via (cjoint). Comme je n'utilise pas très souvent le forum, je ne connais pas les façons d'envoyer les classeurs.

    J'aimerais vous envoyer tous les classeurs qui concernent mon projet. Comment dois-je m'y prendre ?

    Je dois quitter pour quelques jours. Je n'aurai pas accès au forum. Je vous reviens dès mon retour.

    Merci encore pour l'intéret que vous portez à mon  dossier


    Golfeur01

  • mercredi 9 mai 2012 20:33
     
     

    Bonsoir,

    le principe d'utilisation de cjointpointcom est simple

    1. vous télécharger votre fichier sur le serveur de cjoint
    2. vous copier l'adresse (URL) qui pointe vers l'emplacement où votre fichier est stocké
    3. vous copier ce lien sur un billet en réponse à celui-ci ce qui permettra aux bénévoles de télécharger votre travail et de vous apporter une éventuelle réponse.

    Remarque: étant limité par la taille, je vous suggère si vous avez plus d'un classeur à partager des les copier dans une archive zip et de partager l'archive.


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users

  • jeudi 10 mai 2012 15:42
     
     

    http://cjoint.com/?BEkrHZOoAdz

    http://cjoint.com/?BEkrJw3Dedb

    http://cjoint.com/?BEkrKpoAL54

    Bonjour,

    Voici les 3 liens couvrant les 3 classeurs utilisés pour mon projet.

    J'ai ajouté mon adresse courriel afin que nous puissions communiquer plus facilement, si vous le désirez.

    Vous aurez accès à des macros qui pour moi me semblent très compliqués. C'est que le projet a débuté avec mon ami qui lui était l'expert en VBA. Malheureusement, il est décédé il y quelques mois et je tente depuis ce temps de complèter le projet. J'y arrive lorsque'il ne s'agit que d'utiliser des formules mais ça ce complique avec les macros.

    Merci encore pour l'intéret que vous porter à ce projet.


    Golfeur01

  • samedi 12 mai 2012 12:30
     
     

    Bonjour,

    SVP confirmez reception des classeurs, et quelle est l'étape suivante.

    Merci et bonne journée


    Golfeur01

  • mardi 15 mai 2012 12:04
     
     

    Bonjour ,

    Je vous ai envoyé, à votre demande, les classeurs couvrant mon projet et je n'ai toujours pas reçu de réponse.

    Je ne comprend pas pourquoi soudainement je ne reçois plus de réponse de votre part. Aie-je brisé une loi sur les forums ? Qu'est-ce que j'ai fait qui vous empèche de répondre ?

    Je peux vous assurer que mon projet est ligitime et qu'il n'y a aucune malversation.

    Tout comme mon ami décédé, je suis autodidacte. Mon ami c'est intéressé à excel il y a environ 8 ans et lorsqu'il y a 2 ans, je lui ai présenté mon projet pour notre association de danse, il s'y est intéressé. C'est alors que j'ai moi même commencé à m'intéresser à excel. Les cours en VBA sont extrèmement dispendieux (environ $800.00 à $1,000.00 pour 3 jours de cours) C'est pourquoi j'ai fait appel à vous.

    Merci de bien vouloir m'expliquer.


    Golfeur01

  • mardi 15 mai 2012 13:37
     
     

    Bonjour Golfeur01,

    Pas de règle brisée ni autre, c'est juste que les bénévoles que nous sommes doivent trouver du temps pour répondre.

    1/- côté réception de fichier 02/03 le 2ème lien ne renvois que vers une adresse electronique.
    les fichiers reçu étant : tableau_des_entrées et print_juge.

    2/- je vous prie également de préciser sur quelle feuille les cellules A10 et A11 sont et sur quel feuille vous souhaitez copier ou coller vos données et surtout de quelle feuille proviennent les données à coller.

    Si vous pouviez faire le travail manuellement avec deux ou trois captures d'écrans sur cjoint ce serait idéal.


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users

  • mardi 15 mai 2012 14:03
     
     

    Merci beaucoup MehdiH de votre réponse rapide. Ça me rassure.

    Oubliez les cellules A10,A11, ce n'était qu'un exemple que je vous présentais pour simplifier la demande. Dans le projet comme tel, les cellules à être copiée/collée sont d'un autre ordre.

    Je regrette mais je ne vous suis pas concernant les captures d'écrans. Je n'ai jamais utilisé ce procédé.

    Il vous manque le classeur "Tableau principale" pour complèter le tansfert des données. Le voici.

    http://cjoint.com/?3EppVgr9HCi Le classeur est en format Zip car il est très volumineux (Durée sur Cjoint, 4 jour).

    SVP confirmez reception du classeur.  (Vous ne pouvez pas faire aucun transfert sans les trois classeurs).

    Ma demande est très complexe et l'explication doit être très détaillée. C'est pour cette raison que je préfèrerais communiquer pas courriel, si possible, pour ne pas embourber le forum.

    Merci de votre compréhension

    Michel Taillon


    Golfeur01


  • mardi 15 mai 2012 15:08
    Modérateur
     
     

    Ma demande est très complexe et l'explication doit être très détaillée. C'est pour cette raison que je préfèrerais communiquer pas courriel, si possible, pour ne pas embourber le forum.

     Bonjour,

    Il est fortement recommandé de ne pas laisser d'adresse mail perso sur les forum si vous ne voulez pas être assailli de spams. Il est à souhaiter pour vous que c'est une adresse "poubelle".

    Par ailleurs, vous avez sollicité le forum pour obtenir une solution à un besoin particulier mais tel que prend la tournure de votre message, il apparaît que vous souhaitiez continuer la conversation en privé ce qui n'est pas très orthodoxe même si vous avez conscience que cela pourrait comme vous dîtes embourber le forum.

    Il aurait été plus simple de solliciter un développeur privé.


    Argy

  • mardi 15 mai 2012 16:10
     
     

    Bonjour,

    Je suis arrivé à télécharger le dernier fichier. Je reviendrais vers vous (ou un autre bénévole) dès que possible (charge de travail). Ne vous impatientez pas.

    Pour les explications n'hésitez pas à détailler si possible en image (captures d'écran) publié sur cjoint comme pour les classeurs. au moins une image pour l'état de départ et une pour l'état d'arrivé.

    Je reste à votre disposition sur le forum dans la mesure de mes compétences.


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users

  • mercredi 16 mai 2012 02:48
     
     

    Argy,

    Je vous remercie pour vos précieux conseils concernant l'adresse email. Je ne referai plus la même erreur.

    Vous avez raison. Plus j'essaie d'expliquer ma demande, plus ça me semble trop complexe pour utiliser le forum. Je ne peux m'en remettre à un développeur privé étant donné les coûts exorbitants qu'ils me demandent. je vous remercie pour l'aide que vous m'avez apportée et de la patience que vous avez démontrée.

    MehdiH,

    Comme je l'ai mentionné à Argy, je ne suis pas certain de pouvoir expliquer ce dont j'ai besoin via le forum. L'explication demande beaucoup d'espace et de précision. Je ne voudrais pas vous faire perdre votre temps si mes premières explications ne sont pas suffisantes et que je doivent les preciser dans plusieures communications subséquentes.

    Si vous trouvez le temps de regarder voici les étapes à suivre: Vous ouvrez les trois classeurs. Les données sont entrées sur la feuille "Dossards" du classeur "Tableau des entrées". elles sont ensuite transférées dans le "Tableau principal" via les macros de la feuille "Tableau croisé dynamique" du classeur "Tableau des entrées". À partir du classeur "Tableau principal", vous ouvrez la feuille "ÉliteB" (vous pourriez ouvrir n'importe quel feuille) mais la feuille "ÉliteB" contient plus d'info. Dans la section 1/64 de finale, vous cliquez sur le bouton "tableau suivant". Une fenêtre s'ouvre et vous demande si vous voulez imprimer cette feuille, vous répondez "oui". Le classeur "Print juge" s'ouvre et une deuxième feuille apparait qui s'appelle "32Out ÉliteB" Cette feuille contient les données que je voudrais transférer dans la feuille "Régie" du "Tableau des entrées". Deux conditions doivent s'appliquer à partir de la feuille "Régie" afin de transférer les bonnes données.

    l'image de départ est le classeur "print Juge" et l'image d'arrivée est la feuille "régie" dans le classeur "Tableau des entrées"

    Si vous avez le temps et l'envie de suivre les étapes ci-dessus et que vous désirez continuer, SVP laissez le moi savoir et je vous enverrez la suite avec les conditions qui s'imposent dans la feuille "Régie" afin de créer la ou les macros.

    Je vous remercie de votre aide précieuse et aussi de la patience que vous avez démontrée.

    Je crois sincèrement que le forum est entre bonnes mains avec des volontaires comme vous et Argy.

    Merci encore


    Golfeur01

  • mercredi 16 mai 2012 06:44
    Modérateur
     
     

    En fait, sans aller jusqu'à la rédaction d'un code que vous n'aurez qu'à appliquer, il faut comprendre le mécanisme et pour le comprendre, il faut que vous même établissiez des règles de gestion... Pour info, j'ai eu récemment eu affaire au développement d'un progiciel dédié à la gestion des ressources humaines. Bien que parfaitement opérationnels, les rédacteurs/utilisateurs n'ont pas su exprimer l'intégralité des règles de gestion car, à l'accoutumée, quand un cas particulier était rencontré, une correction sur le pouce était mise en oeuvre. De ce fait, tout était plus ou moins ajusté à la main bien que quelques macros çà et là automatisaient des tâches dans leur classeurs d'origine. Lorsque mon appli a été exécutée pour la première fois, pas moins de 4000 erreurs ont été levées (erreur au sens "de saisie" pas "de programme") tout simplement parce que l'ordinateur ne réfléchit pas mais applique les règles telles qu'elles ont été définies. Du fait du manque ou d'omission de certaines d'entre elles ou encore conflit entre deux, le programme suit son exécution sans se préoccuper de la surprise finale.

    Tout ça pour dire que si ce n'est pas clair pour vous, ça ne peut pas l'être pour nous.

    De ce que j'ai compris, votre demande est simple à mettre en oeuvre mais il manque des billes pour faire en sorte que ça tourne comme une horloge.
    Aussi, je vous invite à bien établir les règles de ce qui doit se dérouler, où, quand, comment et vous verrez que votre requête sera solutionnée.


    Argy

  • mercredi 16 mai 2012 23:51
     
     

    Je vous remercie pour les explications. Je présume que vous avez accès aux trois classeurs. Le classeur "Tableau principal" contient 14 feuilles avec des noms différents. Le régisseur identifie ces feuilles par des chiffres: 1=Deb65+, 2=Inter65+, 3=Deb51-64, 4=Inter51-64, 5=Deb31-50, 6=Inter31-50, 7=Deb16-30, 8=Inter16-30, 9=Debjunior, 10=Interjunior, 11=Championnat, 12A=ÉliteA, 12B=ÉliteB, 12C=ÉliteC, pour un total de 14 catégories. Le classeur "Print Juge" contient une feuille appelée "Juge". Sur cette feuille il y des groupes de 1 à 7, pour un total de 7 groupes. La feuille "Juge" est la feuille maitresse à partir de laquelle le bouton "Tableau suivant" qui est relié à la macro "Passer 1_64", produit les feuilles avec le nom des catégories (ae: feuille "32ouÉliteB", 16ToChampionnat", '32De16-30". Les informations sur ces feuilles sont celles qui doivent être transférer par la nouvelle macro, sur la feuille 'Régie". Le classeur "Tableau des entrées" contient une feuille appelée "Régie". Le régisseur décide qui seront les premiers compétiteurs à prendre le plancher. S'il indique le chiffre 12B dans la cellule D12 de la feuille "Régie", ça signifie que la catégorie ÉliteB prendra le plancher à ce moment. S'il indique le chiffre 3 dans la cellule P14 de la feuille "Régie", ça signifie que les données dans le tableau "Groupe 3" de la feuille "32ouÉliteB" seront, en activant le bouton, copier/coller par la nouvelle macro sur la feuille "Régie", dans le groupe de cellule E16:P28. Si le régisseur indique le chiffre 11 dans la cellule D12 de la feuille "Régie", ça signifie que la catégorie "Championnat" prendra le plancher à ce moment. S'il indique le chiffre 4 dans la cellule P14 de la feuille "régie", ça signifie que les données dans le "groupe 4" de la feuille "32toChampionnat" seront, en activant le bouton, copier/coller par la nouvelle macro sur la feuille "Régie" dans le groupe de cellule E16:P28. Comme vous pouvez le constater, il y a 14 catégories qui pourraient se retrouver dans la cellule D12 de la "régie", et 7 groupes qui pourraient se retrouver dans la cellule P14 de la même "régie". Ce qui donne 98 possibilités.

    SI(ET('régie'!D12=1;'régie'!P14=1); SI(ET('régie'!D12=1;'régie'!P14=2);

    SI(ET('régie'!D12=2;'régie'!P14=1); SI(ET('régie'!D12=2;'régie'!P14=2); et ce jusqu'à SI(ET('régie!'D12=14;'régie'!P14=7);

    Je ne crois pas pouvoir expliquer ce dont j'ai besoin d'une meilleure façon. Je ne voudrais pas vous faire perdre votre temps. Si vous n'arrivez pas à comprendre mes explications, SVP laissez tomber. Je vais tenter de trouver une autre solution.

    Un gros merci a vous et MehdiH pour le temps que vous avez consacré à ce projet. C'est très rassurant de savoir que des volontaires comme vous prennent le temps de répondre à des débutants dans mon genre. J'en suis très reconnaissant.


    Golfeur01

  • samedi 2 juin 2012 13:10
     
     

    Bonjour à tous,

    J'aimerais savoir si vous avez gardé un intéret pour mon projet ?

    Si oui, je vous en remercie et attend votre réponse à votre convenance.

    Si non, SVP m'en aviser afin que je cherche une autre solution.

    Merci encore de l'intéret que vous portez à ce projet


    Golfeur01

  • lundi 4 juin 2012 07:30
    Modérateur
     
     

    Bonjour,

    Le souci est que votre problème n'est pas une question mais carrément la reprise d'un projet assez grand somme toute et une analyse poussée de l'existant est nécessaire pour pouvoir vous proposer une solution. Personnellement, je n'aurais pas assez de temps pour m'y pencher ainsi que vous vous y attendez dans l'esprit de la charte du forum ou en tout cas pas avant de nombreuses semaines...


    Argy

  • lundi 4 juin 2012 12:23
     
     

    Bonjour,

    Merci beaucoup de votre réponse rapide. Si jamais ça vous dit et que vous trouvez du temps pour vous amuser avec ce projet, peut-etre que dans quelques semaines ou quelques mois....

    Entre temps je vais tenter de trouver une autre solution.

    Merci encore pour l'attention que vous avez porté à ce projet.


    Golfeur01

  • mercredi 6 juin 2012 19:55
     
     

    Bonjour,

    Il me semble qu'il y a une solution assez logique avec le Filtre élaboré. Faire Données > Trier et filtrer > Avancé.

    Il faut définir la plage de cellule qui servira de Zone de critères. Si cette plage plusieurs colonnes, cela fonctionne selon la logique du "ET".

    Les résultats peuvent être filtrés vers un autre emplacement.

    Si vous voulez que cette action se déroule automatiquement, il sera aussi possible de l'exécuter via une Macro automatique ou évènementielle.

    En espérant avoir aidé.

    André

  • jeudi 7 juin 2012 02:15
     
     

    Bonsoir,

    Merci pour la suggestion. Comme les critères qui se trouvent dans la zone de critères sont variables (voir mon message précédent qui indique qu'il y a 98 possibilités), je ne connais pas la façon de trier/filtrer/avancé/ une plage de données, avec une zone de critères qui contiendrait 98 critères variables, choisis selon la décision du régisseur. J'ai tout tenté en utilisant toutes les formules disponnibles et toutes les fonctions qu'excel peut offrir, sans résultat. Sans l'utilisation d'une macro avec la fonction "if", je ne crois pas que ce soit possible d'y arriver.


    Golfeur01

  • mercredi 20 juin 2012 15:58
     
     

    La zone de critères contient autant de lignes (logique "OU") et de colonnes (logique "ET") que l'on veut.

    Chaque critère peut par exemple s'écrire "< A10", ce qui le rend "variable" au sens où vous l'entendez.

    Il me semble donc que c'est réalisable, équivalent à une suite complexe de "ET" et de "OU". A vous de voir.

    Pour automatiser, il faudra écrire une macro assez simple, qui appellera le Filtre élaboré (méthode AdvancedFilter).

    Il est préférable de nommer les Plages. Exemple :

        Range("maPlage").AdvancedFilter Action:= xlFilterCopy, CriteriaRange:= Range("Critères"), CopyToRange:= Range("monNom"), Unique:= True

    copiera la plage "maPlage", après l'avoir filtrée, à l'adresse nommée "monNom" (en excluant les doublons).

    Bon courage.

    André

  • mercredi 20 juin 2012 18:13
     
     

    Bonjour André,

    Merci beaucoup pour votre réponse et de l'intéret que vous portez à mon projet. Je vais tenter d'appliquer votre méthode  et je vous laisse savoir le résultat dans un avenir rapproché.

    Merci encore


    Golfeur01