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 :

Calcul par ligne et non par page. [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Calcul par ligne et non par page.
    Bonjour a tous, bonne année, santé, meilleur vœux...

    Mon petit problème est sur un code qui calcul sur une page entière ce qui prend relativement du temps.

    Voici mon code dans sont intégralité même si vous n'avez pas tout besoin. Et comme je ne mis connais pas grand chose je préfère ne rien oublier lol:
    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 Excel.Range)
    Dim cel As Range
    For Each cel In Range("AC26:AC2008")
            Select Case cel.Value
               Case Is < 0
                 Call Coloriser_cellule(cel, 1)
               Case Is = 0
                 Call Coloriser_cellule(cel, 0)
               Case Is = 1
                 Call Coloriser_cellule(cel, 6)
               Case Is > 1
                 Call Coloriser_cellule(cel, 1)
             End Select
    Next cel
       End Sub
     
         Public Function Coloriser_cellule(ByVal Target_cellule As Excel.Range, ByVal Couleur As Single)
           Target_cellule.Interior.ColorIndex = Couleur
           Range(Cells(Target_cellule.Row, Target_cellule.Column - 28), Cells(Target_cellule.Row, Target_cellule.Column - 6)).Interior.ColorIndex = Couleur
      End Function
    Exactement se que je recherche est que quand je travaille sur la ligne 26 il recalcule que la ligne 26 et ainsi de suite jusque qu'a la ligne 2008.

    A savoir que dans la Colonne AC ce sont des Formules donc pas d'intervention directement dessus.

    Alors je pense que sa dois venir du début du code qui faut changer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim cel As Range
    For Each cel In Range("AC26:AC2008")
            Select Case cel.Value
    Merci de vos réponse.

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Slt,
    En admettant que lorsque tu modifie la valeur de la cellule tu valide avec la touche "entrer" tu peux mettre:
    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
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim cel As Range
    Set cel = ActiveCell.Offset(-1, 0)
    With cel
            Select Case cel.Value
               Case Is < 0
                 Call Coloriser_cellule(cel, 1)
               Case Is = 0
                 Call Coloriser_cellule(cel, 0)
               Case Is = 1
                 Call Coloriser_cellule(cel, 6)
               Case Is > 1
                 Call Coloriser_cellule(cel, 1)
             End Select
    End With
     
       End Sub
    a tester
    A+

    EDIT: Je viens de m'apercevoir que ce n'est pas bon car si tu entres une donnée dans n'importe quelle cellule de ta feuille la fonction va calculer et mettre une couleur. oupss dsl

  3. #3
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Voilà j'ai rectifié le tir, je pense

    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 Excel.Range)
     
    Dim cel As Range, numlign As Long
     
    Set cel = ActiveCell.Offset(-1, 0)
    numlign = cel.Row
     
    If Range("AC" & numlign).Value >= 26 Then
      Select Case Range("AC" & numlign).Value
        Case Is < 0
          Call Coloriser_cellule(cel, 1)
        Case Is = 0
          Call Coloriser_cellule(cel, 0)
        Case Is = 1
          Call Coloriser_cellule(cel, 6)
        Case Is > 1
          Call Coloriser_cellule(cel, 1)
      End Select
    End If
    End Sub
    A voir

    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Arff

    J'ai oublier de dire que dans la colonne AC ce sont des formules qu'il y as.

    Car avant j'avais ce code pour un problème similaire mes ou je modifier directement dans la cellule.
    et la j'avais ce code en debut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Private Sub Worksheet_Change(ByVal Target As Excel.Range)
         If Not Intersect(Target, Range("G22:G653")) Is Nothing Then
           With Target
             Select Case Target.Value
    Après sur mes nouveaux tableaux les valeurs que je modifie sont pas dans la même cellule ses un résultat d'une formule.

    Donc on m'avais fait ce code ici qui marche très bien mes quand je filtre une colonne et que je modifie une ligne temps d'attente 2 secondes entre la frappe de la 1er données et le déplacement sur une autre cellule.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Pour colorier la cellule de la colonne A...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Lig As Long, Coul As Integer
        Lig = Target.Row
        Select Case Target.Value
           Case Is < 0, Is > 1: Coul = 1
           Case Is = 0: Coul = 0
           Case Is = 1: Coul = 6
         End Select
         Cells(Lig, 1).Interior.ColorIndex = Coul
    End Sub
    Pour la 2ièm partie de ta fonction y a quelque chose qui cloche, tu met colonne-28.. et si target est en C.. ça va générer une erreur ?
    A+

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut à tous,
    L'avantage de l'évènement Change est que Target permet de savoir quelle cellule a été modifiée, on peut donc facilement limiter l'évènement à celle ci, petit exemple (je me suis permis de faire la coloration directement dans le select case)

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column <> 29 Then Exit Sub 'Sort si la cellule modifiée n'est pas dans la colonne AC
    If Target.Row < 26 Or Target.Row > 2008 Then Exit Sub 'Sort si la ligne de la cellule modifiée n'est pas comprise dans 26 et 2008
     
    Select Case Target.Value
        Case Is < 0
            Target.Interior.ColorIndex = 1
            Range(Cells(Target.Row, Target.Column - 28), Cells(Target.Row, Target.Column - 6)).Interior.ColorIndex = 1
        Case Is = 0
            Target.Interior.ColorIndex = 0
            Range(Cells(Target.Row, Target.Column - 28), Cells(Target.Row, Target.Column - 6)).Interior.ColorIndex = 0
        Case Is = 1
            Target.Interior.ColorIndex = 6
            Range(Cells(Target.Row, Target.Column - 28), Cells(Target.Row, Target.Column - 6)).Interior.ColorIndex = 6
        Case Is > 1
            Target.Interior.ColorIndex = 1
            Range(Cells(Target.Row, Target.Column - 28), Cells(Target.Row, Target.Column - 6)).Interior.ColorIndex = 1
        End Select
     
    End Sub
    A+

    Edit: Désolé pas rafraichi et pas le plus efficace

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    je viens d'éditer mon 1er poste avec mentionner colonne AC résultat de formule pour éviter de travailler pour rien en début d'année

    pour répondre a LeForestier
    le Target et en colonne AC et non en colonne C
    le -28 te ramène donc a la colonne B

    Je regarde encore ton Code car je vois des nouveaux truc

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Si cette fois j'ai bien compris...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Lig As Long, Coul As Integer
        If Target.columns <> 29 Then Exit Sub
        Lig = Target.Row
     
        Select Case Target.Value
           Case Is < 0, Is > 1: Coul = 1
           Case Is = 0: Coul = 0
           Case Is = 1: Coul = 6
           Case Is > 1: Coul = 1
         End Select
         Cells(Lig, 29).Interior.ColorIndex = Coul
         Cells(Lig, 2).Interior.ColorIndex = Coul
    End Sub
    A+

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Je crois que j'ai tourné le code dans touts les sens mes aucun sucés.

    Je pense que je dois faire le boulet car il ne se passe rien.

    Voici le code comme je l'ai taper dans sont intégralité avec sa deuxième partie également:
    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Lig As Long, Coul As Integer
        If Target.columns <> 29 Then Exit Sub
        Lig = Target.Row
     
        Select Case Target.Value
           Case Is < 0, Is > 1: Coul = 1
           Case Is = 0: Coul = 0
           Case Is = 1: Coul = 6
           Case Is > 1: Coul = 1
         End Select
         Cells(Lig, 29).Interior.ColorIndex = Coul
         Cells(Lig, 2).Interior.ColorIndex = Coul
    End Sub
     
         Public Function Coloriser_cellule(ByVal Target_cellule As Excel.Range, ByVal Coul As Single)
           Target_cellule.Interior.ColorIndex = Coul
           Range(Cells(Target_cellule.Row, Target_cellule.Column - 28), Cells(Target_cellule.Row, Target_cellule.Column - 6)).Interior.ColorIndex = Coul
      End Function
    Remarque: J'ai également essayer de le mettre sans la 2ieme partie car je pense que sa dois déjà être écrit avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Cells(Lig, 29).Interior.ColorIndex = Coul
         Cells(Lig, 2).Interior.ColorIndex = Coul
    Alors explication plus détailler:
    quand il y a 1 dans la colonne AC couleur jaune
    quand il y a 0 dans la colonne AC sans couleur
    quand ses un autre numéros ses une erreur alors noir
    la couleur doit allais de la colonne B a la colonne W et la colonne AC (facultatif)
    Dans la colonne AC il y a une formule donc pas modifiable directement.
    Le problème que j'ai avec le script d'origine, il est lent car il recalcule toute la page a chaque valeur et on doit attendre 2s environ.

    A savoir que chaque ligne est indépendante.
    Donc la valeur de la ligne 25 colonne AC et donner dans la même ligne (25).
    Que la formule de la colonne AC fait référence au donné entré dans les colonnes de "I" a "R"

    Je pense que j'ai tout dis.
    tout sa pour dire que je n'arrive pas a faire fonctionné ce script et que je ne comprend pas pourquoi j'ai pas erreur rien ne ce passe.

  10. #10
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,
    Attention tu as un"s" en trop dans la ligne qui vérifie si la colonne est différente de 29 (AC)
    Pour les plages à colorer il suffit de mettre la plage B:W au lieu de B, donc en reprenant le code de LeForestier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Lig As Long, Coul As Integer
        If Target.Column <> 29 Then Exit Sub
        Lig = Target.Row
     
        Select Case Target.Value
           Case Is < 0, Is > 1: Coul = 1
           Case Is = 0: Coul = 0
           Case Is = 1: Coul = 6
           Case Is > 1: Coul = 1
         End Select
         Cells(Lig, 29).Interior.ColorIndex = Coul
         Range(Cells(Lig, 2), Cells(Lig, 23)).Interior.ColorIndex = Coul
    End Sub
    A+

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Je pense que je commence à comprendre tes explications,
    En colonne AC c'est une formule qui est tributaire des données de la ligne.
    Quand tu modifie par exemple la cellule de la colonne E, la formule change et c'est à ce moment la que tu veux changer les couleurs ?
    Si oui, ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Lig As Long, Coul As Integer
        Lig = Target.Row
        Select Case Cells(Lig,29).Value
           Case Is < 0, Is > 1: Coul = 1
           Case Is = 0: Coul = 0
           Case Is = 1: Coul = 6
           Case Is > 1: Coul = 1
         End Select
         Cells(Lig, 29).Interior.ColorIndex = Coul
         Cells(Lig, 2).Interior.ColorIndex = Coul
    End Sub

    Et tu n'a plus besoin de la fonction Coloriser_cellule
    C'est bon ?

  12. #12
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,

    LeForestier ne m'en veux pas, je suis à côté de mes pompes aujourd'hui j'avais pas tenu compte que la colonne AC était une formule...

    Par contre on se casse la tête avec une macro mais une mise en forme conditionnelle devrait faire l'affaire non ?

    A+

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Ok sa marche, problème résolu avec sucé.

    j'ai simplement changer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Lig, 2).Interior.ColorIndex = Coul
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(Lig, 2), Cells(Lig, 23)).Interior.ColorIndex = Coul
    Car ses une plage de la colonne "B" a "W"

    Merci bien as vous pour votre aide rapide

    le problème que j'ai avec la mise en forme conditionnelle ses que j'ai presque 2000 lignes et que chaque ligne est indépendante est quand je fait un copier coller ou remplir vers le bas sa prends toujours la ligne index. Et faire 2000 condition ses quand même plus léger et plus rapide que faire une condition par une.

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par Fvandermeulen Voir le message
    Re,
    Par contre on se casse la tête avec une macro mais une mise en forme conditionnelle devrait faire l'affaire non ?

    A+
    Pas de souci,
    Et tu a raison pour les MFC, d'autant plus qu'il est en excel 2007. mais Bon..
    A+

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    DSL j'ai édité
    le problème que j'ai avec la mise en forme conditionnelle ses que j'ai presque 2000 lignes et que chaque ligne est indépendante est quand je fait un copier coller ou remplir vers le bas sa prends toujours la ligne index. Et faire 2000 condition ses quand même plus léger et plus rapide que faire une condition par une.
    et puis je suis vieux ses Excel 2000 lol
    il vas falloir que j'investisse un jour peut être lol. Pourquoi pas le 2010 mes la barre de menu et totalement délirante je comprend plus rien lol.

  16. #16
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut Exemple MEFC
    Re,
    Bien que je ne sois pas sur 2007 je suis sur 2003, je ne pense pas qu'il y ait énormément de différences avec 2000, donc au lieu d'un long discours un petit fichier exemple pour les Mise En Forme Conditionnelle (juste pour info si tu es content de la macro )

    A+

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/10/2014, 11h52
  2. Webi Rich Client - Filtrer par ID et non par ligne
    Par keskonkai dans le forum Webi
    Réponses: 0
    Dernier message: 20/09/2013, 12h17
  3. Réponses: 4
    Dernier message: 22/04/2013, 16h43
  4. Réponses: 1
    Dernier message: 07/05/2011, 04h34
  5. tri d'un répertoire par type et non par ordre alphabétique
    Par panach91 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 12/02/2008, 10h02

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