Soyez le premier à donner votre avis sur cette source.
Snippet vu 93 385 fois - Téléchargée 33 fois
' ===================================================================================================== ' 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
9 juil. 2009 à 14:41
A noter qu'un contrôle supplémentaire peut être fait sur la tva intra française.
En effet sa structure est ainsi faite
FR XX 999 9999 99Y
Où XX représente une clef informatique dont je ne connais pas la méthode de contrôle
mais Y est une clé de contrôle des 8 chiffres précédents (le tout formant le code SIREN)
Le principe est le suivant : on multiplie les chiffres de rang impair à partir de la droite par 1,
ceux de rang pair par 2 ; la somme des chiffres obtenus doit être un multiple de 10.
exemple : soit le SIREN 732 829 320
pour vérifier : 7 3 2 8 2 9 3 2 0
rang pair x 2 : 6 16 18 4
rang impair x 1 : 7 2 2 3 0
----------------------
somme : 7+6+2+1+6+2+1+8+3+4+0 = 40
Le numéro est exact.
Je ne connais pas le VB alors je laisse le soin à qui en a besoin de faire ce bout de code.
3 févr. 2006 à 18:01
3 févr. 2006 à 16:21
De toute façon, les codes pays sont fixés par les pays membres de UE et ne sont donc pas de moi.
3 févr. 2006 à 16:10
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 ?
3 févr. 2006 à 16:06
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.