Incrémenter 2 nouvelles colonnes depuis une première

Bonjour,

J'ai un fichier avec une colonne "Adresse" dans lequel j'ai mis l'adresse, le code postal et la ville.

J'aimerai séparer cela pour avoir une colonne "adresse" une "code postal" et la dernière "ville"

Comment "transférer les infos et les envoyer dans la bonne colonne ?

Une formule ?

VBA ?

Merci

Bonjour,

Peux tu nous donner quelques exemples de tes adresses actuelles, pour voir sur quel(s) caractère(s) on peut se baser pour tronquer le texte ?

Sannard 24330 Bassillac

8 Rue Léo Lagrange - Les Martys Sud 24430 Razac sur l'isle

8 Rue Léo Lagrange - Les Martys Sud 24430 Razac sur l'isle

21 Route de Bordeaux 24430 Razac sur l'isle

14 Rue Paul Louis Courrier - Rés Jardin des Lys Flo - 24000 Px

25 Route de Périgueux 24460 Château L'évèque

1 Rue des Persées 24650 Chancelade

Rue Raymond Raudier - Entrée 41 - Appt 1332 - 24000 Px

5 Impasse Roger Marche 24750 Boulazac

6 Bis Route de Palesson 24750 Atur

35 Rue du 19 Mars 1962 24750 Champcevinel

3 Allée des Haut de Meycourby 24330 Bassillac

3 Bis Rue des Chalets 24000 Périgueux

18 Rue Auguste Delaume 24750 Boulazac

19 Rue Gut Bocquet 24750 Boulazac

Les Reyssoux 24350 La Chapelle Gonaguet

29 Bis Rue de Vesone 24000 Périgueux

15 Route d'Atur 24750 Boulazac

109 Rue Victor Hugo - Appart 8 - 24000 Périgueux

1 Rue Albert Pestour - Appt 422 - 24000 Périgueux

4 Chemin des Rouquilloux 24650 Chancelade

Voilà une solution en macro :

Sub DecoupeAdresse()

    Dim Tableau() As String
    Dim i As Integer, Lig As Integer, Lmax As Integer

    With Sheets("Feuil1")
        Lmax = .Range("A" & Rows.Count).End(xlUp).Row 'Identifie la dernière ligne de la base de données
        'boucle pour parcourir les lignes
        For Lig = 2 To Lmax
            'découpe l'adresse à partir des espaces
            Tableau = Split(.Cells(Lig, 1), " ")
            'boucle sur le tableau pour repérer le CP
             For i = 0 To UBound(Tableau)
                If Tableau(i) Like "#####" Then 'Si l’élément découpé est un nombre à 5 chiffres, alors...
                    .Cells(Lig, 2) = Left(.Cells(Lig, 1), InStr(1, .Cells(Lig, 1), Tableau(i)) - 2) 'Rue = ensemble des caractères jusqu'au début du CP
                    .Cells(Lig, 3) = CLng(Tableau(i)) 'CP
                    .Cells(Lig, 4) = Right(.Cells(Lig, 1), Len(.Cells(Lig, 1)) - (InStr(1, .Cells(Lig, 1), Tableau(i)) + 5)) 'Ville = caractères après le CP
                    Exit For
                End If
             Next i
        Next Lig
    End With

End Sub

Si le code n'est pas clair, redis-moi.

Sa ne marche pas, mais merci d'avoir essayé

Je vous mets le fichier pour voir

Il fallait simplement ajuster les colonnes de mon code avec vos données. J'étais parti sur une adresse en colonne A, découpée en 3 infos en colonnes B, C et D.

Pour mieux comprendre, dans le code, ".Cells(Lig, 1)" est équivalent à ".Range("A", Lig)". Le premier indice ("Lig") représente la ligne, le second ("1") la colonne...

Le nouveau code :

Sub DecoupeAdresse()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim Tableau() As String
    Dim i As Integer, Lig As Integer, Lmax As Integer

    With Sheets("Saison 2018 - 2019")
        Lmax = .Range("K" & Rows.Count).End(xlUp).Row 'Identifie la dernière ligne de la base de données
        'boucle pour parcourir les lignes
        For Lig = 3 To Lmax
            'découpe l'adresse à partir des espaces
            Tableau = Split(.Cells(Lig, 11), " ")
            'boucle sur le tableau pour repérer le CP
             For i = 0 To UBound(Tableau)
                If Tableau(i) Like "#####" Then 'Si l’élément découpé est un nombre à 5 chiffres, alors...
                    .Cells(Lig, 12) = Left(.Cells(Lig, 11), InStr(1, .Cells(Lig, 11), Tableau(i)) - 2) 'Rue = ensemble des caractères jusqu'au début du CP
                    .Cells(Lig, 13) = CLng(Tableau(i)) 'CP
                    .Cells(Lig, 14) = Right(.Cells(Lig, 11), Len(.Cells(Lig, 11)) - (InStr(1, .Cells(Lig, 11), Tableau(i)) + 5)) 'Ville = caractères après le CP
                    Exit For
                End If
             Next i
        Next Lig
    End With

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

Le fichier révisé :

Super, merci

Su je veux l'appliquer à une autre feuille, je dois rajouter quelque chose ? Ou faire un copier/coller sur l'autre feuille ?

Autre question, est-il possible de mettre plusieurs formules VBA sur la même feuille pour faire autre chose ?

Cordialement

Tu as une instruction qui précise la feuille de travail :

With Sheets("Saison 2018 - 2019")
    'Liste d'instructions : les objets qui dépendent de cette feuille commencent par "." (ex: .Cells(Lig, 1))
End With

Tu peux donc préciser une autre feuille soit objet par objet, soit en utilisant une autre instruction "With" dans le cas d'utilisation répétée.

Il est également possible d'ajouter d'autres instructions dans la même macro, ou de créer une macro distincte.

Bonjour,

Dsl j'essaye de comprendre, mais je n'arrive pas à comprendre.

J'essaie de rajouter une feuille (base de données), mais cela ne marche pas.

Je ne dois pas écrire ce qu'il faut ou le mettre au bon endroit

Il va falloir que tu sois un peu plus précis...

Ca veux dire quoi "j'essaie de rajouter une feuille" ? Elle existe dans ton document et tu veux l'utiliser dans le code ? Tu la rajoutes où ?

Oups dsl,oui je souhaite faire la même chose qu'on a fait sur la feuille "Saison 2018-2019" pour la feuille "Base de données"

Dsl

Plusieurs possibilités, en considérant que tes données sont au même endroit (mêmes colonnes) d'une feuille à l'autre.

--> Solution 1 : remplacer l'instruction "With Sheets("Saison 2018 - 2019")" par "With Sheets("Base de données")", pour ne faire la transformation que sur la feuille "Base de données"

--> Solution 2 : dupliquer tout le code compris entre "With Sheets("Saison 2018 - 2019")" et "End With" (inclus) et le coller sur la 1ère ligne après "End With". Puis, appliquer la solution 1 sur la nouvelle instruction "With", la macro travaille alors sur les 2 onglets

--> Solution 3 : Substituer "Sheets("Saison 2018 - 2019")" par ActiveSheet OU supprimer l'instruction "With... End With" et tous les "." devant les objets ".Cells" et ".Range". La macro travaillera par défaut sur la feuille depuis laquelle on l'a lancée.

Bonjour,

Toujours dans l'optique de comprendre, j'ai fais la modif (solution 1) et effectivement cela marche, j'ai pu séparer l'adresse du code postal et de la ville.

Par contre la modif sur l'autre feuille "Saison 2018 - 2019" est resté en place alors que je l'ai remplacé par "Base de données".

Cela signifie qu'une fois le travail fait, on peux supprimé la macro et les modifs, elle sont définitive ?

Autre question, j'aimerai pouvoir (apprendre) à faire des macros comme ce que tu as fais pour moi plutôt que de demander à chaque fois, comment faire ?

Comment apprendre ? Des cours ? Autre ?

Merci

Dans le cas présent, les modifications sont définitives et tu peux enregistrer ton document en format ".xlsx" (sans conserver les macros donc). Mais garde ton code quelque part, même dans un document Word (au cas où...).

Pour apprendre, tu as des cours et tutoriels sur ce site et sur bien d'autres. Tu as aussi des bouquins pour apprendre ou encore des formations, mais personnellement je n'en ai jamais fait.

Le mieux reste de coupler un apprentissage avec des cas pratiques, car sans utilisation, on retient pas vraiment grands choses. L'enregistreur de macro reste aussi un bon moyen d'obtenir les commandes pour effectuer la plupart des tâches, mais le code obtenu est très souvent à retravailler pour être vraiment efficace/utile.

Pendant que j'y pense :

Rechercher des sujets similaires à "incrementer nouvelles colonnes premiere"