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 :

Eviter les cases de couleurs dans Macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut Eviter les cases de couleurs dans Macro
    Bonjour a tous !!

    Voici mon probleme, sur lequel je planche depuis maintenant quelques temps.
    Je suis en train de réaliser une étude sur les absences et j'ai besoin en autre de savoir la durée des absences.(pas le nombre d'absences)

    Les jours en jaune représente les jours ouvrable
    Ceux en rouge les jours fermés.

    Les absences s'exprime en jours ouvrables, une absence de 2 semaine,, sera donc de 10jours si la personne ne travaille pas le Samedi et le dimanche

    Dans mon fichier,
    Pour Julien,ses arrets durent respectivement 2 et 4 jours (car 2 jour fermés lors de la seconde absence)
    Pour Marc,son premier arret dure 1 journée,son second 2 jours,et le dernier 1jour (pas de jour fermés dans ce cas)

    J'ai fait une petite macro qui compte le nombre de "ATM" ecrit a la suite.

    Celle ci marche correctement, mais je n'arrive pas a dire a ma macro de sauter une case (ou plusieurs case) quant elle rencontre une case rouge.

    En gros pour le cas de Julien , ma macro renvoi 2 jour, 3 jour et 1 journée.
    Sachant que le nombre de case rouge change selon les semaine et les mois etc...

    Comment faire ?

    Je vous met mon fichier a disposition pour mieux comprendre.
    Un grand merci d'avance.
    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
    Sub Absence()
     
    'Scanne l'ensemble des colonnes et se positionne a la fin de la ligne
        For indicecolonne = 3 To 4
        indiceligne = 23
        'ScAnne une ligne entiere
            For ligne = 3 To 20
            Cells(indicecolonne, ligne).Select
            'Fait le test pour savoir si la Case est un ATM!
                 If Cells(indicecolonne, ligne).Value = "ATM" Then
                    compteur = 1
                    essai = ligne + 1
                         For comptage = essai To 20
                                 If Cells(indicecolonne, comptage).Value = "ATM" Then
                                compteur = compteur + 1
                                ligne = ligne + 1
                                Else:
                                Cells(indicecolonne, indiceligne).Select
                                     If compteur <> 0 Then
                                    ActiveCell.Value = compteur
                                    compteur = 0
                                    indiceligne = indiceligne + 1
                                    ligne = 20
                                    End If
                                End If
                        Next comptage
     
                Else
                compteur = 0
                End If
            Next ligne
        Next indicecolonne
    End Sub

    Zephirsoul
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    bonjour,
    je commence un peu à regarder ton fichier. Choisis mieux le nom de tes variables, parce que là c'est un poil compliqué d'avoir ligne <=> colonne
    de même, déclare tes variables en début de code, là c'est dur de tout suivre
    pour le reste, il s'agit juste de prendre en compte le range.interior.colorindex
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut
    Merci de ta réponse,mais je n'arrive pas a utiliser le interior.color...Je ne sais pas ou le placer dans ma boucle...
    Si je le place tout au debut,mon compteur ce remet a zero a chaque fois qu'il trouve une case rouge et quand je met dans ma boucle, le cmpteur devient fou ???

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    tu dois juste faire en sorte que ton compteur de jour d'absence ne s'incrémente pas si la case est rouge, et tu laisses tourner jusqu'à ce que la couleur de la case ne soit plus rouge...
    c'est de l'algorithmie
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    tu testes si valeur cellule = "atm " et couleur cellule = "rouge"

    pour la couleur tu peux utiliser l enregisteur de macro pour recuperer l index de la couleur

    pour tester la couleur + "atm"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Cells(indicecolonne, comptage).Value = "ATM" and  if Cells(indicecolonne, comptage).interior.colorindex = 46

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    heu,

    je crois que c le jaune a tester.
    tu fais la mm chose avec la couleur a tester

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut
    Je dois vraiment etre nul en algorithmie alors,lol ou alors je sais pas comment m'y prendre ><

    Pour la solution avec le "ET" je ne comprend pas l'astuce, car, un ATM et forcement une case "Jaune" et la couleur reste la meme pour tous les ATM


    Il n'y a pas moyen de declarer tout en haut de mon code quelque chose comme

    If cellule = Rouge then Celulle=celulle+1 ? et que cela s'applique a chaque boucle/Si ?Car la je m'embrouille de plus en plus.
    Merci encore

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    rebonjour,

    qu est ce que tu veux au final le nb de jour d abscence en jour ouvrés,
    ci c le cas il me semble que les "atm" suffisent
    essaye de reformuler ta demande

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 317
    Par défaut
    Bonjour le forum, zephirsoul

    essaie avec ce 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
    Sub comptage()
    For ligne = 3 To 4
            For Each cel In Range(Cells(ligne, 3), Cells(ligne, 20))
            dercol = IIf(Cells(ligne, 256).End(xlToLeft).Column < 23, 23, Cells(ligne, 256).End(xlToLeft).Column + 1)
                If cel.Interior.ColorIndex = 3 Then GoTo suite
                    If cel.Value = "ATM" Then
                        compteur = compteur + 1
                    Else
                        If compteur <> 0 Then Cells(ligne, dercol).Value = compteur: compteur = 0
                    End If
    suite:
            Next cel
    Next ligne
    End Sub

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

Discussions similaires

  1. Eviter les sauts de page dans bloc
    Par Charentais dans le forum Deski
    Réponses: 1
    Dernier message: 05/05/2010, 01h10
  2. eviter les suts de bloc dans les pages
    Par Charentais dans le forum Deski
    Réponses: 3
    Dernier message: 04/05/2010, 15h49
  3. Eviter les sauts de ligne dans chaîne concaténée
    Par Carlozi dans le forum Langage
    Réponses: 7
    Dernier message: 06/08/2008, 14h45
  4. Eviter les sauts de page dans un tableau
    Par jaymzwise dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 31/07/2007, 17h11
  5. [MySQL] Eviter les doublons à l'insertion dans une base
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 26/01/2006, 15h26

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