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 :

VBA & mise en page


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut VBA & mise en page
    Bonjour à tous !
    Je crée actuellement un fichier Excel qui va chercher dans une feuille des informations selon certaines conditions et vien copier/coller ces dernières dans un tableau sur une autre feuille.
    Ayant créer une mise en page (une "feuille" à imprimer) j'aimerai que mon code "saute" certaines lignes (en l'occurence ligne 48, 49, 50).

    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
     
    Sub Recherche()
    Dim i As Long
     
    Range(Worksheets("Feuil1").Range("C7"), Worksheets("Feuil1").Range("C7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("D7"), Worksheets("Feuil1").Range("D7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("E7"), Worksheets("Feuil1").Range("E7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("F7"), Worksheets("Feuil1").Range("F7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("G7"), Worksheets("Feuil1").Range("G7").End(xlDown)) = ""
     
    For i = 3 To Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
     
        If Sheets("Feuil1").Range("O4") <> "" Then
        If Sheets("Feuil2").Range("H" & i) <> "Fait" Then
     
        If Sheets("Feuil2").Range("F" & i) <> "" And Sheets("Feuil2").Range("F" & i) > Sheets("Feuil1").Range("O4") Then
                Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("A" & i).Value
                Sheets("Feuil1").Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("B" & i).Value
                Sheets("Feuil1").Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("C" & i).Value
                Sheets("Feuil1").Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("F" & i).Value
     
        ElseIf Sheets("Feuil2").Range("F" & i) = "" And Sheets("Feuil2").Range("E" & i) <> "" And Sheets("Feuil2").Range("E" & i) > Sheets("Feuil1").Range("O4") Then
                Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("A" & i).Value
                Sheets("Feuil1").Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("B" & i).Value
                Sheets("Feuil1").Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("C" & i).Value
                Sheets("Feuil1").Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("E" & i).Value
    End if
    Next i
    End sub
    Je vous remercie par avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    En ajoutant un if dans ta boucle for.
    If not ( i=... or i=...) then
    le reste de tes instruction
    end if
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Peux-tu être plus précis ? Que veux-tu dire par "sauter des lignes"? Est-ce que tu as fait tourner ton code? Est-ce que ta question concerne une erreur dans ton code?
    Sauter une ligne signifie-t-il tout simplement ne pas écrire sur une ligne?
    Commentaire sur ton code : tu ouvres 3 if, mais tu n'as qu'un seul end if --> il va y avoir un problème. Un If simple a la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If condition Then
        action
    End If
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If condition Then action
    Pourrais-tu indenter ton code pour qu'on comprenne mieux les différents If, stp.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Avant toute chose merci pour votre retour très rapide.

    Halaster08: Dans mon code la variable i définit la ligne qui est testée en Feuil2 et non pas la ligne ou l'on colle en Feuil1. Une condition sur i me ferait "sauter" des lignes uniquement dans les valeurs testées (en Feuil2) or je voudrais tester l'ensemble des valeurs puis copier l'ensemble des valeurs qui satisferait mes conditions mais ne pas les coller dans certaines lignes (en Feuil1).

    Riaolle: J'ai en effet fait tourner mon code, ce dernier fonctionne correctement, cependant j'ai crée une présentation (cadres, titre, commentaires, ...) et mon code colle des valeurs en ligne à partir de la première cellule non vide (en partant d'en bas et en remontant). Afin de conserver ma présentation, j'aimerais que mon code ne colle les valeurs copier que dans une certaine plage de cellule ou qu'il saute, c'est-à-dire qu'il colle sur les lignes précédentes et colle sur les lignes suivantes (donc ne pas écrire sur certaines lignes).
    Concernant les 3 if, en effet je n'ai collé ici qu'une partie de mon code et j'ai zappé 2 End If

    J'espère être claire, et encore merci !

    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
     
    Sub Recherche()
    Dim i As Long
     
    Range(Worksheets("Feuil1").Range("C7"), Worksheets("Feuil1").Range("C7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("D7"), Worksheets("Feuil1").Range("D7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("E7"), Worksheets("Feuil1").Range("E7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("F7"), Worksheets("Feuil1").Range("F7").End(xlDown)) = ""
    Range(Worksheets("Feuil1").Range("G7"), Worksheets("Feuil1").Range("G7").End(xlDown)) = ""
     
    For i = 3 To Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
     
        If Sheets("Feuil1").Range("O4") <> "" And Sheets("Feuil2").Range("H" & i) <> "Fait" Then
     
        If Sheets("Feuil2").Range("F" & i) <> "" And Sheets("Feuil2").Range("F" & i) > Sheets("Feuil1").Range("O4") Then
                Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("A" & i).Value
                Sheets("Feuil1").Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("B" & i).Value
                Sheets("Feuil1").Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("C" & i).Value
                Sheets("Feuil1").Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("F" & i).Value
     
        ElseIf Sheets("Feuil2").Range("F" & i) = "" And Sheets("Feuil2").Range("E" & i) <> "" And Sheets("Feuil2").Range("E" & i) > Sheets("Feuil1").Range("O4") Then
                Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("A" & i).Value
                Sheets("Feuil1").Range("E" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("B" & i).Value
                Sheets("Feuil1").Range("F" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("C" & i).Value
                Sheets("Feuil1").Range("G" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("E" & i).Value
    End if
    End if
     
    Next i
    End sub

  5. #5
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Je comprends pas très bien quelles sont tes conditions pour coller tes valeurs. Mais une chose est sûre : il faut que tu trouves une logique dans tes conditions. Est-ce que les lignes sur lesquelles il ne faut pas coller ont un certain numero de ligne (par exemple toutes les 10 lignes) ou est-ce qu'elles contiennent une certaine valeur (par exemple ligne où il y a écrit "TOTAL" en colonne A) ou ... ?
    Ensuite, une fois que tu as trouvé la logique, tu créés une condition While sur la ligne --> tant qu'on n'a pas le droit de coller sur cette ligne, on va à la ligne suivante.

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Citation Envoyé par A.Bounart Voir le message

    Halaster08: Dans mon code la variable i définit la ligne qui est testée en Feuil2 et non pas la ligne ou l'on colle en Feuil1. Une condition sur i me ferait "sauter" des lignes uniquement dans les valeurs testées (en Feuil2) or je voudrais tester l'ensemble des valeurs puis copier l'ensemble des valeurs qui satisferait mes conditions mais ne pas les coller dans certaines lignes (en Feuil1).
    Au temps pour moi, je n'avais pas vu ce détail.
    Tu peux copier ces lignes sur une feuille temporaire au début de la macro,laisser le copier coller les écraser, puis les remettre a la fin et supprimer la feuille temporaire.

    edit: calculer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne = Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).row
    if ligne >47 ligne = ligne + 3
    et remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Value = Sheets("Feuil2").Range("A" & i).Value
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets("Feuil1").Range("D" & ligne).Value = Sheets("Feuil2").Range("A" & i).Value
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

Discussions similaires

  1. [VBA-E] mise en page
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 27
    Dernier message: 26/09/2007, 15h30
  2. [VBA Excel] Mise en page
    Par raptor1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2007, 14h01
  3. [VBA-E] Mise en page d'une feuille
    Par Myogtha dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2007, 09h23
  4. [VBA-E]Mise en page à l'impression
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/01/2007, 23h23
  5. [VBA-E] Mise en page de tout le classeur avec nb feuill inconnu
    Par tonf dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/04/2006, 15h25

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