Tester numéro tva intra-communautaire


Contenu du snippet

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 / Exemple :


' =====================================================================================================
'   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

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.