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 :

Optimisation du code VBA EXCEL


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut Optimisation du code VBA EXCEL
    Bonjour,

    J'ai un tableau comportant des noms d'élèves(Feuil2) que je dois placer sur un plan (feuil1) à différents endroits sur la (feuil1). J'aurais besoin de votre aide afin d'optimiser mon code pour éviter de répéter à chaque fois le code pour chaque élève. Voici un exemple pour 4 élèves en sachant qu'il y a 30 élèves.
    Merci pour votre aide..

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub PlacementEleves()
     
        Range("B4:B7").Select
        ActiveCell.FormulaR1C1 = _
            "=IF('Feuil2'!R1C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R1C1)))))))" & _
            ""
     
         Range("C4:C7").Select
        ActiveCell.FormulaR1C1 = _
            "=IF('Feuil2'!R2C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R2C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R2C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R2C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R2C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R2C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R2C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R2C1)))))))" & _
            ""
     
          Range("C8:C11").Select
        ActiveCell.FormulaR1C1 = _
            "=IF('Feuil2'!R6C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R6C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R6C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R6C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R6C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R6C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R6C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R6C1)))))))" & _
            ""
         Range("E4:E7").Select
        ActiveCell.FormulaR1C1 = _
            "=IF('Feuil2'!R3C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R3C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R3C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R3C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R3C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R3C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R3C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R3C1)))))))" & _
            ""
        Range("B14").Select
     
    End Sub

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Tu as essayé ?

    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
     
       dim i a integer
       for i = 1 to 30
          'Range("B4:B7")= range(cells(4,2),cells(7,2))
          range(cells(4,i+1),cells(7,i+1)).FormulaR1C1 = _
            "=IF('Feuil2'!R" & i & & "C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R" & i  & "C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R" & i  & "C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R" & i  & "C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R" & i  & "C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R" & i  & "C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R" & i  & "C1=='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R" & i &  "C1)))))))" & _
            ""
    next i

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,

    L'idéal serait de faire une boucle sur l'ensemble des élèves, mais il faut de la logique, or je ne comprends pas celle que tu expose.
    Quel est la logique derrière le choix des range ? pourquoi il y en a deux sur la colonne C () dont un sur des lignes différentes des autres) et aucun sur la D ?

    Sinon, puisque ta formule est identique a chaque fois, plutôt que de la faire range par range tu peux utiliser Union, de plus les sélections sont inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Union(Range("B4:B7"),Range("C4:C7")).FormulaR1C1 = _
            "=IF('Feuil2'!R1C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R1C1)))))))" & _
            ""
    Il te faudra tout de même rentre les 30 range à la main dans le Union

  4. #4
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Bonjour,

    J'ai essayé avec l'union pour les Range mais il me duplique sur la Feuil1, le même élève qui est sur la Feuil2 en cellule A1 au lieu de me récupérer les autres élèves en cellule A2,A3,A4.....A30.
    L'élève (Feuil2/A1) dois être placé sur la Feuil1 dans les cellules fusionnées (B4:B7)
    L'élève (Feuil2/A2) dois être placé sur la Feuil1 dans les cellules fusionnées (C4:C7)
    L'élève (Feuil2/A3) dois être placé sur la Feuil1 dans les cellules fusionnées (C8:C11) etc...

    Les plages de la Feuil1 qui constitue un plan ne sont pas suivies.
    Ci-dessous le code :Ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test10()
     Union(Range("B4:B7"), Range("C4:C7"), Range("C8:C11"), Range("E4:E7"), Range("F4:F7"), Range("H8:H11"), _
     Range("I8:I11"), Range("K4:K7"), Range("L4:L7"), Range("N4:N7"), Range("O4:O7"), Range("N8:N11"), Range("O8:O11"), _
     Range("Q4:Q7"), Range("R4:R7"), Range("Q8:Q11"), Range("R8:R11")).FormulaR1C1 = _
           "=IF('Feuil2'!R1C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R1C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R1C1)))))))" & _
    end sub

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Désolé je n'avais pas le changement dans ta formule je croyais que c'était toujours la même.

    Dans ton code je compte 17 range, donc à priori tu n'as pas tout tes élèves, comme je n'y vois toujours aucune logique dans la succession des range je ne peux te conseiller mieux que de tous les lister dans un tableau (ajoute en si nécessaire), puis de boucler sur éléments du tableau pour y mettre ta formule.
    (Attention un tableau commence à l'indice 0, sauf précision contraire)

    Ce qui donne le code suivant:
    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
    Sub test()
    zone = Array(Range("B4:B7"), Range("C4:C7"), Range("C8:C11"), Range("E4:E7"), Range("F4:F7"), Range("H8:H11"), _
     Range("I8:I11"), Range("K4:K7"), Range("L4:L7"), Range("N4:N7"), Range("O4:O7"), Range("N8:N11"), Range("O8:O11"), _
     Range("Q4:Q7"), Range("R4:R7"), Range("Q8:Q11"), Range("R8:R11"))
    For i = 0 To UBound(zone)
        zone(i).FormulaR1C1 = _
           "=IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R" & i + 1 & "C1)))))))"
    Next i
    End Sub

  6. #6
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Merci Halaster08, mais j'ai ajouté des Range et ça ne fonctionne pas?
    Sinon ton code fonctionne.
    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
    Sub test()
    zone = Array(Range("B4:B7"), Range("C4:C7"), Range("C8:C11"), Range("E4:E7"), Range("F4:F7"), Range("H8:H11"), _
     Range("I8:I11"), Range("K4:K7"), Range("L4:L7"), Range("K8:K11"), Range("L8:L11"), Range("N4:N7"), Range("O4:O7"), Range("N8:N11"), Range("O8:O11"), _
     Range("Q4:Q7"), Range("R4:R7"), Range("Q8:Q11"), Range("R8:R11"), Range("T19:T22"), Range("U19:U22"), Range("T23:T26"), Range("U23:U26"), _
     Range("T29:T32"), Range("U29:U22"), Range("T19:T22"), Range("U19:U22"), Range("T33:T36"), Range("U33:U36"), Range("T39:T42"), Range("U39:U42"), _
     Range("T43:T46"), Range("U43:U46"))
    For i = 0 To UBound(zone)
        zone(i).FormulaR1C1 = _
           "=IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R26C3,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R26C6,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R40C14,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R40C15,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R43C14,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R43C15,""""," & _
            "IF('Feuil2'!R" & i + 1 & "C1='Feuil1'!R43C17,""""," & _
            "'Feuil2'!R" & i + 1 & "C1)))))))"
    Next i
    End Sub

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Quel est le message d'erreur et sur quel ligne ?

  8. #8
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Bonjour,
    Je n'ai pas de message d'erreur seulement le placement des élèves en colonne T et U ne se font pas correctement.
    Ci-dessous les places où doit être les élèves que j'ai ajouté au code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("T19:T22"), Range("U19:U22"), Range("T23:T26"), Range("U23:U26"), _
     Range("T29:T32"), Range("U29:U22"), Range("T19:T22"), Range("U19:U22"), Range("T33:T36"), Range("U33:U36"), Range("T39:T42"), Range("U39:U42"), 
     Range("T43:T46"), Range("U43:U46"))
    Faut-il que je fasse une autre zone?
    Merci

  9. #9
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    C'est sure qu'il y a un chemin moins courte et peut être y a beaucoup comme moi n'ont pas compris ta demande...et bien que un schéma mieux qu'une longue paragraphe je demande dans la limite de possible si tu peux joindre un capture écran des données de départ et un capture écran du résultat souhaité
    BONNE JOURNÉE

  10. #10
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par ANANA49 Voir le message
    Je n'ai pas de message d'erreur seulement le placement des élèves en colonne T et U ne se font pas correctement.
    Que se passe-t-il exactement ?
    De mon point de vue, la macro met bien la formule dans les cellules dont tu as renseigné le range, je vois pas où est le problème

    edit: Bien vu @sogedic, je pense que le problème est là en effet.

  11. #11
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    c'est "normal" ? que tu écrives deux fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("T19:T22"), Range("U19:U22"), Range("T23:T26")
    ca doit provoquer un décalage non ?

  12. #12
    Membre confirmé
    Femme Profil pro
    chargée d'études statistiques
    Inscrit en
    Juillet 2018
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : chargée d'études statistiques
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 79
    Par défaut
    Avec un peu de retard, je tenais à vous remercier. j'ai modifié mon plan et vos indications ont fonctionnés!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/01/2023, 10h20
  2. [XL-2010] Optimisation de Code VBA pour Excel 2010
    Par babemagus dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/07/2015, 15h48
  3. [XL-2007] optimisation du code vba excel
    Par Maxim0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/07/2011, 15h43
  4. Réponses: 13
    Dernier message: 20/04/2006, 15h37

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