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 max du code [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut Simplification max du code
    bonjour es que l'on peux simplifier ce code svp
    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
    Sub Compteur_3()
        Dim i As Integer
        Dim j As Integer
        Dim Compteur1 As Integer
        Dim Compteur2 As Integer
        i = 3
        j = 3
        Compteur1 = 0
        Compteur2 = 0
     
        Do While Range("A" & i).Value <> ""
     
         If Range("A" & i).Value = 1 Then
               Compteur1 = Compteur1 + 1
           Else
               'Compteur = 0
         End If
     
         i = i + 1
        Loop
     
     
        Range("j4").Value = Compteur1
     
      Do While Range("A" & j).Value <> ""
     
     
    If Range("A" & j).Value = 2 Then
               Compteur2 = Compteur2 + 1
           Else
               'Compteur = 0
         End If
     
         j = j + 1
        Loop
     
     
        Range("k4").Value = Compteur2
     
     
    End Sub
    merci

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour pilounet54,

    Voila une proposition :

    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
    Sub Compteur_3()
     
    Dim i, Compteur1, Compteur2 As Integer
     
    i = 3
    Compteur1 = 0
    Compteur2 = 0
     
    Do While Range("A" & i).Value <> ""
        If Range("A" & i).Value = 1 Then
            Compteur1 = Compteur1 + 1
        ElseIf Range("A" & i).Value = 2 Then
            Compteur2 = Compteur2 + 1
        End If
        i = i + 1
    Loop
     
    [J4].Value = Compteur1
    [K4].Value = Compteur2
     
    End Sub
    Antony

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    N'oubliez pas la fonction NB.SI d'Excel!!

    En vba Worksheetfunction.countif

  4. #4
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Attention lors de simplification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim A, B, C as Integer
    msgbox TypeName(A) & vbCrLf & TypeName(B) & vbCrLf & TypeName(C)
    On voit ici que les deux premières variables sont "Empty", et seul la dernière est "Integer" : elles ne sont pas toutes Integer.

    Attention aussi lors de l'utilisation de "Range" et de "Cells" sans leurs affecter de références, par défaut, elles sont sur la feuille Active, mais c'est une source d'erreur !

    Penser à encadrer le code avec "With worksheets("MaFeuille")", ou utiliser le CodeName de la feuille pour plus de sécurité :

    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
    Sub Compteur_3()
     
    Dim i as Integer, Compteur1 as Integer, Compteur2 As Integer
     
    i = 3
    Compteur1 = 0
    Compteur2 = 0
     
    With Worksheets("MaFeuille")
    Do While .Range("A" & i).Value <> ""
        If .Range("A" & i).Value = 1 Then
            Compteur1 = Compteur1 + 1
        ElseIf .Range("A" & i).Value = 2 Then
            Compteur2 = Compteur2 + 1
        End If
        i = i + 1
    Loop
    End With
     
    [J4].Value = Compteur1
    [K4].Value = Compteur2
     
    End Sub
     
    'Créé par antonysansh

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Comme le dis si bien mercatog, s'il n'est pas nécessaire de trouver la ou les cellules qui ont la valeur cherchée, ContIf est idéal et surtout très rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub Compteur_3()
     
        Range("j4").Value = WorksheetFunction.CountIf(Columns(1), 1)
        Range("k4").Value = WorksheetFunction.CountIf(Columns(1), 2)
     
    End Sub
    *
    Hervé.

  6. #6
    Membre confirmé
    Homme Profil pro
    Apprenti GEII
    Inscrit en
    Janvier 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Apprenti GEII
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2014
    Messages : 83
    Par défaut
    +1 pour CountIf

    Moi même j'ai simplifié un code qui bouclait sur 150 colones ce matin, l'utilisation de Countif est très efficace.

    Puis au lieu de boucler jusqu'à ce que tu trouves une cellule vide, tu peux directement trouver la première cellule vide et en déduire ton compteur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("A1").End(xlRight).Offset(1, 0).Column

  7. #7
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    bonjour et merci pour tout
    à tout de suite

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

Discussions similaires

  1. [MySQL] Simplification d'un code php
    Par sff dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/08/2008, 14h35
  2. simplification d'un code
    Par lolo93 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/04/2008, 11h38
  3. Réponses: 2
    Dernier message: 30/05/2007, 15h04
  4. Simplification de mon code?
    Par totoc1001 dans le forum MATLAB
    Réponses: 6
    Dernier message: 31/01/2007, 16h50
  5. [VBA-E] Aide pour simplification de mon code.
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 11h34

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