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

  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...

  7. #7
    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
    La première fois que je l'ai créé j'ai du faire tout d'un coup car les dates étaient déja rentrées mais c'est vrai que sur un fichier vierge le planning sera mis à jour au fur et à mesure que je créé les dates.

    Donc je n'aurai pas besoin du calcul à l'ouverture.

  8. #8
    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
    La première fois que je l'ai créé j'ai du faire tout d'un coup car les dates étaient déja rentrées mais c'est vrai que sur un fichier vierge le planning sera mis à jour au fur et à mesure que je créé les dates.

    Donc je n'aurai pas besoin du calcul à l'ouverture.
    Je ne suis pas vraiment de ton avis.
    Il suffit de mettre la macro dans un module standard et de le lancer une fois.
    Inutile de le relancer à chaque ouverture du fichier puisque, après la première mise en forme, le fichier est remis à jour à chaque modification.
    Le lancer à chaque ouverture ne fera qu'alourdir inutilement ton fichier.

  9. #9
    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
    Oui tu as raison je l'ai enlevé et en plus ca m'évite d'avoir des lignes de code partout !

    Par contre j'ai un autre problème, j'ai un bouton sur la feuille 2 qui copie une ligne de la feuille 2 et la colle dans la feuille 1 puis supprime les lignes.

    Elle marche très bien si je n'ai que cette macro. Mais sur ma feuille 1 j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub worksheet_change(ByVal target As Range)
    du coup ma macro bouton se lance et dès qu'elle copie la ligne dans la feuille 1, elle s'arrête et passe sur le private sub.

    Comment faire pour l'obliger à se terminer avant de passer au private sub ?

  10. #10
    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
    au début de ta macro liée au bouton sur la feuille 2

    tu peux ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Application.EnableEvents = True
     
    puis
     
    Application.EnableEvents = false
    en fin de code

    ceci désactive les macros événementielles

  11. #11
    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
    bonjour
    je sais pas pour vous mais perso il y a un truc qui me gene

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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)
    la derniere condition es le rgb (217,217,217) et dans le else le 217 devient 255
    ma question est donc pourquoi ne pas mettre 255 dans la condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(l, c).Interior.Color = iif( Cells(3, c) >= Cells(l, 5) And Cells(3, c) <= Cells(l, 6) And Cells(l, c).Interior.Color <> RGB(255, 255, 255),RGB(146, 208, 80), RGB(255, 255, 255))
    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

  12. #12
    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
    a_diard

    merci à toi ca marche par contre j'ai mis :

    Application.EnableEvents = False en début de code et Application.EnableEvents = True en fin de code.


    patricktoulon

    Ma formule c'est si ma case est comprise entre deux dates et que la couleur de ma case n'est pas grise (weekend et férié) alors la colorier en vert sinon la mettre en blanc sauf si celle ci est grise.

    si je comprend bien ta formule, elle ferai si ma case est comprise entre deux dates et que la couleur de ma case n'est pas verte, grise ou blanche alors la colorier.
    Mais je dois colorier les cases blanche en verte si elles sont entre mes deux dates.

    Je ne sais pas si je suis super claire

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