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 boucle : cellule prenant la valeur d'une liste de valeur avec save à chaque itération


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2018
    Messages : 11
    Par défaut Création boucle : cellule prenant la valeur d'une liste de valeur avec save à chaque itération
    Bonjour à toutes et à tous,

    J'ai plusieurs données dans un tableur. J'ai simplifié au maximum, mais en vrai je peux avoir jusqu'à 1000 lignes et plus de 30 colonnes.

    Dans cet exemple, j'ai NOM, PRENOM, ADRESSE, CODE POSTAL, VILLE, ADRESSE COMPLETE.

    Dans un deuxième onglet, je tape le nom de la personne et les infos apparaissent via la formule RECHERCHEV. Ces informations alimentent deux formulaires. Il y a un formulaire par onglet.

    J'aimerais créer une boucle du genre :

    Pour Sélection propriétaireD9 allant de la valeur TableurgénéralA2 jusqu'à la valeur TableurgénéralA(dernière ligne non vide), appliquer les macros qui me permettent d'enregistrer mes formulaires.

    Mes macros sont :

    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
    Sub subdds()
     
    Sheets(Array("demande de subvention")).Select
     
        ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=Left(Sheets("Sélection propriétaire").Range("J9"), InStr(1, ThisWorkbook.Name, ".")), _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=True
     
    End Sub
    Sub subec()
     
    Sheets(Array("engagements complémentaires")).Select
     
        ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=Left(Sheets("Sélection propriétaire").Range("K9"), InStr(1, ThisWorkbook.Name, ".")), _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=True
     
    End Sub
    Comme je peux avoir jusqu'à parfois 500 personnes éligibles, ça me fait faire la manipulation 500 fois. L'idée ici est que, en lançant la macro, ça m'enregistre les deux formulaires complétées avec les infos de chaque ligne. Mais je ne sais pas comment créer la boucle et intégrer les macros ci-dessus.

    Voici mon fichier Excel (comme il est trop volumineux, j'ai supprimé des pages du formulaires qui sont des images et qui prennent du poids, mais l'idée reste la même).

    Je sais que je pourrais passer par un publipostage sous Word, mais ça rame énormément quand je publipostie (et ça ferait quand même faire beaucoup de manipulations in fine).

    Je remercie grandement celles et ceux qui sauront m'aider (ça me ferait gagner énormément de temps, mais je ne sais pas comment mettre mon idée sous forme de macro ).
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut
    Bonjour,
    C'est grande différence entre enregistrer une macro et l'écrire... c'est à ce moment qu'on peut faire appel à professionnel
    Rapidement ça peut donner ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Generer()
        Application.DisplayAlerts = False   ' on dit à excel de se taire (sinon il envoi des alertes liées à l'enregistrement
        Set f = Sheets("Tableur général")
        Set src = f.Range("A2")
        While src <> ""     ' on boucle sur la zone à lire et on s'arrète quand il n'y a plus de cellules..
            Sheets("Sélection propriétaire").Range("D9").Value = src.Value  ' on rempli la cellule de référence
            ActiveWorkbook.SaveAs src.Value    ' on sauvegarde le classeur
            Set src = src.Offset(1, 0) ' on passe à la ligne suivante
        Wend
        Application.DisplayAlerts = True
    End Sub
    C'est tout !

    J'ai visé un enregistrement du classeur sous le nom du propriétaire mais le mieux serait une impression directe du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("demande de subvention").printOut
    en lieu et place de l'enregistrement...

  3. #3
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2018
    Messages : 11
    Par défaut
    Merci beaucoup oxedet !

    Ça marche niquel. Sais-tu pourquoi ça n'enregistre pas le nom complet ?

    Ca m'enregistre sous le nom "MICHU1 dem" plutôt que "MICHU1 demande de subvention".

    Comment puis-je rectifier cela ? J'imagine qu'il faut rajouter quelque chose à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filename:=Left(Sheets("Sélection propriétaire").Range("J9"), InStr(1, ThisWorkbook.Name, ".")), _

  4. #4
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2018
    Messages : 11
    Par défaut
    Et comment puis-je faire en sorte que ça enregistre uniquement les lignes filtrées (car je vais enregistrer les formulaires que dans le cas où les personnes sont "Modeste" ou "Très modeste".

    Merci beaucoup pour ton aide !

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut
    Bonjour,
    Pour la longueur, ça ne doit pas venir du code : il enregistre bien sous le nom indiqué dans la cellule nom... il doit y avoir un blocage ailleurs.

    Pour le filtrage, essaye cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Generer()
        Application.DisplayAlerts = False   ' on dit à excel de se taire (sinon il envoi des alertes liées à l'enregistrement
        Set f = Sheets("Tableur général")
        Set src = f.Range("A2")
        While src <> ""     ' on boucle sur la zone à lire et on s'arrète quand il n'y a plus de cellules..
            If Not src.EntireRow.Hidden Then ' on regarde si la ligne est visible...
                Sheets("Sélection propriétaire").Range("D9").Value = src.Value  ' on rempli la cellule de référence
                ActiveWorkbook.SaveAs src.Value    ' on sauvegarde le classeur
            End If
            Set src = src.Offset(1, 0) ' on passe à la ligne suivante
        Wend
        Application.DisplayAlerts = True
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2018
    Messages : 11
    Par défaut
    Merci beaucoup oxedet, ça marche niquel !

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

Discussions similaires

  1. [XL-2010] Récupérer une liste de valeurs dans une seule cellule
    Par redflowers90 dans le forum Excel
    Réponses: 2
    Dernier message: 20/10/2017, 12h02
  2. [XL-2010] Et la boucle est difficile à écrire! (executer un code selon les valeurs d'une liste)
    Par Mikayel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2014, 13h31
  3. insérer une liste de valeurs dans une colonne
    Par ecdxml dans le forum SQL
    Réponses: 7
    Dernier message: 16/10/2009, 15h57
  4. liste de valeurs dans une liste deroulante
    Par averooès dans le forum IHM
    Réponses: 14
    Dernier message: 07/10/2008, 13h28
  5. [Debutant]Remplacer une liste de valeur par une liste de val
    Par Sebbo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/03/2006, 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