Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TESTER NUMÉRO TVA INTRA-COMMUNAUTAIRE


Information sur la source

Catégorie :Modules Classé sous : tva, intra, communautaire, tva, validité Niveau : Débutant Date de création : 03/02/2006 Date de mise à jour : 03/02/2006 15:58:51 Vu : 64 649

Note :
7,67 / 10 - par 6 personnes
7,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Voici une fonction permettant de tester la structure d'un numéro de TVA intra communautaire.

Nous ne pouvons pas aller beaucoup plus loin dans va vérification étant donné qu'il n’existe aucun algorithme accessible aux entreprises permettant de calculer automatiquement les numéros de TVA intracommunautaire et pouvant être intégré dans des systèmes informatiques de gestion.

Les structures testées suivent les conventions du 1er juin 2005 pour les 25 Etats membres
 

Source

  • ' =====================================================================================================
  • ' isIntraComValide : Teste que la structure du numéro de TVA intra communautaire soit valide.
  • '
  • ' num : numéro de TVA intra Com.
  • ' [siren] : cas pour la France afin d'afiner la vérification
  • '
  • ' Return : True/False
  • '
  • ' =====================================================================================================
  • '
  • ' Il n’existe aucun algorithme accessible aux entreprises permettant
  • ' de calculer automatiquement les numéros de TVA intracommunautaire et
  • ' pouvant être intégré dans des systèmes informatiques de gestion.
  • '
  • ' Mise à jour : 1er juin 2005 pour les 25 Etats membres
  • Private Function isIntraComValide(ByVal num As String, Optional ByVal siren As String) As Boolean
  • 'Nettoyer la chaine
  • num = UCase(Replace(num, " ", ""))
  • If Len(num) < 3 Then ' Il n'existe pas de code de moins de 3 char
  • isIntraComValide = False
  • Exit Function
  • End If
  • ' Découpage des données
  • Dim cle As String: cle = Mid(num, 1, 2)
  • Dim fin As String: fin = Mid(num, 3)
  • Dim finLength As Integer: finLength = Len(fin)
  • ' Vérifier à partir de la clé Pays
  • Select Case cle
  • Case "IE": isIntraComValide = (finLength = 8) ' Irlande
  • Case "DK": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Danemark
  • Case "FI": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Finlande
  • Case "LU": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Luxembourg
  • Case "MT": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Malte
  • Case "SI": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Slovénie
  • Case "HU": isIntraComValide = (finLength = 8) And IsNumeric(fin) ' Hongrie
  • Case "CZ": isIntraComValide = (finLength >= 8 And finLength <= 10) And IsNumeric(fin) 'République tchèque
  • Case "ES": isIntraComValide = (finLength = 9) ' Espagne
  • Case "CY": isIntraComValide = (finLength = 9) ' Chypre : CY + 8 caractères numériques + 1 caractères alphabétiques
  • Case "DE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Allemagne
  • Case "EL": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
  • Case "GR": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
  • Case "PT": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Portugal
  • Case "EE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Estonie
  • Case "SK": isIntraComValide = ((finLength = 9) Or (finLength = 10)) And IsNumeric(fin) ' Slovaquie
  • Case "LT": isIntraComValide = ((finLength = 9) Or (finLength = 12)) And IsNumeric(fin) ' Lituanie
  • Case "GB": isIntraComValide = (((finLength = 9) Or (finLength = 4 And Mid(fin, 1, 1) = "9")) _
  • And IsNumeric(fin)) Or (finLength = 5 And IsNumeric(Mid(fin, 3))) 'Grande-Bretagne
  • Case "AT": isIntraComValide = (finLength = 9 And (Mid(fin, 1, 1) = "U") _
  • And IsNumeric(Mid(fin, 2))) 'Autriche
  • Case "PL": isIntraComValide = (finLength = 10) And IsNumeric(fin) ' Pologne
  • Case "BE": isIntraComValide = (finLength = 10) And IsNumeric(fin) _
  • And (Mid(fin, 1, 1) = "0") ' Belgique
  • Case "LV": isIntraComValide = (finLength = 11) ' Lettonie
  • Case "IT": isIntraComValide = (finLength = 11) And IsNumeric(fin) ' Italie
  • Case "FR": isIntraComValide = (finLength = 11) And IsNumeric(fin) _
  • And IIf(Len(siren), Mid(fin, 3) = siren, True) ' France
  • Case "NL": isIntraComValide = (finLength = 12) ' Pays-Bas
  • Case "SE": isIntraComValide = (finLength = 12) And IsNumeric(fin) ' Suède
  • End Select
  • End Function
' =====================================================================================================
'   isIntraComValide : Teste que la structure du numéro de TVA intra communautaire soit valide.
'
'     num     : numéro de TVA intra Com.
'     [siren] : cas pour la France afin d'afiner la vérification
'
'     Return  : True/False
'
' =====================================================================================================
'
' Il n’existe aucun algorithme accessible aux entreprises permettant
' de calculer automatiquement les numéros de TVA intracommunautaire et
' pouvant être intégré dans des systèmes informatiques de gestion.
'
'  Mise à jour : 1er juin 2005 pour les 25 Etats membres


Private Function isIntraComValide(ByVal num As String, Optional ByVal siren As String) As Boolean

  'Nettoyer la chaine
  num = UCase(Replace(num, " ", ""))

  If Len(num) < 3 Then  ' Il n'existe pas de code de moins de 3 char
    isIntraComValide = False
    Exit Function
  End If

  ' Découpage des données
  Dim cle      As String: cle = Mid(num, 1, 2)
  Dim fin      As String: fin = Mid(num, 3)
  Dim finLength As Integer: finLength = Len(fin)


  ' Vérifier à partir de la clé Pays
  Select Case cle
    Case "IE": isIntraComValide = (finLength = 8)  ' Irlande

    Case "DK": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Danemark
    Case "FI": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Finlande
    Case "LU": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Luxembourg
    Case "MT": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Malte
    Case "SI": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Slovénie
    Case "HU": isIntraComValide = (finLength = 8) And IsNumeric(fin)  ' Hongrie

    Case "CZ": isIntraComValide = (finLength >= 8 And finLength <= 10) And IsNumeric(fin)  'République tchèque

    Case "ES": isIntraComValide = (finLength = 9)  ' Espagne
    Case "CY": isIntraComValide = (finLength = 9)  ' Chypre : CY + 8 caractères numériques + 1 caractères alphabétiques

    Case "DE": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Allemagne
    Case "EL": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Grèce
    Case "GR": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Grèce
    Case "PT": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Portugal
    Case "EE": isIntraComValide = (finLength = 9) And IsNumeric(fin)  ' Estonie

    Case "SK": isIntraComValide = ((finLength = 9) Or (finLength = 10)) And IsNumeric(fin)  ' Slovaquie
    Case "LT": isIntraComValide = ((finLength = 9) Or (finLength = 12)) And IsNumeric(fin)  ' Lituanie

    Case "GB": isIntraComValide = (((finLength = 9) Or (finLength = 4 And Mid(fin, 1, 1) = "9")) _
                                   And IsNumeric(fin)) Or (finLength = 5 And IsNumeric(Mid(fin, 3))) 'Grande-Bretagne

    Case "AT": isIntraComValide = (finLength = 9 And (Mid(fin, 1, 1) = "U") _
                                   And IsNumeric(Mid(fin, 2)))  'Autriche

    Case "PL": isIntraComValide = (finLength = 10) And IsNumeric(fin)  ' Pologne
    Case "BE": isIntraComValide = (finLength = 10) And IsNumeric(fin) _
                                  And (Mid(fin, 1, 1) = "0")  ' Belgique

    Case "LV": isIntraComValide = (finLength = 11)  ' Lettonie
    Case "IT": isIntraComValide = (finLength = 11) And IsNumeric(fin)  ' Italie
    Case "FR": isIntraComValide = (finLength = 11) And IsNumeric(fin) _
                                  And IIf(Len(siren), Mid(fin, 3) = siren, True)  ' France

    Case "NL": isIntraComValide = (finLength = 12)  ' Pays-Bas
    Case "SE": isIntraComValide = (finLength = 12) And IsNumeric(fin)  ' Suède
  End Select
End Function

Conclusion

Pour la France, il est préférable de passer le siren en parametre afin de completer la vérification.
Pour tout autre pays, il suffit de passer le numéro à tester à la fonction.

Pour consulter une base de données officielle afin de vérifier la concordance entre le nom d’une entreprise et son numéro de TVA intracommunautaire : http://www.europa.eu.int/comm/taxation_customs/vies/fr/vieshome.htm

++

Zlub
 

Historique

03 février 2006 02:55:17 :
fautes de frappes ;)
03 février 2006 15:58:51 :
Affiné pour la Grande-Bretagne

Commentaires et avis

signaler à un administrateur
Commentaire de katsankat le 03/02/2006 06:47:39

J'aime. Et c'est du bon VB.
Deux remarques:
Il faut affiner le Royaume-Uni.
Ce qui serait intéressant serait un client HTTP qui vérifie en ligne: autant bénéficier de la base de données actualisée en temps réel.

signaler à un administrateur
Commentaire de econs le 03/02/2006 14:55:05 administrateur CS

Pour ceux qui voudraient écrire beaucoup moins de lignes de code, il est possible de regrouper les pays qui nécessitent les mêmes actions.


Comme ces actions-ci :


Case "DE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Allemagne
Case "EL": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
Case "GR": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Grèce
Case "PT": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Portugal
Case "EE": isIntraComValide = (finLength = 9) And IsNumeric(fin) ' Estonie

qui se regroupent comme ceci :

Case "DE","EL","GR","PT","EE": isIntraComValide = (finLength = 9) And IsNumeric(fin)

On peut ainsi enlever dix lignes de ton code.
Chacun fait comme il préfère. Ce n'est en aucun cas une critique de ta source qui est propre et facile à lire.

signaler à un administrateur
Commentaire de Zlub le 03/02/2006 15:34:20

Salut,

Merci pour vos commentaires.

KatSankat > en effet, j'ai prévu de m'occuper de ça. En l'état c'est une version "autonome" donc sans connexion au Net. Mais l'idée de vraiment vérifier me plait bien et je vais sans doute bosser dessus.

ECONS > C'est vonlontairement que j'ai fait ainsi en hésitant sur ce point. J'ai opté pour cette solution pour faciliter les modifications au cas où les codes d'un pays changerait. Je me renseigne sur ce point et le cas échéant, je réduirais le nombres de lignes.

++

Zlub

signaler à un administrateur
Commentaire de katsankat le 03/02/2006 16:06:50

Salut si tu veux on le fait ensemble car je vais faire le client en C sous linux: la méthode est la même.

signaler à un administrateur
Commentaire de econs le 03/02/2006 16:10:00 administrateur CS

Zlub > Y'a pas de problème, tu peux laisser comme c'est là. Y'a pas de faute de programmation.

Je me demandais : le Case "GB" ne serait-il pas de la forme :
isIntraComValide = (Angleterre_valide Or Ecosse_Valide Or Pays_de_Galles_Valide) ?
C'est pour çà que tu l'as appelé GB ?

signaler à un administrateur
Commentaire de Zlub le 03/02/2006 16:21:05

ECONS > je suppose que c'est pour ça. Je n'ai pas trouvé le detail dans la doc. Etant donné que ni Ecosse, ni Pays de Galles ont un code pays, j'imagine que GB les regroupent.
De toute façon, les codes pays sont fixés par les pays membres de UE et ne sont donc pas de moi.

signaler à un administrateur
Commentaire de Zlub le 03/02/2006 18:01:11

NB : ça serait sympas d'indiquer pourquoi vous mettez une mauvaise note afin que je puisse améliorer le code ou clarifier des points. Sinon ça n'a pas de sens.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Case TVA?? [ par gatsso ] Bonjour a tous,je d'acheter le bouquin EXCEL2002 et je ne m'en sort pas c'est peut etre parce que j'ai EXCEL 97? bref je fait mon facturier et j'aimer Maskedbox1 [ par petiflamand ] Salut comment faire pour effacer un maskedboxen effet je rentre dedans un numero de tvaau format 123/123/123puis si il y a pas de tva pour un clientje Je n'y connais rien et on me demande de faire des trucs pas possible... [ par kimenbo ] Bonjour &#224; tous et merci de m'apporter votre aide et soutien...On m'a demand&#233; de d&#233;velopper une base access pour g&#233;rer des chantier Clé TVA Intracommunautaire [ par MadJax ] Bonjour &#224; tous et bonne ann&#233;e, Ma question est simple. Je cherche un algo permettant de g&#233;n&#233;rer un N&#176; TVA Intracommunautaire comment eviter plein de if ??? dans une boucle [ par petiflamand ] bonjour , je doit faire un calcul entre 300 a 400 ligne chauque jourdans c'est ligne j'ai des champ avec des numero entre 1 et 89je vourais savoir si Probleme avec datagridviewcomboboxcell vb2005 [ par chris81 ] bonjour,j'ai ub datagridview avec une comboboxcolumn que je remplit ainsi dans le chargement de ma page.[CODE]        Dim MyTVA As New tvaDim Myds As Calculer la TVA à 19.6% ou plus Simplement un pourcentage ? [ par Dri60 ] Bonjour, je voulais savoir si il existe une Fonction pour Calculer la TVA à 19.6% ou plus Simplement un pourcentage ?Merci d'avance. Dri60 Requette imbriqué VB.net [ par perlitta3000 ] BonjourSVP j'ai besoin de votre aide. Je extraire des donnees de plusieurs tables c-a-d je veux creer une sqlcommand qui contient une requette sql imb Application de calcul de TVA au maroc avec VB2005 [ par etarik87 ] bsr mes freres les developpeurs je suis un etudiant dans une ecole d'informatique appliquée a la gestion on a fait de la programmation c'est juste une Problème arrondi calcul validité IBAN [ par fusuke ] Bonjour à tous, ôh mes maîtres !!!! Je voudrais calculer la validité d'un IBAN.Pour celà, je me fie à un mode de calcul donné dans Wikipédia pour l


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.