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 :

Optimisation de code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut Optimisation de code
    Bonjour,

    J'ai mis en place le code suivant basé sur un "Worksheet_SelectionChange":
    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
    Sub Incorporer_Ventes()
    Dim i As String, j As String, k As String
    Dim x As Integer, m As Integer
    Dim Fam As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    i = ActiveCell.Offset(0, -12)
    j = ActiveCell.Offset(0, -10)
    k = ActiveCell.Offset(0, -6)
    x = ActiveCell.Row
    If (k = "") And (j <> "") And (i <> "") Then ActiveCell.Offset(0, -6).Value = "PRE-VENDU" 'Met dépôt pré-vendu si il y a qté et produit et pas de dépôt d'affecté
    If (i = "") And (j = "") Then Exit Sub 'quitte si pas qte et produit
    If ActiveCell.Offset(0, -6).Interior.ColorIndex = 6 Then Exit Sub Else 'vérifie si le produit est déjà déstocké
     
    Fam = Sheets("VENTES").Cells(x, 36) & Sheets("VENTES").Cells(x, 37) 'affecte produit et famille
    For m = 3 To 122 'affecte la plage de colonnes pour le destockage
        If Sheets("DEPOTS").Cells(2, m) & Sheets("DEPOTS").Cells(3, m) = Fam Then ' vérifie que la colonne correspond au produit
            Sheets("DEPOTS").Cells(x + 191, m) = Sheets("VENTES").Cells(x, 3) 'remplit la quantité dans le stock
            Sheets("DEPOTS").Cells(x + 191, 1) = Sheets("VENTES").Cells(x, 21) 'remplit le nom du client
            Sheets("DEPOTS").Cells(x + 191, 2) = Sheets("VENTES").Cells(i, 22) 'remplit le transporteur
            Sheets("DEPOTS").Cells(x + 191, 125) = Sheets("ACHATS").Cells(i, 9) 'remplit le dépôt
     
            Exit For
        End If
    Next m
    ActiveCell.Offset(0, -6).Interior.ColorIndex = 6
    Application.EnableEvents = True
    Application.ScreenUpdating = True
     
    End Sub
    Première question : Voyez-vous un moyen d'optimiser ce code ?
    Deuxième question : sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveCell.Offset(0, -6).Interior.ColorIndex = 6 Then Exit Sub Else 'vérifie si le produit est déjà déstocké
    Je souhaiterais qu'un message d'avertissement s'affiche avant le Exit Sub
    J'avais dans un premier temps essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveCell.Offset(0, -6).Interior.ColorIndex = 6 Then MsgBox ("Produit déjà Déstocké") Else 'vérifie si le produit est déjà déstocké
    Mais je n'arrive pas à afficher le message et faire un exit sub en même temps.

    Merci par avance de votre aide,

    Jarault

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut


    Je souhaiterais qu'un message d'avertissement s'affiche avant le Exit Sub
    J'avais dans un premier temps essayé:
    Code :
    If ActiveCell.Offset(0, -6).Interior.ColorIndex = 6 Then MsgBox ("Produit déjà Déstocké") Else 'vérifie si le produit est déjà déstocké
    Mais je n'arrive pas à afficher le message et faire un exit sub en même temps.
    Fais plutot ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If ActiveCell.Offset(0, -6).Interior.ColorIndex = 6 Then
     MsgBox ("Produit déjà Déstocké") 
     exit sub
    else
    'vérifie si le produit est déjà déstocké
    End if

  3. #3
    Membre éprouvé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Par défaut
    1ere question, ça a l'air déjà optimisé...

    2e question: il est possible d'utiliser GoTo et une balise pour sortir du for et afficher ton msg.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i=x to y
      <instructions>
      Goto finfor
    Next x
     
    goto suite
    finfor:
    msgbox "mon message"
     
     
    suite:
    <instructions>
    c'est peu déontologique, mais efficace

    edit: grilled

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Par défaut
    Le code semble maintenant fonctionner correctement:
    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
    Sub Incorporer_Ventes()
    Dim i As String, j As String, k As String
    Dim x As Integer, m As Integer
    Dim Fam As String
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    i = ActiveCell.Offset(0, -12)
    j = ActiveCell.Offset(0, -10)
    k = ActiveCell.Offset(0, -6)
    x = ActiveCell.Row
     
    If (k = "") And (j <> "") And (i <> "") Then ActiveCell.Offset(0, -6).Value = "PRE-VENDU" 'Met dépôt pré-vendu si il y a qté et produit et pas de dépôt d'affecté
    If (i = "") And (j = "") Then Exit Sub 'quitte si pas qte et produit
     
    'vérifie si le produit est déjà déstocké
    If ActiveCell.Offset(0, -6).Interior.ColorIndex = 6 Then
     MsgBox ("Produit déjà Déstocké")
     Exit Sub
    Else
    End If
     
    Fam = Sheets("VENTES").Cells(x, 36) & Sheets("VENTES").Cells(x, 37) 'affecte produit et famille
    For m = 3 To 122 'affecte la plage de colonnes pour le destockage
        If Sheets("DEPOTS").Cells(2, m) & Sheets("DEPOTS").Cells(3, m) = Fam Then ' vérifie que la colonne correspond au produit
            Sheets("DEPOTS").Cells(x + 338, m) = Sheets("VENTES").Cells(x, 3) 'remplit la quantité dans le stock
            Sheets("DEPOTS").Cells(x + 338, 1) = Sheets("VENTES").Cells(x, 21) 'remplit le nom du client
            Sheets("DEPOTS").Cells(x + 338, 2) = Sheets("VENTES").Cells(x, 22) 'remplit le transporteur
            Sheets("DEPOTS").Cells(x + 338, 125) = Sheets("VENTES").Cells(x, 9) 'remplit le dépôt
     
            Exit For
        End If
    Next m
     
    'Colorie en jaune si il y a eu destockage
    ActiveCell.Offset(0, -6).Interior.ColorIndex = 6
     
    Application.EnableEvents = True
    Application.ScreenUpdating = True
     
    End Sub
    Merci pour la rapidité des réponses
    Jarault

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

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