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 :

Aide macro excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut Aide macro excel
    Bonjour,

    J'ai un fichier excel contenant les données suivantes sur les casinos en France:


    J'ai donc trois colonnes: Commune, casino, societe

    Je voudrais avoir un fichier excel sous cette forme: Commune, casino, adresse, code_postal, ville, complement_adresse, societe

    Comme vous pouvez le voir le soucis est que certains casinos ont 4 lignes au lieu de trois pour la colonne Casino.

    Je voulais donc savoir si c'était possible de faire une macro pour automatiser ce traitement, et si vous n'auriez pas un tuto ou des noms de commandes à me donner pour que je recherche des détails car pour le moment je ne trouve rien.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    On peut le faire assez facilement, mais il faudrait une règle de traitement spécifique vu que le nombre de lignes peut varier. Peut-être que par exemple, on est sûr que la dernière ligne est toujours Code Postal + Ville et la première Nom du casino. Sinon, ce sera comme de jouer à la roulette (désolé, mais je n'ai pas pu me retenir)

  3. #3
    Membre expérimenté Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Par défaut
    Pour commencer, on peut isoler facilement le code postal.
    Ici, ce champ a 3 propriétés:
    • il est composé uniquement de chiffres
    • il est composé de 5 caractères
    • il se situe en "fin de cellule"
    on peut donc faire un double filtre:
    • on prélève tous les chiffres présents dans une cellule
    • on filtre pour ne garder que les 5 derniers chiffres

    cf code ci-dessous, assez sale, mais facilement intégrable
    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
    Sub trouve_isole_code_postal()
     
    Dim c As Range
    Dim i As Integer, x As String, n As String
    b = 1
     
    Sheets("Feuil1").Select 'Sélection de la feuille contenant les données sources
    Range("A1:A100").Select 'Sélection de la colonne des adresses
     
    'Prélève les chiffres et les copie sur la même colonne mais en feuille 2
    For Each c In Selection
        For i = 1 To Len(c)
            x = Mid(c, i, 1)
            If IsNumeric(x) Then n = n & x
        Next i
        If n <> "" Then
            Sheets("Feuil2").Range("A" & b).Value = n
            n = ""
            b = b + 1
        End If
     
    Next c
     
    'Pointe sur la feuille 2 et prélève les 5 derniers chiffres de la colonne nouvellement créée (un code postal a toujours 5 chiffres
    Sheets("Feuil2").Select
     
    'Ecrit le code postale dans la colonne juste à côté
    For i = 1 To 100
        Cells(i, 2) = Right(Cells(i, 1), 3)
    Next i
     
    End Sub

  4. #4
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Je me suis "amusé" à bricoler un petit truc.

    Il y a certainement des adaptations à faire.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Inscrit en
    Juin 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 16
    Par défaut
    Merci de votre aide.

    @L'Albatros: Je vais tester ton script.

    @pc75: As tu mis ta macro das ton fichier xls?
    Je ne la vois pas.

  6. #6
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Citation Envoyé par gregtw29 Voir le message
    Merci de votre aide.

    @L'Albatros: Je vais tester ton script.

    @pc75: As tu mis ta macro das ton fichier xls?
    Je ne la vois pas.
    Elles sont dans l'éditeur Visual Basic ; ce sont des fonctions personnalisées.

  7. #7
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Voici ce que j'ai fait de mon coté
    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
    Option Explicit
     
    Public Sub TransformeListeCasino()
     
        Dim ws1 As Worksheet, ws2 As Worksheet
     
        Dim commune As String
        Dim casino As String
        Dim adresse As String
        Dim codePostal As Long
        Dim ville As String
        Dim complementAdresse As String
        Dim societe As String
     
        Dim i1, i2 As Integer
        Dim maxRow As Integer
        Dim row2 As Integer
     
        Set ws1 = Worksheets("FeuilleOriginale")
        Set ws2 = Worksheets("FeuilleDestination")
     
        maxRow = ws1.Range("B65000").End(xlUp).Row
     
        i1 = 2
        row2 = 2
        commune = ws1.Cells(i1, 1).Value
     
        Do While commune <> ""
            'On cherche la ligne de la commune suivante
            i2 = i1 + 1
            Do While ws1.Cells(i2, 1).Value = "" And i2 <= maxRow
                i2 = i2 + 1
            Loop
     
            societe = ws1.Cells(i1, 3).Value
            casino = ws1.Cells(i1, 2).Value
            adresse = ws1.Cells(i2 - 2, 2).Value
            codePostal = Left(ws1.Cells(i2 - 1, 2).Value, 5)
            ville = Right(ws1.Cells(i2 - 1, 2).Value, Len(ws1.Cells(i2 - 1, 2).Value) - 6)
            complementAdresse = IIf(i2 - i1 >= 4, ws1.Cells(i2 - 3, 2).Value, "")
     
            ws2.Cells(row2, 1).Value = commune
            ws2.Cells(row2, 2).Value = casino
            ws2.Cells(row2, 3).Value = adresse
            ws2.Cells(row2, 4).Value = codePostal
            ws2.Cells(row2, 5).Value = ville
            ws2.Cells(row2, 6).Value = complementAdresse
            ws2.Cells(row2, 7).Value = societe
            row2 = row2 + 1
     
            i1 = i2
            commune = ws1.Cells(i1, 1).Value
        Loop
     
    End Sub
    @l'Albatros : Je n'ai pas bien compris ce que tu essayais de faire dans ton code, mais juste une remarque : On essaie régulièrement de sensibiliser les débutants pour qu'ils évitent au maximum les Select ou Activate dans leur code (vraiment une grosse source d'erreurs et de ralentissements potentiels), alors il serait surement mieux d'essayer de leur proposer du code sans ça.

    Je précise que mon code part du principe que les données de la colonne B sont sur plusieurs lignes et que les cellules des colonnes A et C sont fusionnées, ce qui me semblait être le cas dans la capture d'écran, d'où la différence avec les autres codes.

Discussions similaires

  1. Aide macro excel
    Par Orbichoox dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/05/2012, 09h29
  2. aide macro excel
    Par bensof1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/03/2011, 19h39
  3. Aide macro excel débutant
    Par obie78 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/08/2010, 20h25
  4. [XL-2007] Aide macro excel
    Par maxxxime dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/06/2010, 14h13
  5. Aide macro Excel
    Par lololasticot dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2007, 11h53

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