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 :

Simplification de macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut Simplification de macro
    Bonjour,

    J'ai fait la petite macro suivante, j'ai un petit soucis, je souhaiterai utiliser toujours la meme constante ("a" par exemple) car j'utilse ce meme code pour plusieurs données et a la fin j'arrive a avoir comme constante "aw".
    De plus je demande dans cette macro d'aller copier une valeur dans une cellule, est il possible d'inscrire directement une valeur dans la cellule cible. Ce qui m'eviterai d'avoir un tableau intermediaire avec mes valeurs a copier.

    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
    Dim a As Integer
            a = 2
            While Len(Sheets("liste_es").Cells(a, 11).Value) > 0
                  If Sheets("liste_es").Cells(a, 11) = "LE108A-3" Then
                    If Sheets("liste_es").Cells(a, 9) = 0 Then
                     Sheets("datas").Range(Sheets("datas").Cells(1, 3), Sheets("datas").Cells(1, 3)).Copy
                     Sheets("liste_es").Cells(a, 14).Select
                     ActiveSheet.Paste
                    End If
                  End If
                  a = a + 1
            Wend
     
        ......
     
    Dim aw As Integer
            aw = 2
            While Len(Sheets("liste_es").Cells(aw, 11).Value) > 0
                  If Sheets("liste_es").Cells(aw, 11) = "AS111-2" Then
                    If Sheets("liste_es").Cells(aw, 9) = 0 Then
                     Sheets("datas").Range(Sheets("datas").Cells(48, 3), Sheets("datas").Cells(48, 3)).Copy
                     Sheets("liste_es").Cells(aw, 14).Select
                     ActiveSheet.Paste
                    End If
                  End If
                  aw = aw + 1
            Wend

  2. #2
    Membre éprouvé
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Par défaut
    Bonjour
    J'ai pas tout bien compris mais déjà tu peux remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sheets("datas").Range(Sheets("datas").Cells(48, 3), Sheets("datas").Cells(48, 3)).Copy
    Sheets("liste_es").Cells(aw, 14).Select
    ActiveSheet.Paste
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("liste_es").Cells(aw, 14) = Worksheets("datas").Cells(48, 3)
    C'est plus court
    Slts

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Oui tu peux simplifier en ne mettant que le stricte minimum dans ta boucle.

    De meme des constantes qui désignent toujours la meme choses, ne sont en fait qu'une seule constante qu'il n'est pas nécessaire de renommer.

    Enfin, j'ai l'impression que tu crées des cas en fonction de ce qu'il y a de noté en tete de colonne.
    Si dans ton fichier datas, les tetes de colonnes sont les memes, on peut faire une boucle de recherche pour trouver la meme entete et ainsi copier la cellule

    Je propose pour ton code:

    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
    'a = numéro de ligne du fichier liste-es
    dim a as integer
    'b= numéro de ligne du fichier Datas
    dim b as integer
     
    a = 2
    b=2
    'Tant que Cellule col 11 n'est pas vide,
    While Len(Sheets("liste_es").Cells(a, 11).Value) > 0
         'si la cellule en col 9 =0 (noter le critère!)
         If Sheets("liste_es").Cells(a, 9) = 0 Then
                'Boucle de recherche de ce qu'il y a dans la colonne 14 de Liste_es qui va donner la ligne cible
                 Do until worksheets("Datas").Cells(1,b)=worksheets(liste_es).Cells(1,a)
                    b=b+1
                 Loop
                'on connait la ligne cible de Datas et on copie la cellule col 3 vers la cellule col 14 de liste_es
                Sheets("datas").Cells(b,3).copy (Sheets("liste-es").Cells(a, 14))
                ActiveSheet.Paste
           End If
           'On incrémente le numéro de ligne de liste-es
           a = a + 1
    'et on recommence
    Wend

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

Discussions similaires

  1. [XL-2010] Simplification de Macros
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/08/2014, 09h30
  2. Simplification fonction macro
    Par imo69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/12/2013, 19h50
  3. [XL-2003] Simplification de macro
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 30/10/2013, 16h20
  4. Simplification de macro en passant par une boucle.
    Par chpierro62 dans le forum Général VBA
    Réponses: 0
    Dernier message: 06/01/2012, 12h17
  5. [VBA-Excel] Simplification de macros ...
    Par Nyang_kamen dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/01/2007, 11h04

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