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 :

Améliorer le temps de travail [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 50
    Par défaut Améliorer le temps de travail
    Bonjour, je reviens vers vous, hyper satisfait de vos réponses sur ce forum, pour essayer d'améliorer un travail "macrotique" surtout pour son temps de réalisation.
    Voilà mon problème. Autodidacte je connais certaines façons de faire mais je suis certain qu'il existe mieux pour faire ce travail.
    Imaginez travailler dans une grille de 1.000.000 de cellules.
    Dans cette plage de cellules, certaines ont un format spécial (Bordures, couleur motif ...). Existe t il une méthode autre que la recherche de ces cellules par des boucles de ce style ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For col = 1 to 1000
       For lig = 1 to 1000
          'Condition sur le format par exemple
             If ..... Then
                Traitement
             End If
       Next lig
    Next col
    J'ai besoin de retrouver ces cellules pour qu'elles effectuent un travail précis.
    Cette méthode fonctionne bien mais je suis persuadé que le travail peut se faire d'une façon plus rapide.

    Par avance, merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Salut TchiotPols,

    Voici un tout petit bout de code qui te permet de tester si tu as une bordure continue en haut de ta cellule :
    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
    Option Explicit
     
    Sub TestBorder()
    Dim oRng As Range
    Dim i As Integer
     
    With Worksheets("Feuil1")
        Set oRng = .Range("C1")
     
        For i = 0 To .Cells(Rows.Count, oRng.Column).End(xlUp).Row - oRng.Row
            If oRng.Offset(i, 0).Borders(xlEdgeTop).LineStyle = xlContinuous Then
                MsgBox "J'ai un bordure au top"
            End If
        Next i
    End With
     
    End Sub
    Je check ici toutes les cellules de ma colonne C jusqu'à la dernière cellule non vide de la colonne.
    Je te laisse adapter à ton besoin.

    N'hésite pas à revenir vers moi ou le forum si tu rencontres des soucis !

    Kimy

    [EDIT]
    D'autres part, pour répondre plus au titre qu'à ta demande, as-tu introduit la désactivation de l'écran et du calcul automatique à ta/tes macro(s) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Désactivation de la MAJ écran et du calcul auto (accélération macro)
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
     
    '... code
     
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Cela accélère grandement les macros de manière générale surtout si tu as des formules dans tes cellules.

  3. #3
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 50
    Par défaut Bonjour Kimy_Ire
    Tout d'abord merci Kimy_Ire pour cette réponse aussi rapide.
    Je vois une autre méthode de travail et là déjà cela m'intéresse beaucoup.
    Maintenant je comprends bien vos lignes de codes.
    Juste pour voir si je comprends tout parfaitement :
    1 - je suppose que le Range("C1") peut se transformer en plage du style Range("C1:Z200") par exemple pour faire le même travail ?
    2 - dans la ligne : For i .... pourquoi i démarre à 0 ? Je suppose qu'il manque une parenthèse en fin de ligne pour fermer le Cell( ....
    3 - dans la ligne : If oRng.Offset(i, 0).Borders(xlEdgeTop).LineStyle = xlContinuous Then à quoi correspond le 0 dans le (i,0) ?

    Je constate donc qu'il faut néanmoins passer par des boucles For ... Next

  4. #4
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 50
    Par défaut Pour Kimy_Ire
    Je n'avais pas vu le bas de votre réponse.
    Oui j'avais bien désactivé l'affichage de l'écran.
    Merci

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Re TchiotPols,

    Etant donné que tu avais écrit des boucles de lignes, de colonnes et des conditions, je n'ai pas commenté mon code... en te priant de m'en excuser !
    Déjà, première chose de faite :
    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
    Option Explicit
     
    Sub TestBorder()
    'Déclaration des variables
    Dim oRng As Range
    Dim i As Integer
     
    'Avec ma Feuil1
    With Worksheets("Feuil1")
        'Je set "oRng" sur la cellule C1
        Set oRng = .Range("C1")
     
        'Je boucle de i = 0 à la dernière ligne non-vide de la colonne de oRng (donc la colonne C)
        For i = 0 To .Cells(Rows.Count, oRng.Column).End(xlUp).Row - oRng.Row
            'J'effectue le check de oRng décalé de i ligne vers le bas (i => 0 à dernière ligne non-vide)
            'Le check se fait ici sur ".Borders(xlEdgeTop).LineStyle = xlContinuous" à savoir si le style de la bordure du top est en ligne continue
            'Tu remplaces donc ici ce que tu veux => couleur de la cellule, bordure, caractères, police, etc...
            If oRng.Offset(i, 0).Borders(xlEdgeTop).LineStyle = xlContinuous Then
                'Et si la condition est passante, tu fais ce que tu veux : ici j'affiche un beau message ! :D
                MsgBox "J'ai une bordure au top"
            End If
        Next i
    End With
     
    End Sub
    Pour aller plus loin :
    1. J'ai fait personnellement mon exemple sur la colonne C. Tu peux faire cela sur ce que tu veux et donc bien entendu sur une plage plus importante.
      Dans ton cas de figure, tu pourrais passer plutôt par un For Each ... Next.
      Tout petit exemple :
      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
      Option Explicit
       
      Sub TestBorder()
      Dim oRng As Range
      Dim i As Integer
       
      With Worksheets("Feuil1")
      '    Set oRng = .Range("C1")
      '
      '    For i = 0 To .Cells(Rows.Count, oRng.Column).End(xlUp).Row - oRng.Row
      '        If oRng.Offset(i, 0).Borders(xlEdgeTop).LineStyle = xlContinuous Then
      '            MsgBox "J'ai une bordure au top"
      '        End If
      '    Next i
       
          For Each oRng In .Range("C1:Z200")
              If oRng.Borders(xlEdgeTop).LineStyle = xlContinuous Then
                  MsgBox "J'ai une bordure au top"
              End If
          Next oRng
       
      End With
       
      End Sub
    2. Répondu en commentaire de code.
    3. Répondu également en commentaire de code : il s'agit du "décalage" de ma cellule oRng.
      Prendre davantage exemple sur le For Each ... Next pour une plage comme la tienne, il me semble.

    Restant à ta dispo !

    Kimy

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2019
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2019
    Messages : 50
    Par défaut Re Kimy_Ire
    Merci pour toutes ces réponses précises. Je pense avoir tout compris.
    Je vais tester cela demain car c'est un peu plus complexe que ces quelques lignes de code.
    Je ne vais pas clôturer maintenant pour donner une suite à tout ceci dès que j'aurais testé.
    bonne fin de journée

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

Discussions similaires

  1. Habit de travail temps de travail?
    Par arno99 dans le forum Droit du travail
    Réponses: 2
    Dernier message: 29/11/2006, 14h00
  2. CpteDom - amélioration des temps de réponse
    Par Domi2 dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2006, 14h29
  3. [Optimisation] Améliorer les temps de réponse
    Par n@n¤u dans le forum JOnAS
    Réponses: 5
    Dernier message: 24/08/2006, 11h04
  4. Améliorer le temps d'ouverture d'un fichier ?
    Par Sunchaser dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/06/2006, 22h19
  5. [Droit du travail] Temps de travail ?
    Par speedster dans le forum Droit du travail
    Réponses: 1
    Dernier message: 03/05/2006, 07h50

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