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 code VBA Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut Simplification de code VBA Excel
    Bonjour à tous,

    Je suis débutant et je cherche à simplifier plusieurs suites de codes :

    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Range("S365").Select
    Selection.Value = Range("A2").Value
    Range("S368:S369").Select
    Selection.Value = Range("A2").Value
    Range("S371:S372").Select
    Selection.Value = Range("A2").Value
    Range("S374:S376").Select
    Selection.Value = Range("A2").Value
    Range("S378").Select
    Selection.Value = Range("A2").Value
    Range("S380:S381").Select
    Selection.Value = Range("A2").Value
    Range("S382:S383").Select
    Selection.Value = Range("A2").Value
    2

    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
    If Sheets("MEDIC").Range("A316").Value = "" Then
    Sheets("MEDIC").Rows("316:316").Select
        Selection.EntireRow.Hidden = True
    End If
     
        If Sheets("MEDIC").Range("A317").Value = "" Then
    Sheets("MEDIC").Rows("317:317").Select
       Selection.EntireRow.Hidden = True
    End If
     
    If Sheets("MEDIC").Range("A318").Value = "" Then
    Sheets("MEDIC").Rows("318:318").Select
       Selection.EntireRow.Hidden = True
    End If
     
    If Sheets("MEDIC").Range("A319").Value = "" Then
    Sheets("MEDIC").Rows("319:319").Select
        Selection.EntireRow.Hidden = True
    End If
     
        If Sheets("MEDIC").Range("A320").Value = "" Then
    Sheets("MEDIC").Rows("320:320").Select
       Selection.EntireRow.Hidden = True
    End If
    Auriez-vous une piste pour ce type de code à répétition ?

    Je vous remercie par avance

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonsoir,


    Fait une recherche sur le forum et sur le web des liens intéressants en VBA et sur les select, il y a beaucoup de choses.

    Les sélection c'est ce que fait excel dans l'enregistreur de macro, mais cela n'est pas utile en programmation VBA.

    Par exemple tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("S365").Select
    Selection.Value = Range("A2").Value
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("S365")= Range("A2").Value

    Edit
    Exemple de modification de ton code 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i as integer
    with Sheets("MEDIC")
    for i = 320 to 316 step -1
    If .cells(i,1).Value = "" Then :.Rows(i).EntireRow.Hidden = True:
    next i
    end with

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut
    Merci je vais regarder et essayer

    petite précision :dans le code j'analyse deux cellules dans deux feuilles différentes

    Cdt

    Bonsoir AALEX,

    Ton code pour le code 2 marche nickel mais je ne comprends pas comment
    Est-ce qu'il prend pas défaut la première cellule de ma ligne si on ne lui précise rien ?

    Merci pour ta réponse

    si je ne me trompe pas le 1 corespond à la colonne

  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 163
    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 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    petite précision :dans le code j'analyse deux cellules dans deux feuilles différentes
    Au lieu d'utiliser en "dur", le nom des feuilles, tu pourrais aussi déclarer des variables objets en tête de module et les initialiser dans une procédure de départ, par exemple Main.
    C'est plus clair à la lecture du code et surtout cela te facilitera la vie pour la maintenance.
    Ainsi ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i as integer
    with Sheets("MEDIC")
    for i = 320 to 316 step -1
    If .cells(i,1).Value = "" Then :.Rows(i).EntireRow.Hidden = True:
    next i
    end with
    Pourrait devenir
    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
    Option Explicit
    Dim shtA As Worksheet, shtB As Worksheet
    Sub Main()
     With ThisWorkbook
      Set shtA = .Worksheets("MEDIC")
      Set shtB = .Worksheets("Feuil1")
     End With
     Verif
    End Sub
    Sub Verif()
     Dim i As Integer
     With shtA
      For i = 320 To 316 Step -1
      If .Cells(i, 1).Value = "" Then: .Rows(i).EntireRow.Hidden = True:
      Next i
     End With
    End Sub
    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
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut
    Bonjour,

    J'ai parlé un peu trop vite car le code marche pas toujours complétement.

    Je m'explique :

    J'ai deux feuilles identiques avec 300 lignes de produits à commander
    Sur la première (dotation), l'utilisateur a le choix de cocher une cellule et là
    j'analyse cette cellule afin de masque la ligne ou pas sur la deuxième feuille.

    Par rapport à ce code j'ai recopié l'information(croix) de la première feuille sur la deuxième mais là le problème est que le code fonctionne bien quand il y a des suites de croix mais se bloque quand j'ai une cellule vide puis une croix puis une cellule vide.......

    Bonne journée

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    C'est autre chose que tu demandes là non, il me semble pas avoir lu dans tes précédents postes quelque chose sur une croix.
    Je viens de faire un test et je ne vois pas de soucis, peut être pourrais-tu nous montrer le code que tu utilises.

    Mon exemple avec des valeurs dans la colonne A et quelques X dans la colonne B, ici on part de la ligne 1 a la derniere ligne renseignée dans la colonne A.


    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
    Sub forum_croix()
    Dim i As Long, Derlig As Long
    Application.ScreenUpdating = False
    Const Mcol As Integer = 1 'Ici la Colonne maitre = A et colonne des X = B
     
    With Feuil1 'Sheets("MEDIC")
        Derlig = .Cells(.Rows.Count, Mcol).End(xlUp).Row
     
        For i = 1 To Derlig ' ou For i = derlig To 1 Step -1 ' ici les 2 fonctionnent, c'est pour les delete step -1
            If .Cells(i, Mcol + 1).Value = "x" Then: .Rows(i).EntireRow.Hidden = True:
        Next i
    End With
     
    Application.ScreenUpdating = True
    End Sub

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

Discussions similaires

  1. Simplification de code vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/11/2014, 11h01
  2. [XL-2003] Simplification d'un code Vba Excel 2003
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2013, 08h11
  3. Aide pour simplifier un code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/01/2008, 16h15
  4. Code VBA excel form et modules
    Par Cptnikita dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/10/2007, 10h15
  5. Problème avec un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2007, 16h43

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