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 :

Automatiser un code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut Automatiser un code VBA
    Bonjour,

    Novice sous VBA. J'ai créer un code sur quelques lignes pour imprimer rapidement plusieurs centaines de courriers sous Excel.

    Voici le code de ma macro :

    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
    69
    70
    71
    72
    73
    74
    75
    Sub pp()
    '
    ' pp Macro
    '
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
    
        Range("K11").Select
        ActiveCell.FormulaR1C1 = "=+R[-4]C[5]"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
            
        Range("K11").Select
        ActiveCell.FormulaR1C1 = "=+R[-3]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
            
        ActiveCell.FormulaR1C1 = "=+R[-2]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
            
        ActiveCell.FormulaR1C1 = "=+R[-1]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
            
        ActiveCell.FormulaR1C1 = "=+R[0]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
            
        ActiveCell.FormulaR1C1 = "=+R[1]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[2]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[3]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[4]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[5]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[6]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[7]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        ActiveCell.FormulaR1C1 = "=+R[8]C[5]"
        Range("K11").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        
    End Sub
    Comme vous pouvez le voir c'est toujours le même code qui se répète avec ce qui est en gras qui se décale à chaque fois.
    Je pense qu'il est possible d'automatiser ce code dans un code simple mais je ne te trouve pas ...
    Merci beaucoup pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Bonjour,

    Quand tu mets du code utilise les # pour le plaisir des yeux.

    Essaies

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    For i=-4 to 5
     
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False
     
    Range("K11").Select
    ActiveCell.FormulaR1C1 = "=+R[-i]C[5]"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut
    Merci.

    En revanche cela ne fonctionne pas.
    Il ne comprend pas For i= -4 to 5. Il met met une erreur.
    Lorsque j'enlève "For i=-4 to 5", l'impression se fait bien et à partir de la ligne "ActiveCell.FormulaR1C1 = "=+R[-i]C[5]"", il y a une erreur (logique car le code "For i= -4 to n'est plus indiqué).

    Comment puis-je faire ?

  4. #4
    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 147
    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 147
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les commandes Selection et Select sont à proscrire et il faut concaténer le texte de la formule et la variable I et le + qui précède la référence n'a pas lieu d'être présent. C'est une erreur régulière dû au fait que lorsque l'on tape sur la touche caractère = et que l'on est en minuscule c'est le + qui s'affiche et en validant la formule c'est excel qui ajoute automatiquement le caractère =.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For i = -4 To 5
      Range("K11").FormulaR1C1 = "=R[" & i & "]C[5]"
     Next
    [EDIT]
    Une autre option est d'utiliser le référencement habituel d'excel en utilisant la propriété Formula au lieu de FormulaR1C1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("K11").formula = "=P" & i
    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

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut
    Bonjour Philippe,

    Merci cela a l'air de fonctionner. En revanche, la macro s'arrête à 11 personnes.

    Comment puis-je faire pour que cela s'arrête au bout des cellules remplies (environ 800) ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Tu modifies ton i =-4 (je suppsoe que c'est le premier) to =796 (je suppose que c'est le dernier).

    Tu peux faire un test avec i =4 to 50.

    Tu peux aussi faire un End(xlUp) ou End(xlDown)si le nombre de lignes varie pour avoir toutes les lignes jusqu'à la dernière.

  7. #7
    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 147
    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 147
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En clair, tu souhaites que la boucle commence à P7 jusqu'à la dernière cellule remplie de la colonne P ?
    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

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Par défaut
    Oui c'est exactement cela.

  9. #9
    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 147
    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 147
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Exemple de boucle depuis la cellule P7 de la feuille nommée [Feuil3] du classeur (ThisWorkbook) où est écrite la procédure VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
     Dim r As Long
     With ThisWorkbook.Worksheets("Feuil3")
      For r = 7 To .Range("P7").End(xlDown).Row
      .Range("K11").Value = "=P" & r
      Next r
     End With
    End Sub
    Petite remarque, pourquoi as-tu mis le statut de la discussion sur 'Résolu' alors qu'elle ne l'est pas encore ?
    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

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

Discussions similaires

  1. [XL-2010] Code VBA automatiser le même genre d'action qu'un VLOOKUP combiner + autres actions
    Par vince_uninc dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/06/2013, 21h28
  2. Réponses: 12
    Dernier message: 26/01/2011, 12h26
  3. Réponses: 4
    Dernier message: 13/10/2005, 14h44
  4. Réponses: 3
    Dernier message: 06/09/2005, 10h27
  5. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

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