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 :

Optimiser un code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2020
    Messages : 1
    Par défaut Optimiser un code
    Bonsoir Forum,

    J'ai une liste de nombre sur la colonne A. J'ai fait un code qui crée sur la colonne B la liste sans doublon et sur la colonne C la somme.
    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
    Sub list()
     
    Dim i, j, k, compt, sum As Integer
     
    compt = 0
     
    For i = 1 To 22
     
        For j = 1 To i
     
            If Range("A" & i).Value <> Range("A" & j).Value Then 'je teste un nombre avec tous ses antécédants sur la liste
            Else
            compt = compt + 1 'si le nombre est égal à un antécédant j'incrémente le compteur
            End If
        Next
            If compt > 1 Then 'si le compteur est supérieur à 1, le nombre est donc déja dans la liste des antécédents et je fait rien
            Else 'sinon c'est un nouveau nombre et je l'ajoute dans la liste sans doublon
            k = k + 1
            Range("B" & k) = Range("A" & i) 'j'inscrit le nouveau nombre
            End If
            compt = 0
    Next
     
    'On calcule à present la somme de chaque élément
    sum = 0
    For i = 1 To k
        For j = 1 To 21
            If Range("A" & j).Value = Range("B" & i).Value Then 'je fais le test pour reperer tous les nombres égaux
            sum = sum + Range("A" & j).Value ' j'en fais la somme
            Else
            End If
        Next
     
        Range("C" & i).Value = sum 'j'inscrit la somme sur la colonne C
        sum = 0
    Next
     
    End Sub
    Je voudrai savoir si on peut optimiser le code ou faire autrement en utilisant des fonctions en vba ? Je sais que ma liste s'arrête à la ligne 22 et je l'utilise dans ma boucle for. Est ce possible de trouver par un test le numéro de la dernière ligne ( une sorte de variable)?

    Merci de votre aide !

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    À essayer, dans une copie de ton fichier.
    Code que j'utilisais pour ce type de traitement avant de passer au tableaux structuré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub CompteItems()
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("a2", [a65000].End(xlUp))
        mondico(c.Value) = mondico(c.Value) + 1
      Next c
      [c2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
      [d2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
      [C1].Sort Key1:=[C2], Order1:=xlAscending, Header:=xlYes
    End Sub

  3. #3
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Est ce possible de trouver par un test le numéro de la dernière ligne ( une sorte de variable)?
    Bonjour, pour répondre précisément à cette question, testez le code ci-dessous dans un document d'essai: DerLig est une variable qui contiendra le numéro de la dernière ligne écrite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    DerLig = Worksheets("Feuil1").Range("A1000000").End(xlUp)(1).Row 'Vous devez utiliser la feuille nommée"Feuil1" et bien sur remplir une liste de valeur dans la colonne A.
    MsgBox DerLig
    End Sub
    Cordialement

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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