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é
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Par défaut Optimisation de code
    Bonjour,

    Je cherche désespéramment à optimiser 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Mois = Format(MaDate.Value, "mmmm")
    Set rangemois = Worksheets("2018").Rows("1:1").Find(Mois, lookat:=xlValue)
    jour = Val(Format(MaDate, "dd"))
    NomAmbulancier = Worksheets("2018").Range("AA25:AA183").Find(ChoixAmbu.Value, lookat:=xlValue).Row
    Set plagejour = Worksheets("2018").Range(Replace(rangemois.MergeArea.Address, rangemois.MergeArea.Row, 2))
    Colonnedujour = plagejour.Find(jour, lookat:=xlValue).Column
     
    VarTmp = Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).Text
     
    If VarTmp = "" Then
        'La cellule heures supp. de la date sélectionnée est vide.
        'Alors copier le résultat du calcul et ajouter commentaire.
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0) = CopieCalcul
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).AddComment AddCommentaire
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).Comment.Shape.TextFrame.AutoSize = True
    Else
        'La cellule heures supp. de la date sélectionnée n'est pas vide.
        'Alors additionner la valeur actuel avec le résultat du calcul et ajouter commentaire.
        CalculTmp = TimeValue(Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).Text)
        ResultatTmp = CalculTmp + CopieCalcul
     
        ComCellule = Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).Comment.Text
        AddCommentaire2 = ("Heures supp. du matin" & Chr(10) & ComCellule & Chr(10) & Chr(10) & "Heures supp. du soir" & Chr(10) & AddCommentaire)
     
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).ClearContents
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).ClearComments
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0) = ResultatTmp
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).AddComment AddCommentaire2
        Cells(NomAmbulancier, Colonnedujour).Offset(1, 0).Comment.Shape.TextFrame.AutoSize = True
    End If
    Est-il possible de créer une variable qui serait égale à Cells(NomAmbulancier, Colonnedujour).Offset(1, 0) afin de d'alléger le code?

    Merci à vous.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    oui mais pas nécessaire en utilisant un bloc With (à consulter dans l'aide VBA interne) …

    ___________________________________________________________________________________________________________
    Je suis Paris, Mogadicio, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MicKRub Voir le message
    Est-il possible de créer une variable qui serait égale à Cells(NomAmbulancier, Colonnedujour).Offset(1, 0) afin de d'alléger le code?
    La solution parait si évidente qu'il est étonnant que tu n'y ais pas pensé : si tu fait +1 à ta variable NomAmbulancier sur la ligne 5, tu peux virer tous tes Offset.

    Perso, je mettrais même juste après Cells(NomAmbulancier, Colonnedujour) dans une variable de type Range.
    Etant donné le nombre d'utilisation que tu en fais, ce ne serait pas du luxe.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Par défaut
    Citation Envoyé par Menhir Voir le message
    La solution parait si évidente qu'il est étonnant que tu n'y ais pas pensé : si tu fait +1 à ta variable NomAmbulancier sur la ligne 5, tu peux virer tous tes Offset.

    Perso, je mettrais même juste après Cells(NomAmbulancier, Colonnedujour) dans une variable de type Range.
    Etant donné le nombre d'utilisation que tu en fais, ce ne serait pas du luxe.

    Merci pour l'astuce du +1. Je ne pensais pas que cela était possible si simplement.

    Par contre j'ai créé une variable comme ceci,

    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
     
     
    Dim CelluleDestination As Range
     
    Mois = Format(MaDate.Value, "mmmm")
    Set rangemois = Worksheets("2018").Rows("1:1").Find(Mois, lookat:=xlValue)
    jour = Val(Format(MaDate, "dd"))
    NomAmbulancier = Worksheets("2018").Range("AA25:AA183").Find(ChoixAmbu.Value, lookat:=xlValue).Row + 1
    Set plagejour = Worksheets("2018").Range(Replace(rangemois.MergeArea.Address, rangemois.MergeArea.Row, 2))
    Colonnedujour = plagejour.Find(jour, lookat:=xlValue).Column
     
    CelluleDestination = Cells(NomAmbulancier, Colonnedujour)
     
    CelluleDestination = CopieCalcul
    CelluleDestination.AddComment AddCommentaire
    CelluleDestination.Comment.Shape.TextFrame.AutoSize = True
    Mais cela ne fonctionne pas. Il y a sans doute quelques chose de faux mais je ne vois pas... (oui je débute)

    Merci beaucoup

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    salut
    tu a fini quand même par comprendre mon principe pour ton find par rapport a une plage fusionnée

    bon pour le reste
    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
    Mois = Format(MaDate.Value, "mmmm")
    Set rangemois = Worksheets("2018").Rows("1:1").Find(Mois, lookat:=xlValue)
    jour = Val(Format(MaDate, "dd"))
    NomAmbulancier = Worksheets("2018").Range("AA25:AA183").Find(ChoixAmbu.Value, lookat:=xlValue).Row
    Set plagejour = Worksheets("2018").Range(Replace(rangemois.MergeArea.Address, rangemois.MergeArea.Row, 2))
    Colonnedujour = plagejour.Find(jour, lookat:=xlValue).Column
    Set macel = Cells(NomAmbulancier, Colonnedujour).Offset(1, 0)
    With macel
        If .Text = "" Then
            'La cellule heures supp. de la date sélectionnée est vide.
            'Alors copier le résultat du calcul et ajouter commentaire.
            .Value = CopieCalcul
            .AddComment AddCommentaire
            .Comment.Shape.TextFrame.AutoSize = True
        Else
            'La cellule heures supp. de la date sélectionnée n'est pas vide.
            'Alors additionner la valeur actuel avec le résultat du calcul et ajouter commentaire.
            CalculTmp = TimeValue(.Text)
            ResultatTmp = CalculTmp + CopieCalcul
            ComCellule = .Comment.Text
            AddCommentaire2 = ("Heures supp. du matin" & Chr(10) & ComCellule & Chr(10) & Chr(10) & "Heures supp. du soir" & Chr(10) & AddCommentaire)
            .ClearContents
            .ClearComments
            .Value = ResultatTmp
            .AddComment AddCommentaire2
            .Comment.Shape.TextFrame.AutoSize = True
        End If
    End With
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Par défaut
    Oui j'ai pris mon temps mais j'y suis arrivé.

    Merci pour le code.

    Salutations

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MicKRub Voir le message
    Mais cela ne fonctionne pas. Il y a sans doute quelques chose de faux mais je ne vois pas... (oui je débute)
    Pour assigner un objet à une variable, on soit utiliser un Set.
    https://msdn.microsoft.com/fr-fr/VBA.../set-statement

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Par défaut
    Merci à tous pour vos aides

+ 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