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 :

deux boucle VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Par défaut deux boucle VBA
    Bonjour,

    J'ai un fichier planning avec les dates de l'année de J à CO
    les dates de début de tâches de E12 à E(fin des tâches) et les dates de fin de tâches de F12 à F(fin des tâches).

    Je veux que le fichier me colore en vert les cases comprises entre la date de début et la date de fin sans prendre en compte les samedi, dimanche et jour férié.
    Puis je passe à la ligne suivante et ainsi de suite.

    J'arrive à le faire sur une ligne mais je ne sais pas comment passer à la ligne suivante. (j'ai mis en noire les samedi, dimanche et jour férié)

    pouvez vous m'aider ?

    voila 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
    Private Sub Worksheet_Change(ByVal target As Range)
     
    For c = 10 To 50 '(50 pour le test mais j'irai ensuite jusqu'à la case qui contient 31/12/2018)
     
    If Cells(3, c) >= Cells(12, 5) And Cells(3, c) <= Cells(12, 6) And Cells(12, c).Interior.Color <> RGB(0, 0, 0) Then
    Cells(12, c).Interior.Color = RGB(0, 255, 0)
    Else
    If Cells(12, c).Interior.Color <> RGB(0, 0, 0) Then
     
    Cells(12, c).Interior.Color = RGB(255, 255, 255)
    Else
    End If
    End If
    Next
     
    End Sub


    Merci !

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    il te suffit d'ajouter un

    for ligne = x to y

    next

    avant le for c

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Par défaut
    Merci a_diard !

    Du coup j'ai mis :

    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_Change(ByVal target As Range)
    For l = 12 To 100
    For c = 10 To 374
     
    If Cells(3, c) >= Cells(l, 5) And Cells(3, c) <= Cells(l, 6) And Cells(l, c).Interior.Color <> RGB(217, 217, 217) Then
    Cells(l, c).Interior.Color = RGB(146, 208, 80)
    Else
    If Cells(l, c).Interior.Color <> RGB(217, 217, 217) Then
     
    Cells(l, c).Interior.Color = RGB(255, 255, 255)
    Else
    End If
    End If
     
    Next c
    Next l
     
    End
     
    End Sub

    le code marche très bien, par contre c'est devenu très lent à chaque fois que je modifie une case.

    Est ce qu'il y a une méthode pour optimiser la formule ou alors ne faire le calcul que si je modifie les case en E ?


    Merci.

  4. #4
    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 Drukam Voir le message
    le code marche très bien, par contre c'est devenu très lent à chaque fois que je modifie une case.
    C'est un peu logique vu qu'à chaque changement ta macro fait environ 1,5 millions de tests.

    Est ce qu'il y a une méthode pour optimiser la formule ou alors ne faire le calcul que si je modifie les case en E ?
    Tu ne mets pas ton code dans une macro évènementielle mais dans une macro classique que tu lances manuellement quand tu as terminé tes modifications.

    Ou tu ne traites que la ligne concernée par la modification en utilisant le paramètre target de l'évènement.
    Tu vires For l = 12 To 100 et tu le remplaces par l = target.Row.

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Par défaut
    c'est parfait ça marche très bien, j'ai gardé mon code d'origine à l'ouverture du classeur et ensuite j'ai mis l = target.row à chaque changement.

    Merci !!

  6. #6
    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 Drukam Voir le message
    j'ai gardé mon code d'origine à l'ouverture du classeur
    Je n'en comprends pas l'intérêt...

Discussions similaires

  1. [XL-2010] Boucle VBA entre deux onglets
    Par Edge38 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/03/2017, 14h10
  2. Sortire de deux boucle en une foi
    Par mcdonald dans le forum Général Python
    Réponses: 5
    Dernier message: 08/08/2006, 15h11
  3. Batch - Deux boucle For imbriquées plus un FC
    Par Lorponos dans le forum Windows
    Réponses: 17
    Dernier message: 27/07/2006, 14h58
  4. séléction d'un ligne excel et boucle [vba]
    Par lou87 dans le forum Access
    Réponses: 2
    Dernier message: 06/06/2006, 11h00
  5. comment quitter deux boucles for?
    Par davmaster62 dans le forum Général Python
    Réponses: 2
    Dernier message: 08/03/2006, 00h16

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