Macro créant un code postal léttré (select case?)

Bonjour

grâce à une macro,

Je souhaite créer un code géographique lettré (A/B/C/D/E/F/G) selon le code postal ou le pays.

CAS1

si pays (colonne L) <> France alors code = "G"

CAS2 le code proche (4 cas possibles)

si (recherchev avec valeur exacte selon le centre (colonne A) et codepostal(colonne J), tableau geo;0)=vrai; "A"

=> voir la liste selon centre dans PJ

CAS3 le 62

si gauche de code postal (colonne j) =62; "B"

CAS4 le 59

si gauche de code postal (colonne j) =59; "C"

CAS5 le 02-60-80

si gauche (de codepostal (colonneJ);2)= {60;80;02} = D

l' ile de france

CAS6

si gauche (de codepostal (colonneJ);2)= )={"75";"77";"78";"91";"92";"93";"94";"95"},"" = E

CAS7 autre département

RESTE "F"

merci pour votre aide.

Michel

30code-geo.xlsx (14.58 Ko)

Bonjour CHVALET

Voici ton fichier avec un code possible

Select Case, est utilisé, mais pas pour tous les cas

A+

Bonjour,

Un exemple avec une fonction personnalisée

Elle utilise principalement l'instruction "Select Case". Elle est codée en dur!

Elle a donc ses avantages et ses inconvénients

Cdlt

24code-geo.xlsm (24.01 Ko)

Bonjour

merci pour vos 2 solutions.

Cependant si j'ajoute ou enlève des codes "proches" (solution A) dans la feuille parametre, ils ne vont pas etre pris en compte.

y a t il une solution permettant cette evolution?

comment intégrer vos solutions dans ce fichier complet pj? (travail d'un 1er post)

merci

Michel

Bonjour,

proposition de fonction personnalisée.

Prend en compte les code Proches selon le centre.

Par contre les départements sont en dur en non récupérés de la colonne F. J'ai supposé que c'était relativement stable, et l'adaptation du code se fera facilement avec les Case.

Les département inconnus (00, 96, 99) retournent "CP ?"

A noter que tu as une macro qui tourne et supprime la formule en Q si saisie incorrecte, et que la colonne Q est verrouillée. A voir et adapter en conséquence...

eric

Bonjour Eriic

Merci, ça fonctionne super!

eriiic a écrit :

Bonjour,

A noter que tu as une macro qui tourne et supprime la formule en Q si saisie incorrecte, et que la colonne Q est verrouillée. A voir et adapter en conséquence...

eric

Ca veut dire quoi exactement?

Est ce possible d'avoir un bouton macro "verif", qui vérifierait en un clic les 4 colonnes P Q R S ?

merci

Michel

Bonjour,

Ca veut dire quoi exactement?

Regarde ta procédure Worksheet_Change, tu y fais des contrôles.

Y compris sur Q où tu écrases la formule =cgeo(A3;J3;L3) avec l'ancienne :

    'recherche du code geographique
    With Range("Q" & Lg)
      .Formula = ...

eric

Bonsoir

En fait quand je vais copier/coller ma base actuellement en attente dans un autre fichier vers le tableau, les colonnes ne vont pas se remplir automatiquement.

il faut que je retappe des données , et si jai 500 lignes... ça risque d'être long

alors qu'avec un bouton, la macro vérifie en cliquant qu'une seule fois...

Ai je fais une erreur d'appréciation du code?

merci

Michel

Bonjour,

tu peux laisser les autres contrôles qui se lancent lorsque tu modifies une cellule.

Mais une fonction personnalisée s'utilise comme une fonction native d'excel : tu mets une formule =cgeo(A3;J3;L3) en Q, il ne faut pas l'écraser. Aucune raison qu'elle ne s'évalue pas lorsque tu colles tes données.

eric

Bonjour

justement, je souhaiterais qu'il n'y ait pas de formule dans les cellules pour éviter les suppressions maladroites

Il y a toujours la possibilités de verrouiller les cellules.

j'avais pensé (mais je ne sais pas faire), à un bouton macro avec une boucle sur la colonne A,

tant que cellule A n'est pas vide alors réaliser les actions suivantes :

en P: calculer age (voir sub)

en Q: calculer code geo (ta fonction)

en R concatener (a;c;f;g)

en S concatener (a;b)

merci

Michel

Bonjour eriic

J'avais pensé aussi dans le code général à mettre ce code mais je ne trouve pas le bon code

With Range("Q" & Lg)

.Formula = "=Cgeo(G" & Lg, J" & Lg, L" & Lg)"

.Value = .Value

end with

peux tu me renseigner?

merci

Michel

justement, je souhaiterais qu'il n'y ait pas de formule dans les cellules pour éviter les suppressions maladroites

Dans ce cas appelle la fonction dans le code de worksheetchange() pour ne mettre que le résultat :

        'code geographique
Range("Q" & Lg).Value = CGeo(Cells(Lg, "A"), Cells(Lg, "J"), Cells(Lg, "L"))

j'avais pensé (mais je ne sais pas faire), à un bouton macro avec une boucle sur la colonne A,

tant que cellule A n'est pas vide alors réaliser les actions suivantes :

en P: calculer age (voir sub)

en Q: calculer code geo (ta fonction)

en R concatener (a;c;f;g)

en S concatener (a;b)

Seulement ce n'est pas du tout le départ que tu as pris puisque tu as fait le choix de calculer au fur et à mesure des saisies, et non pas sur un collé de plusieurs cellules.

Je t'ai ressorti de worksheetchange() ces 4 calculs dans une proc car elle va servir 2 fois :

Sub calcul(Lg As Long)
        'Age de l'adherent
        Range("P" & Lg).Value = IIf(Cells(Lg, "I") = "", "", Cells(Lg, "C") - Year(Cells(Lg, "I")))
        'code geographique
        Range("Q" & Lg).Value = CGeo(Cells(Lg, "A"), Cells(Lg, "J"), Cells(Lg, "L"))
        'Creation d un concatener pour doublon
        Range("R" & Lg).Value = Cells(Lg, "A") & Cells(Lg, "C") & Cells(Lg, "F") & Cells(Lg, "G")
        'Creation d un n° pour indexequiv
        Range("S" & Lg).Value = Cells(Lg, "A") & Cells(Lg, "B")
End Sub

Et j'ai ajouté une proc Recalcul() qui te réévalue toutes les lignes après un collé multiple (bouton recalcul)

Regarde si ça va.

eric

Bonjour

c'est exactement ce dont je voulais

Michel

Rechercher des sujets similaires à "macro creant code postal lettre select case"