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 :

Boucle pour améliorer mon code


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut Boucle pour améliorer mon code
    Bonjour
    Je débute en VBA
    J'ai bricolé ce petit bout de code mais je pense que l'on peut l'améliorer.
    Mon souhait :
    1° pour la Dim V, je voudrais qu'il prenne les cellules allant de B10 à B21 à chaque calcul
    2° j'aurais aimé ne pas avoir à mettre 12 lignes identiques

    Je suppose qu'il faut faire une sorte de boucle

    J'espère que mon explication est claire

    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
    Private Sub Worksheet_activate()
     
        Dim V
     
        V = Application.WorksheetFunction.VLookup(Range("B10"), Sheets("setup").Range("SetupImportMois"), 2, 0)
     
        Range("C10") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C11") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C12") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C13") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C14") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C15") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C16") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C17") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C18") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C19") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C20") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
        Range("C21") = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2" & ":" & V & Rows.Count))
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Je ne comprends pas le but, mais tu peux boucler ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 10 to 21
       Range("C" & I) = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2:" & V & Rows.Count))
    Next
    MPi²

  3. #3
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Super merci cela fonctionne

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Excusez-moi, mais je ne comprends pas la nécessité d'une boucle pour affecter finalement la même valeur à toutes les cellules d'une plage.
    Je ne vois en effet rien varier.
    Quelque-chose m'aurait-il échappé ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    rivate Sub worksheet_activate()
     
        Dim V
        Dim i As Byte
     
        Application.ScreenUpdating = False
        For i = 10 To 21
        V = Application.WorksheetFunction.VLookup(Range("B" & i), Sheets("setup").Range("SetupImportMois"), 2, 0)
        Range("C" & i) = Application.CountA(Sheets("MOIS-MAAND").Range(V & "2:" & V & Rows.Count))
        Next
        Application.ScreenUpdating = True
     
    End Sub

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme unparia, je ne comprends pas la raison d'effectuer une boucle pour obtenir le même résultat qu'une fonction native d'excel peut effectuer parfaitement même si c'est pour l'insérer avec un code VBA. Une seule ligne de code suffit
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 282
    Points : 89
    Points
    89
    Par défaut
    Voici mon code modifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub worksheet_activate()
     
        Dim i As Byte
     
        Application.ScreenUpdating = False
        For i = 10 To 21
        Range("C" & i) = Application.CountA(Sheets("MOIS-MAAND").Range(Application.WorksheetFunction.VLookup(Range("B" & i), Sheets("setup").Range("SetupImportMois"), 2, 0) & "2:" & Application.WorksheetFunction.VLookup(Range("B" & i), Sheets("setup").Range("SetupImportMois"), 2, 0) & Rows.Count))
        Next
        Application.ScreenUpdating = True
     
    End Sub

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

Discussions similaires

  1. help sur VBA excel
    Par soffy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2007, 11h49
  2. [VBA-E] Affichage de résutats dans textbox help
    Par sebek_2000 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/02/2007, 16h28
  3. [VBA-E] Help création d'un programme vba pour excel
    Par yampi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2007, 11h46
  4. [VBA] Passer un argument à un formulaire [HELP]
    Par billyboy dans le forum Access
    Réponses: 2
    Dernier message: 27/05/2006, 18h14
  5. [VBA-E] [help]macro pour dupliquer une feuille (en valeur)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/11/2005, 19h24

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