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
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.