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 :

Macro pour mettre en forme/sauter une ligne lorsque cellules d'une colonne différentes [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Points : 9
    Points
    9
    Par défaut Macro pour mettre en forme/sauter une ligne lorsque cellules d'une colonne différentes
    Bonjour à tous,

    Dans le cadre de mon travail j'ai réalisé un fichier excel avec des macros afin d'éditer un bon de préparation.
    Le plus gros du chantier est fait cependant j'aimerais pouvoir séparer les commandes qui différent dans mon tableau de manière à ce que ce soit plus lisible pour ceux qui vont l'utiliser...
    J'ai cherché plusieurs jours sur internet des codes qui pourraient s'appliquer mais je bloque à chaque fois.
    Enfaite les préparations sont en lignes, et je souhaiterai que la macro s'opère selon les cellules de la colonne "Mode" (ce sera plus parlant sur le fichier Excel...)
    De mon point de vue, soit
    1° le code fait insérer une ligne entre deux cellules différentes de la colonne "mode"
    2° je fais en sorte que mon tableau se remplisse une ligne sur deux et la macro supprime la ligne entre les cellules identiques dans la colonne mode
    Qu'en pensez-vous ?

    Merci d'avance pour votre aide

    (mon vrai tableau est plus complet que celui dans le fichier exemple mais la disposition des cellules est la même)
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Voici 2 macros et comme tu vois elles sont très proche donc pas différence pour moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub solut_1()
        Dim Lign As Long
        Dim Plage As String
     
        Lign = 22
        For Lign = 22 To 50
            If Cells(Lign, 5).Value <> Cells(Lign + 1, 5).Value Then
                Lign = Lign + 1
                Plage = Lign & ":" & Lign
                Rows(Plage).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            End If
        Next
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub solut_2()
        Dim Lign As Long
        Dim Plage As String
     
        For Lign = 22 To 50
            If Cells(Lign + 1, 5).Value = "" And Cells(Lign, 5).Value = Cells(Lign + 2, 5).Value Then
                Lign = Lign + 1
                Plage = Lign & ":" & Lign
                Rows(Plage).Delete Shift:=xlUp
                Lign = Lign - 1
            End If
        Next
    End Sub
    La solution la meilleure est forcément la plus simple

    tu dis si cela te convient

    A+

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    L'idéal quand on insère ou supprime des lignes ou colonnes, c'est de boucler à partir de la fin.
    De cette manière, on n'a pas à gérer les changements de lignes ou de colonnes en ajustant la valeur de la variable de boucle.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Merci de vos réponses, j'ai essayé les deux versions et elles sont fonctionnelles (c'est vrai pour ce qui est du plus simple ! Ce sera donc la 1ère solution ) cependant un autre problème apparait.

    En effet lorsque je lance la macro ça me fait bien les séparations de ligne c'est parfait mais est-il possible de supprimer ces mêmes lignes ?
    Enfaite je ne sais pas vraiment comment m'y prendre là :
    mon tableau est rempli de formules et de renvois qui se font à partir d'un onglet voisin du même document. Sur cet autre onglet je fais un coller à partir d'un autre document pour y prendre des infos qui, grace aux formules et autres tours de magie, sont lisibles et mieux présentées sur la page où j'essaie de faire les insertions de lignes.
    Cependant mettons que demain je fasse un autre collé avec un document différent, avec mes lignes insérées de la veille mes formules sont décalées et des lignes s'ajoutent par dessus...
    Je ne sais pas si j'ai été clair n'hésitez pas à me demander de recommencer

    Serait-ce ce dont tu voulais me mettre en garde Parmi ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Regarde le message #2 ici
    Si tu veux supprimer la ligne, change Hidden = True par Delete
    Et modifie le range de vérification au besoin
    Comme tu peux voir, la boucle commence à la fin et remonte...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    J'ai essayé de joindre le code cité, true remplacé avec delete, ce qui nous donne :
    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
    Sub fusionnerMode()
     
    Dim Lign As Long
    Dim Plage As String
    Dim I As Long, nbLignes As Long
    nbLignes = Cells(Rows.Count, "D").End(xlUp).Row
     
        For I = nbLignes To 2 Step -1
            'Utiliser la fonction nbVal pour savoir s'il n'y a aucune valeur
            If Application.WorksheetFunction.CountA(Range("A" & I & ":E" & I)) = 0 Then
                Rows(I).Hidden = Delete
            End If
        Next
     
        Lign = 22
        For Lign = 22 To 50
            If Cells(Lign, 5).Value <> Cells(Lign + 1, 5).Value Then
                Lign = Lign + 1
                Plage = Lign & ":" & Lign
                Rows(Plage).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            End If
        Next
     
    End Sub
    cependant je pense l'avoir mal fait car le résultat est le même à savoir le nouveau flux de données (arrivé via les extractions et formules) se font avec les lignes insérées de la fois précédente du coup ça me rajoute d'autres lignes par dessus

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        For I = nbLignes To 2 Step -1
            'Utiliser la fonction nbVal pour savoir s'il n'y a aucune valeur
            If Application.WorksheetFunction.CountA(Range("A" & I & ":E" & I)) = 0 Then
                Rows(I).Delete
            End If
        Next
    Ceci devrait supprimer toutes les lignes n'ayant aucune valeur dans les cellules A à E

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Je vais passer pour un boulet à tes yeux mais je ne comprends pas... J'ai beau remplacer le Delete correctement le code n'a pas d'effet.
    Est-ce que ça peut être dû au fait que mes lignes se trouvent dans la plage D22:W43 ?
    Enfaite quand les deux codes (celui pour insérer une ligne et celui pour supprimer les lignes en trop) sont ensemble le fait de lancer la macro va me rajouter des lignes entre mes infos, et quand je lance la macro seulement avec ce dernier code pour supprimer les lignes rien en se passe

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Il faudrait peut-être changer la plage de vérification (?)
    J'ai de la difficulté à bien saisir ton problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        For I = nbLignes To 22 Step -1
            'Utiliser la fonction nbVal pour savoir s'il n'y a aucune valeur
            If Application.WorksheetFunction.CountA(Range("D" & I & ":W" & I)) = 0 Then
                Rows(I).Delete
            End If
        Next
    Si tu mets les 2 codes, comme tu dis, ça supprime les lignes vides et rajoute des lignes vides par la suite.
    Donc, tu ne verras pas les lignes vides disparaître si tu roules ta macro.
    Par contre, si tu le fais en pas-à-pas (F8) tu devrais voir plus facilement ce qui se passe...

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Ça marche nickel merci beaucoup !

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

Discussions similaires

  1. [XL-2007] InputBox pour sélectionner cellule ou une plage de cellules dans une feuille.
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2014, 19h01
  2. [Débutant] Ajouter une ligne UITABLE avec formats de colonne différents
    Par hi2238 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 18/11/2013, 13h45
  3. [XL-2003] Vider le contenu de cellules dans une ligne en fonction d'une identité
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2013, 18h08
  4. Réponses: 6
    Dernier message: 24/05/2012, 11h53
  5. [XL-2003] Supprimer une ligne en fonction d'une valeur de cellule
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/09/2009, 17h20

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