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 :

Création d'une boucle pour répéter code vba [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2015
    Messages : 35
    Par défaut Création d'une boucle pour répéter code vba
    Bonjour,
    J'ai un code vba qui me créé un rdv outlook à partir d'un tableau excel.
    Cela fonctionne bien mais je dois cliquer sur chaque ligne une par une pour créer le rdv.
    J'aimerais qu'il me crée de façon automatique le rdv pour les lignes en dessous si la ligne est complétée.
    Comptant sur votre aide

    Voici mon 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
    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
    Function deux(tps)
    deux = Right("00" & tps, 2)
    End Function
     
    Sub rdv()
     
    On Error GoTo Erreur
     
    Dim fichier As String
     
        Ligne = ActiveCell.Row
        Range("E" & Ligne).Select
        NP = ActiveCell.Value & "_" & ActiveCell.Offset(0, 1).Value
        fichier = ThisWorkbook.Path & "\" & NP & ".ics"
        DT = Split(ActiveCell.Offset(0, 3).Value, "/")
        debut = ActiveCell.Offset(0, 5).Value
        fin = ActiveCell.Offset(0, 6).Value
        DTSTART = DT(2) & DT(1) & DT(0) & "T" & deux(Hour(debut)) & deux(Minute(debut)) & "00"
        DTEND = DT(2) & DT(1) & DT(0) & "T" & deux(Hour(fin)) & deux(Minute(fin)) & "00"
     
        Set f = CreateObject("adodb.stream")
     
        With f
            .Charset = "utf-8"
            .Open
            .WriteText "BEGIN:VCALENDAR" & vbCrLf
            .WriteText "VERSION 2.0" & vbCrLf
            .WriteText "PRODID:-//EXCEL//FR" & vbCrLf
            .WriteText "BEGIN:VEVENT" & vbCrLf
            .WriteText "DTSTART:" & DTSTART & vbCrLf
            .WriteText "DTEND:" & DTEND & vbCrLf
            .WriteText "SUMMARY:" & Niv & vbCrLf
            .WriteText "DESCRIPTION:" & ActiveCell.Offset(0, 7).Value & vbCrLf
            .WriteText "LOCATION:" & ActiveCell.Offset(0, 8).Value & vbCrLf
            .WriteText "END:VEVENT" & vbCrLf
            .WriteText "END:VCALENDAR"
            .SaveToFile fichier, 2
            .Close
     
        End With
        Exit Sub
     
    Erreur:
        MsgBox "Il y a un problème avec cette ligne"
     
    End Sub

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Tu peux faire ça comme ça (non testé)

    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
    Option Explicit
     
    Function deux(tps)
    deux = Right("00" & tps, 2)
    End Function
     
    Sub rdv()
     
    'Attention avec ça surtout en phase de développement, si le code plante tu ne le veras pas forcement
    On Error GoTo Erreur
     
    Dim fichier As String
    Dim Ligne As Integer
     
        Ligne = ActiveCell.Row
        While Range("E" & Ligne).Value <> ""
            'On pointe juste la cellule, sans la selectionner physiquement
            With Range("E" & Ligne)
                NP = .Value & "_" & .Offset(0, 1).Value
                fichier = ThisWorkbook.Path & "\" & NP & ".ics"
                DT = Split(.Offset(0, 3).Value, "/")
                debut = .Offset(0, 5).Value
                fin = .Offset(0, 6).Value
                DTSTART = DT(2) & DT(1) & DT(0) & "T" & deux(Hour(debut)) & deux(Minute(debut)) & "00"
                DTEND = DT(2) & DT(1) & DT(0) & "T" & deux(Hour(fin)) & deux(Minute(fin)) & "00"
     
                'Pense à déclarer les variables ("Option explicit" ajouté en début de module te force à le faire)
                Set f = CreateObject("adodb.stream")
     
                f.Charset = "utf-8"
                f.Open
                f.WriteText "BEGIN:VCALENDAR" & vbCrLf
                f.WriteText "VERSION 2.0" & vbCrLf
                f.WriteText "PRODID:-//EXCEL//FR" & vbCrLf
                f.WriteText "BEGIN:VEVENT" & vbCrLf
                f.WriteText "DTSTART:" & DTSTART & vbCrLf
                f.WriteText "DTEND:" & DTEND & vbCrLf
                f.WriteText "SUMMARY:" & Niv & vbCrLf
                f.WriteText "DESCRIPTION:" & .Offset(0, 7).Value & vbCrLf
                f.WriteText "LOCATION:" & .Offset(0, 8).Value & vbCrLf
                f.WriteText "END:VEVENT" & vbCrLf
                f.WriteText "END:VCALENDAR"
                f.SaveToFile fichier, 2
                f.Close
            End With
            'On passe à la ligne suivante
            Ligne = Ligne + 1
        Wend
        Exit Sub
     
    Erreur:
        MsgBox "Il y a un problème avec cette ligne"
     
    End Sub
    Je te conseille fortement d'utiliser un Tableau Structuré pour stocker des données. Il sera bien plus facile dans le code de boucler sur le contenu du tableau.
    A minima précise la feuille sur laquelle tu travailles (FEuil1.Range...)

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2015
    Messages : 35
    Par défaut Message erreur
    Bonjour,
    Merci de ton retour,
    Je crois que mon niveau en vba n'est pas suffisant.
    Après un 1er essai j'ai le message d'erreur suivant : "Erreur de compilation : tableau attendu "

    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
    Option Explicit
     
    Function deux(tps)
    deux = Right("00" & tps, 2)
    End Function
     
    Sub rdv()
     
    'Attention avec ça surtout en phase de développement, si le code plante tu ne le veras pas forcement
    On Error GoTo Erreur
     
    Dim fichier As String
    Dim Ligne As Integer
    Dim NP As String
    Dim DT As Date
    Dim debut As Date
    Dim fin As Date
    Dim DTSTART As Date
    Dim DTEND As Date
     
        Ligne = ActiveCell.Row
     
            While ActiveSheet.Range("E" & Ligne).Value <> ""
            'On pointe juste la cellule, sans la selectionner physiquement
            With ActiveSheet.Range("E" & Ligne)
                NP = .Value & "_" & .Offset(0, 1).Value
                fichier = ThisWorkbook.Path & "\" & NP & ".ics"
                DT = Split(.Offset(0, 3).Value, "/")
                debut = .Offset(0, 5).Value
                fin = .Offset(0, 6).Value
                DTSTART = DT(2) & DT(1) & DT(0) & "T" & deux(Hour(debut)) & deux(Minute(debut)) & "00"
                DTEND = DT(2) & DT(1) & DT(0) & "T" & deux(Hour(fin)) & deux(Minute(fin)) & "00"
     
                'Pense à déclarer les variables ("Option explicit" ajouté en début de module te force à le faire)
                Set f = CreateObject("adodb.stream")
     
                f.Charset = "utf-8"
                f.Open
                f.WriteText "BEGIN:VCALENDAR" & vbCrLf
                f.WriteText "VERSION 2.0" & vbCrLf
                f.WriteText "PRODID:-//EXCEL//FR" & vbCrLf
                f.WriteText "BEGIN:VEVENT" & vbCrLf
                f.WriteText "DTSTART:" & DTSTART & vbCrLf
                f.WriteText "DTEND:" & DTEND & vbCrLf
                f.WriteText "SUMMARY:" & Niv & vbCrLf
                f.WriteText "DESCRIPTION:" & .Offset(0, 7).Value & vbCrLf
                f.WriteText "LOCATION:" & .Offset(0, 8).Value & vbCrLf
                f.WriteText "END:VEVENT" & vbCrLf
                f.WriteText "END:VCALENDAR"
                f.SaveToFile fichier, 2
                f.Close
            End With
            'On passe à la ligne suivante
            Ligne = Ligne + 1
        Wend
        Exit Sub
     
    Erreur:
        MsgBox "Il y a un problème avec cette ligne"
     
    End Sub

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Sur quelle ligne?

    Peux-tu mettre un fichier anonymisé (sans donnée perso ou confidentiel) ?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2015
    Messages : 35
    Par défaut
    Ci joint le fichier en question
    Voir Module 3.
    (le module 2 est le code ok sans boucle)
    Fichiers attachés Fichiers attachés

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour …

    Avec DT = Split(.Offset(0, 3).Value, "/"), DT est une matrice (à 1 colonne) donc, pour sa déclaration obligatoire (Option Explicit oblige), écrire Dim DT as Variant.

    Penser à F1 pour découvrir Variant

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

Discussions similaires

  1. Création d'une boucle pour générer des div
    Par Invité dans le forum Général JavaScript
    Réponses: 33
    Dernier message: 15/12/2017, 17h02
  2. Réponses: 2
    Dernier message: 07/10/2017, 13h39
  3. Réponses: 1
    Dernier message: 20/02/2015, 10h35
  4. [XL-2007] création d'une boucle pour une série
    Par amauri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/07/2012, 16h41
  5. [Débutant] Création d'une boucle pour récupérer des informations
    Par youcef60 dans le forum MATLAB
    Réponses: 15
    Dernier message: 02/03/2010, 22h31

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