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 :

Comment programmer des boucles efficaces en VBA ?


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
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut Comment programmer des boucles efficaces en VBA ?
    Bonjour,

    Novice en VBA je m’excuse pour les termes approximatifs que je vais employer. J’ai autant de difficulté à coder qu’a explicitée ce que je code LOL, soyez indulgent.

    Afin d'introduire la problématique voici la description de ma page Excel (que je laisserais en pièce jointe)
    Il s’agit d’un calendrier mensuel, rien de bien compliqué il est très basic. Sur le côté j’ai noté des dates de réservation. Afin de rendre le calendrier le plus lisible possible, j’aimerais mettre une couleur de fond pour les jours où il y a une réservation.

    Comme il y a deux recherches en parallèle j’ai essayé d’imbriquer une boucle FOR-EACH dans une boucle DO-WHILE. J’ai essayé de retourner le code dans tous les sens mais c’est un véritable sac de nœuds. VBA et sa gymnastique intellectuelle est encore un peu trop confuse pour moi. Enfin bref, voici ce que j’ai faits
    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
     
    Sub Calendrier()
     
    Dim cellule As Range
    Dim i As Long
     
    i = 4
    Worksheets("Réservation").Range("j4:J10").Select
     
     
    While Sheets("Réservation").Range("J" & i).Value <> ""
     
        For Each cellule In Selection
            If cellule.Value = Sheets("Réservation").Range("A" & i).Value Then
                Sheets("Réservation").Range("A" & i).Value .Interior.ColorIndex = 6
            End If
        Next cellule
     
    i = i + 1
    Wend
     
    End Sub
    Certains ont dû bondir de leurs chaises en voyant les erreurs grotesques que j’ai surement faite.
    Je mesure l’ampleur de ma demande et de la difficulté, alors merci par avance à ceux qui voudront me porter secours !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Pourquoi passer par du VBA, alors qu'une simple MFC suffit?
    Pièce jointe 443065

    Sinon en vba
    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
    sub Calendrier()
        Dim cellule As Range
        Dim i As Long
        Application.ScreenUpdating = False
     
        i = 4
        Worksheets("Réservation").Range("j4:J10").Select
        For i = 4 To 10
            For Each cellule In [A4:G9]
                    If cellule.Value = Cells(i, "J") Then
                        cellule.Interior.ColorIndex = 6
                    End If
            Next cellule
         Next i
    End Sub
    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut
    Bonjours Arturo

    Tout d’abord un grand merci pour avoir fait en quelques heures ce que je n’arrivais pas à faire depuis des jours.

    Je comprends votre interrogation.
    Le document ci-dessus a été synthétisé au maximum afin d’illustrer au mieux ma problématique.
    Mais sur mon xlsm initial j’ai un calendrier « dynamique » et j’aurais besoin de faire appel à la procédure à chaque changement de mois. Sauf erreur de ma part je ne crois que je puisse le faire avec une mise en forme conditionnelle.

    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    La partie en VBA n'utilise pas les MFC

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    je ne crois que je puisse le faire avec une mise en forme conditionnelle.
    Je ne vois aucune raison pour ne pas pouvoir le faire avec une mise en forme conditionnelle, c'est justement fait pour cela.
    Il faut juste construire une formule logique (renvoyant VRAI ou FAUX) qui corresponde à ta demande.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut
    Autant pour moi, merci d'avoir rectifié ma bêtise ^^


    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
    sub Calendrier()
        Dim cellule As Range
        Dim i As Long
        Application.ScreenUpdating = False
     
        i = 4
        Worksheets("Réservation").Range("j4:J10").Select
        For i = 4 To 10
            For Each cellule In [A4:G9]
                    If cellule.Value = Cells(i, "J") Then
                        cellule.Interior.ColorIndex = 6
                    End If
            Next cellule
         Next i
    End Sub
    J'en profite pour en revenir à ce code. Il marche très bien mais j'ai un petit soucis avec le compteur "i". Pour le moment j'ai fait le bourrin en mon mettant for i = 4 to 999 (afin d'avoir de la marge avec les nombreuses dates que je vais ajoutés). On va dire que ça marche, mais je risque d'avoir des soucis :/

    Comment faire pour déclarer la dernière ligne d'un tableau, pour ne pas avoir à modifier le compteur ?


    Merci encore pour votre aide

Discussions similaires

  1. [AC-2007] Comment imbriquer des requêtes SQL en VBA
    Par rch05 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/03/2011, 21h18
  2. Réponses: 5
    Dernier message: 28/02/2011, 16h57
  3. [AC-2002] Comment remplir des champs Access par VBA
    Par SunRay dans le forum Access
    Réponses: 3
    Dernier message: 19/08/2009, 12h32
  4. Réponses: 1
    Dernier message: 04/06/2009, 14h30
  5. [MS SQL Server] comment faire des boucles en SQL ?
    Par Yorel dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/11/2006, 09h41

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