Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 extraction code postal vba

sri75

XLDnaute Occasionnel
Bonjour à tous, je bloque sur l'extraction en vba des deux premiers chiffres du code postal.

j'ai tenté left mais pour les codes postaux commençant par un zéro comme dans mon fichier ca me renvoie les deuxièmes et troisièmes caractères ( ex 01230 ca renvoie 12 ).

j'ai forcé le format 00000 ou code postal rien n'y fait Selection.NumberFormat = "00000" puis
toto = ActiveCell.Value

la variable
toto2 = Left(toto, 2) me renvoie 12 , vu que j'aurai 5000 codes postaux à traiter je commence à m'inquieter.

Je dois certainement louper qq chose mais où ?

j'ai beau chercher sur l'historique du forum je n'arrive pas à résoudre mon pb

Merci d'avance pour votre aide
 

Deadpool_CC

XLDnaute Accro
Le format c'est juste un format d'affichage ... ce n'est pas exactement la valeur contenu dans la cellule et donc si t'as pas pris le soin de prendre tes code postaux en tant que Texte (et non pas des nombres) tu à perdu tous les 0 non significatifs du départ
En passant par une étape de transformation de ton CP en Texte avec les 0 significatif ... après le département c'est un simple =gauche([celluleCP];2)
cf. fichier joins

(Edit] Désolé, je viens de voir dans le titre que la demande était sur du VBA ...
juste appliquer le même logique dans ton code.

[Edit 2] Fichier supprimer car pas fais attention mais données nominatives dans un des onglets.
 
Dernière édition:

sri75

XLDnaute Occasionnel
Bonjour et merci, effectivement la formule permet de recuperer un 01 , mais ce 01 je voudrais le recuperer dans une variable vba sans avoir au préalablement avoir fait un copier coller de ma formule sur les 5000 lignes de mon fichier.
 

Deadpool_CC

XLDnaute Accro
Rapidement
à ton code existant essaye de rajouter un truc du genre
VB:
   CP = "-"
    Nb = Len(Cellule.Value)
    If Nb > 0 Then CP = String(5 - Nb, "0") & Cellule.Value
    DepDuCP = Left(CP, 2)

Je te laisse adapter les nom des variables et la référence à la cellule
 

soan

XLDnaute Barbatruc
Inactif
Bonjour sri75, Deadpool,

ATTENTION : SUPPRIME TOUT DE SUITE LE FICHIER DE TON POST #1 CAR Y'A DES DONNÉES CONFIDENTIELLES SUR LES 2 FEUILLES !!! C'EST STRICTEMENT INTERDIT PAR LA LOI RGPD !!!

@Deadpool_CC : toi aussi, tu dois supprimer le fichier de ton post #2 ! (sauf si tu as anonymisé le fichier)



j'savais pas qu'le Sri Lanka était à Paris, mébon... avec le dérèglement climatique, pourquoi pas ?

1) sur la 1ère feuille "original" :

* fais Ctrl e ➯ département de la cellule C2, selon une 1ère méthode.

* fais Ctrl f ➯ département de la cellule C2, selon une 2ème méthode.

dans les 2 cas, retour : 01

2)
sur la 2ème feuille "copie" :

* fais Ctrl e ➯ département de la cellule C2, selon la 1ère méthode.

* fais Ctrl f ➯ département de la cellule C2, selon la 2ème méthode.

dans les 2 cas, retour : 04



code VBA des 2 macros :

VB:
Sub Essai1()
  Dim Dpt$ 'département
  Dpt = Left$(Format([C2], "00000"), 2)
  MsgBox "Département : " & Dpt, 64, "Avec la méthode 1"
End Sub

Sub Essai2()
  Dim Dpt As String * 2 'département
  Dpt = Format([C2], "00000")
  MsgBox "Département : " & Dpt, 64, "Avec la méthode 2"
End Sub

soan
 

Pièces jointes

  • mac de EXTRAIT.xlsm
    29.3 KB · Affichages: 6

sri75

XLDnaute Occasionnel
Ca devient bon , cerise sur le gateau serait il possible que Dpt renvoie 04 et non "04" ?

le "04" je l'avais aussi obtenu avec rr=activecell.txt

derrière j'au une autre macro qui doit mettre une valeur en fonction du numéro de département ( ex si le département est entre 01 et 06 ; avec "01" ca ne marchera pas sauf si j'énumère tous les numéros "01" "02" "03" "04" "05" "06"

Merci
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Ça devient bon

n'est-ce pas ?

cerise sur le gâteau serait-il possible que Dpt renvoie 04 et non "04" ?

oui, tout à fait : voir 2ème version du fichier ; mais du coup, la 2ème méthode devient inutile ; donc il reste une seule méthode ; voici la cerise vba en question :​

VB:
Sub Essai()
  Dim Dpt% 'département
  Dpt = Val(Left$(Format([C2], "00000"), 2))
  MsgBox "Département : " & Format(Dpt, "00"), 64, "Essai"
End Sub

cela dit, je ne vois pas trop l'intérêt vu qu'en principe, y'a pas besoin d'faire de calculs sur le code postal ; ou peut-être y'aurait une clé à calculer selon un code postal, comme par exemple pour un numéro de sécurité sociale ? mais pour une clé de n° SSle, on utilise tous les chiffres, pas seulement les 2 chiffres du département (même si ce numéro est 99 pour ceux qui sont nés à l'étranger).

utilisation : sur les 2 feuilles, fais Ctrl e ; y'a plus de Ctrl f vu que j'ai supprimé la 2ème macro.​



@Deadpool_CC : merci d'avoir supprimé de ton post #2 le fichier avec données confidentielles.

@sri75 : merci d'avoir supprimé de ton post #1 le fichier avec données confidentielles.

soan
 

Pièces jointes

  • mac de EXTRAIT.xlsm
    29.3 KB · Affichages: 1

sri75

XLDnaute Occasionnel
Désolé la cerise ne renvoie pas 01 mais 1

mon but est de pouvoir utiliser la macro ci-dessous qui attribue un utilisateur en fonction du numéro de département ( ex de 01 à 56 c'est SRI ) avec du "01" ce n'est pas possible

If ag = "" And totoan2 > 0 And totoan2 < 57 Then ActiveCell.Offset(0, 9).Value = "SRI" Else ActiveCell.Offset(0, 9).Value = "KBO"
 

Deadpool_CC

XLDnaute Accro
Après si tu as du mal pour "calculer" ton agence
met nous la dernière version du code vba de ta sub analyste() qu'on t'aide.
car en effet l'affichage en msgbox ne correspond pas à ton test dans le IF
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…