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 de mise en page [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut Macro de mise en page
    Bonjour,
    Je refais appelle à vos services. Ma macro en vba avance très bien et je suis enfin proche de la fin. Cependant je bloque sur 3 problèmes. Pour vous, ça doit être des broutilles (3 lignes à taper en 2 minutes) mais pour moi, 3 jours de boulot à tester toutes les formules inimaginables.
    Voici un exemple de fichier applicable à mes problèmes :

    Colonne 1 Colonne 2 Colonne 3 Colonne 4 Colonne 5
    Ligne 2 AS xxxx xxxx xxxx xxxx
    Ligne 3 AS xxxx xxxx xxxx xxxx
    Ligne 4 AS xxxx xxxx xxxx xxxx
    Ligne 5 AN xxxx xxxx xxxx xxxx
    Ligne 6 AN xxxx xxxx xxxx xxxx
    Ligne 7 AO xxxx xxxx xxxx xxxx
    Ligne 8 BX xxxx xxxx xxxx xxxx
    Ligne 9 BX xxxx xxxx xxxx xxxx
    Ligne 10 BX xxxx xxxx xxxx xxxx
    Ligne 11 BX xxxx xxxx xxxx xxxx
    Ligne 12 BX xxxx xxxx xxxx xxxx
    Ligne 13 BX xxxx xxxx xxxx xxxx

    1er problème :
    Dans la colonne 1, je dois avoir les données suivantes : AS, AN, AO, AP, BX, CD. Comme vous pouvez le voir, il manque les données « AP » et « CD ». Je souhaite qu’Excel vérifie la colonne 1 (évolutive en nombre de lignes) pour savoir si toutes les valeurs sont présentes. Ensuite, si il manque une valeur (ici « AP » et « CD ») il ajoute une ligne (n’ importe où car après je les classe), et écrit dans cette ligne en colonne 1 la donnée manquante (« AP » et « CD »). Au final, il doit ajouter :

    Colonne 1 Colonne 2 Colonne 3 Colonne 4 Colonne 5
    Ligne xx AP
    Ligne xx CD

    2ème problème :
    Sur ce même fichier, je vais le classer par ordre alphabétique par exemple. Une fois classer, je souhaite qu’Excel ajoute une ligne vierge entre chaque série de données identiques : Une ligne entre « AS » et « AN » (entre ligne 4 & 5), une ligne entre « AN » et « AO » (entre ligne 6 & 7), une ligne entre « AO » et « BX » (entre ligne 7 & 8)….
    3ème problème :
    Une fois ces données classées et séparées, je souhaite qu’Excel ne garde uniquement la première valeur d’une série. Par exemple, pour les données « AO », il garde la cellule (2,1) et supprime la valeur de la cellule (3,1) et (4,1)., idem pour les autres valeurs.

    Toutes ces données sont évolutives, je ne peux dons pas les lier à un numéro de ligne ou de cellule. Si ces 3 problèmes peuvent être régler en un code, il y a aucun problème, j’adapterai le reste de ma macro.
    Je vous remercie d’avance pour votre aide et idées.
    Yann

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Bonsoir,
    Auriez-vous une réponse ou une piste pour effectuer la macro?
    Merci beaucoup
    Yann

  3. #3
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Désolé j'ai pas le temps de faire plus que te donner des pistes...

    Problème 1, fais une recherche sur la méthode ".find"; le principe est de faire une recherche, donc si tu trouves pas tu ajoutes une ligne.

    Problème 2, (et problème 3) utilise une boucle qui passe sur toutes les lignes.
    J'ai mis les explications en commentaire dans le 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
    Sub MiseEnPage()
    '
    Dim DerLig As Long, r As Long
    Dim MaPlage As Range, MaRech As Range
     
    DerLig = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
    Set MaPlage = Sheets("sheet1").Range(Cells(2, 1), Cells(DerLig, 1))
    'AS, AN, AO, AP, BX, CD
    With MaPlage
        Set MaRech = .Find("AS", LookIn:=xlValues)
            If MaRech Is Nothing Then
                DerLig = DerLig + 1
                Cells(DerLig, 1) = "AS"
            End If
    End With
     
    With MaPlage
        Set MaRech = .Find("AP", LookIn:=xlValues)
            If MaRech Is Nothing Then
                DerLig = DerLig + 1
                Cells(DerLig, 1) = "AP"
            End If
    End With
     
    With MaPlage
        Set MaRech = .Find("CD", LookIn:=xlValues)
            If MaRech Is Nothing Then
                DerLig = DerLig + 1
                Cells(DerLig, 1) = "CD"
            End If
    End With
     
    DerLig = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'recalcule la dernière
    For r = 3 To DerLig + 6 '+6 pour avoir une marge pour les lignes insérées à adapter selon le nombre d'ID
        If Cells(r, 1) <> "" Then 'Evite les lignes vides crées
            If Cells(r, 1) = Cells(r - 1, 1) Then 'vérifie si = à la ligne précédente
                Cells(r, 2).Clear 'efface la valeur car égale à ligne précédente (problème3)
            Else
                Rows(r).Insert Shift:=xlDown 'Insert une ligne après la ligne en question (problème2)
                r = r + 1 'incrémente pour passer la ligne insérée
            End If
        End If
    Next r
    End Sub
    Bonne continuation.

    Edit: Finalement j'ai eu quelques minutes à tuer, j'ai donc adapté le code avec le .find, pour l'exemple je n'ai pris que 3 éléments, on peut aussi faire une boucle au lieu de le répéter pour chaque élément, soit avec un tablo soit grace à une liste sur une feuille, à toi de voir...

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Bonjour,
    Merci beaucoup beaucoup de votre aide, je vais travailler avec vos infos.

    Slts,
    Yann

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 13
    Par défaut
    Merci beaucoup, ca marche parfaitement
    Yann

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

Discussions similaires

  1. Macro pour mise en page formulaire
    Par chahnou dans le forum VBA Access
    Réponses: 9
    Dernier message: 13/12/2013, 20h18
  2. [XL-2010] Enregistreur de macro et mise en page de feuilles.
    Par ptipimouss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/01/2013, 08h39
  3. [XL-2010] Macro pour mise en page
    Par Nessie37 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 25/09/2012, 11h14
  4. macro pour mise en page d'un tableau
    Par teen6517 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/09/2010, 14h52

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