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 :

Déplacement dans les cellules [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Par défaut Déplacement dans les cellules
    Bonjour,

    J'aimerai simplifier le code ci-dessous
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    i = 56
    t = 40
    Range("N40").Select
    For a = 1 To 10
        i = i + 1
        t = t + 1
     
        If Range("B" & i).Font.Color = RGB(255, 0, 0) Then
            Range("N" & t).Interior.ColorIndex = 37
        End If
        If Range("C" & i).Font.Color = RGB(255, 0, 0) Then
            Range("O" & t).Interior.ColorIndex = 37
        End If
        If Range("D" & i).Font.Color = RGB(255, 0, 0) Then
            Range("P" & t).Interior.ColorIndex = 37
        End If
        If Range("E" & i).Font.Color = RGB(255, 0, 0) Then
            Range("Q" & t).Interior.ColorIndex = 37
        End If
        If Range("F" & i).Font.Color = RGB(255, 0, 0) Then
            Range("R" & t).Interior.ColorIndex = 37
        End If
        If Range("G" & i).Font.Color = RGB(255, 0, 0) Then
            Range("S" & t).Interior.ColorIndex = 37
        End If
        If Range("H" & i).Font.Color = RGB(255, 0, 0) Then
            Range("T" & t).Interior.ColorIndex = 37
        End If
        If Range("I" & i).Font.Color = RGB(255, 0, 0) Then
            Range("U" & t).Interior.ColorIndex = 37
        End If
        If Range("J" & i).Font.Color = RGB(255, 0, 0) Then
            Range("V" & t).Interior.ColorIndex = 37
        End If
        If Range("K" & i).Font.Color = RGB(255, 0, 0) Then
            Range("W" & t).Interior.ColorIndex = 37
        End If
     
        If Range("L" & i).Font.Color = RGB(255, 0, 0) Then
            Range("X" & t).Interior.ColorIndex = 37
        End If
        If Range("M" & i).Font.Color = RGB(255, 0, 0) Then
            Range("Y" & t).Interior.ColorIndex = 37
        End If
        If Range("N" & i).Font.Color = RGB(255, 0, 0) Then
            Range("Z" & t).Interior.ColorIndex = 37
        End If
        If Range("O" & i).Font.Color = RGB(255, 0, 0) Then
            Range("AA" & t).Interior.ColorIndex = 37
        End If
        If Range("P" & i).Font.Color = RGB(255, 0, 0) Then
            Range("AB" & t).Interior.ColorIndex = 37
        End If
        If Range("Q" & i).Font.Color = RGB(255, 0, 0) Then
            Range("AC" & t).Interior.ColorIndex = 37
        End If
        If Range("R" & i).Font.Color = RGB(255, 0, 0) Then
            Range("AD" & t).Interior.ColorIndex = 37
        End If
        If Range("S" & i).Font.Color = RGB(255, 0, 0) Then
            Range("AE" & t).Interior.ColorIndex = 37
        End If
        If Range("T" & i).Font.Color = RGB(255, 0, 0) Then
            Range("AF" & t).Interior.ColorIndex = 37
        End If
     
    Next
    J'ai essayé d'effectuer avec une deuxième boucle en me déplacent d'une colonne, et cela ne fonctionne pas.

    Pourriez-vous m'aider à améliorrer cette codification.

    Par avance merci de votre aide.

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    essaies ce code et améliores le à tes besoins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim I As Long, T As Long
    For T = 41 To 50
        For I = 2 To 21
            If Cells(T + 16, I).Font.Color = 255 Then
                Cells(T, I + 12).Interior.ColorIndex = 37
            End If
        Next I
    Next T
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En une seule boucle (pour moins de lignes mais traitement identique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim c As Range
    Application.ScreenUpdating = False
    For Each c In Sheets("Feuil1").Range("B57:T66") 'adapter le nom de la feuille
        c.Offset(-16, 12).Interior.ColorIndex = 37 * Abs(c.Font.Color = 255)
    Next c

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour mercatog, re le forum, rch05

    Je suis obligé de passer ce post pour te dire, mercatog, que tu m'étonneras toujours, aie aie!, j'ai encore du chemin à faire

    Bonne journée

    PS : par contre, si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    je crois qu'il faut spécifier aux non habitués qu'à la fin du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = true
    j'ai déjà eu des surprises avec cet oubli
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Essai sur Range
    Bonjour et ravi de te retrouver mercatog,
    Bonjour casefayere,

    Le code est actif bien entendu.

    Au demeurant, j'ai voulu essayer d'appliquer la méthode sur le bloc complet, plutôt que sur les cellules qui le composent.

    [
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CODE]Public Sub essai()
    Application.ScreenUpdating = False
    With Sheets("Feuil1").Range("B57:T66")
        .Offset(-16, 12).Interior.ColorIndex = 37 * Abs(.Font.Color = 255)
    End With
    End Sub
    [/CODE]

    Sans résultat. Sinon tu y aurais pensé mercatog, j'en suis sûr.
    Mais pourquoi.

  6. #6
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Par défaut
    Bonjour à tous les 2,

    Vous êtes très fort.
    J'ai appliqué le code de casefayere et puis celui de mercatog, et cela fonctionne très bien.
    Si j'ai bien compris (étant un jeune débutant), il faudrait que mette Application.ScreenUpdating à true à la fin du code.
    En regadant l'aide (F1) il le précise.

    Chapeau bas messieurs

    J'en apprends avec vous sur ce site

    Encore une fois merci de vos explications et de votre aide TRES PRECIEUSE

    Christian

  7. #7
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Par défaut
    Re bonjour messieurs,

    Je me suis trop emballé.
    En effectuant le test, j'ai remarqué qu'il m'écrasé les cellules non concernées.

    Je m'explique:
    Si la celulle A1 à le texte en rouge, je mets la cellule AA1 une couleur de font.
    Mais là, il écrase la cellule à blanc si le le texte n'est pas en rouge.
    Avez-vous une solution?

    Christian

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Un If suffirait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim c As Range
    Application.ScreenUpdating = False
    For Each c In Sheets("Feuil1").Range("B57:T66") 'adapter le nom de la feuille
        If c.Font.Color = 255 then c.Offset(-16, 12).Interior.ColorIndex = 37
    Next c

  9. #9
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Par défaut
    Merci mercatog,

    J'aurai du y penser, mais c'est la fonction Abs qui me gênait.

    Un grand merci de ton aide

    Cordialement
    Christian

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each c In Sheets("Feuil1").Range("B57:T66") 'adapter le nom de la feuille
        c.Offset(-16, 12).Interior.ColorIndex = 37 * Abs(c.Font.Color = 255)
    Next c
    est l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each c In Sheets("Feuil1").Range("B57:T66") 'adapter le nom de la feuille
        c.Offset(-16, 12).Interior.ColorIndex = - 37 * (c.Font.Color = 255)
    Next c
    En effet, la proposition logique (c.Font.Color = 255) = -1 si c'est vrai et 0 si c'est faux
    qui est l'équivalent classique de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each c In Sheets("Feuil1").Range("B57:T66")   'adapter le nom de la feuille
       If c.Font.Color = 255 Then
          c.Offset(-16, 12).Interior.ColorIndex = 37
       Else
          c.Offset(-16, 12).Interior.ColorIndex = 0
       End If
    Next c
    Pour ne pas toucher à tes couleurs initiales, il suffit de supprimer ce que fait Else

  11. #11
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Par défaut
    Bonsoir mercatog,

    Un grand merci de tes explications.
    J'ai pris l'option du IF sans Else, car la couleur initiale ne doit pas être touchée.
    Mais la fonction ABS, me servira surement.
    Maintenant cela fonctionne très bien.

    Bonne soirée,
    Et surement à bientôt.....

    Cordialement
    Christian

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

Discussions similaires

  1. [XL-2003] Carré de déplacement dans les cellules.
    Par Dyablo dans le forum Excel
    Réponses: 4
    Dernier message: 04/03/2010, 21h07
  2. Jtable et multi-lignes dans les cellules
    Par tuxor dans le forum Composants
    Réponses: 2
    Dernier message: 19/11/2005, 07h32
  3. Changement de couleur dans les cellules d'un tableau
    Par allowen dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/11/2005, 14h52
  4. [JTable] centrer les donnees dans les cellules
    Par cmoa59 dans le forum Composants
    Réponses: 5
    Dernier message: 20/05/2005, 11h35
  5. Alignement dans les cellules d'un tableau
    Par philippef dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/02/2005, 12h15

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