Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.

Réponse
 
Outils de la discussion
Vieux 22/08/2008, 11h58   #1 (permalink)
Membre du Club
 
Date d'inscription: février 2007
Messages: 98
Par défaut Erreur d'execution 5 génante

Bonjour , j'ai crée un code avec une gestion un peu compliqué des exceptions de lecture.
Mon probleme se trouve à la ligne en italique. En fait il devrait gérer le fait qu'il n'y ais pas de saut de ligne mais il ne le fait pas (Juré, tel que je pense l'avoir écrit ça devrait marcher ) il me renvoie une erreur d'execution 5

Code :
If MemeFiche(c, cSuivant, cAutre) Then
            ' NB - Contrairement aux fonctions homologues d'Excel (CHERCHE() et TROUVE()), "Instr" renvoie 0 (zéro)
            ' et non une valeur d'erreur lorsque la chaîne recherchée n'est pas trouvée.
            Pos = InStr(1, cAutre, ":", vbTextCompare)
            ' La select Case ... permet de différencier le traitement selon que Pos renvoie 0 (":" non trouvés) ou non.
                Select Case Pos
                    Case 0
                        ' Si les ":" sont absents, on vérifie que l'avant-dernier caractère de la cellule correspond à la variable Lettre ("F" ou "R") selon le cas.
                        ' puis on recherche la première ligne non vide.
                        If Mid(cAutre, Len(cAutre) - 1, 1) = Lettre Then
                       
                Set cRef = cRef.Offset(1)
                cAutre.Select
                            NonVide = cRef <> ""
                            k = 1
                                Do Until NonVide
                                    Set cRef = cRef.Offset(1)
                                        If cRef <> "" Then
                                            NonVide = True
                                        End If
                                Loop
                           Sequence = cRef
                           ' Si "F" et pas de ":", ce qui le cas ici, info sur 2 lignes. Il faut alors decaler cAutre d'une ligne vers le bas pour ne pas commencer
                           ' 1 ligne trop haut la recherche de ligne non vide pour le repérage du "R" orrespondant.
                           If Lettre = "F" Then Set cAutre = cRef
                        End If
Je vous met le code complet de la sub

Code :
Private Function Sequence(cRef As Range, Lettre$)
Dim NonVide As Boolean, k As Integer, Pos As Integer
' L'information peut se trouver sur la ligne suivant cAutre sous la forme "F : TGAAGGCAGTCACACTGGG"
' ou sur la ligne suivante (avec une ligne vide après cAutre, fichier "Transfert_Marqueurs_Sep36_22_11_07_BGWY077_101).txt"),
' sous la forme "0006-A-F1*: TTCACATGGTTCCCTCCG" ou "0004-A-F2*: CTAGCTGCCTGCCAAATTAC"
' ******************************* Il faut alors tester la présence de "F", 3 caractères avant ":" *******************************
' Un troisième cas de figure (au moins) existe, également sur le fichier "Transfert_Marqueurs_Sep36_22_11_07_BGWY077_101).txt"
' (cf lignes 4864 et suivantes), le fichier texte ayant été ouvert avec Excel
'       Séquences des amorces PCR*:
'
'       126 F2R2 -D - F1
'       GCTTCTGAAGAAGTACAGTGGCT
'
'
'       126 F2R2 -D - R1
'       TGCTGAATACAGATATCTTTCCAAC
'
' ou (variante où un saut de ligne précède les séquences (lignes 1956 et suivantes))
'       Séquences des amorces PCR*:
'
'       0077-F1
'
'       GTAGGCCAGCGAGCTAA
'
'       0077_A_R1
'
'       CAGGCTCTACATGCATTTGTTTTCA
'
' ou (autre variante  (lignes 1192 et suivantes))
'       Séquences des amorces PCR*:
'       0075_F2R2_D_F1
'       TGCACAAGATTGATTGCAC
'       0075_F2R2_D_R1
'       CAGAATACATACCTGAGCAAG
' Il faut alors vérifier (si ":" absents), que "F" (ou "R", pour *********************************
' la seconde séquence prise en compte) est en avant-dernière ***********************************
' position, et récupérer la séquence sur la première ligne non vide. *******************************
    
    NonVide = cRef <> ""
        Do Until NonVide
            Set cRef = cRef.Offset(1)
                If cRef <> "" Then
                    NonVide = True
                End If
        Loop
    ' Emploi de la fonction "MemeFiche" pour vérifier que cAutre est sur la fiche en cours. Le test est à répéter pour chaque donnée
    ' de la fiche à ajouter à la base. C'est ce qui justifie l'emploi d'une fonction.
        If MemeFiche(c, cSuivant, cAutre) Then
            ' NB - Contrairement aux fonctions homologues d'Excel (CHERCHE() et TROUVE()), "Instr" renvoie 0 (zéro)
            ' et non une valeur d'erreur lorsque la chaîne recherchée n'est pas trouvée.
            Pos = InStr(1, cAutre, ":", vbTextCompare)
            ' La select Case ... permet de différencier le traitement selon que Pos renvoie 0 (":" non trouvés) ou non.
                Select Case Pos
                    Case 0
                        ' Si les ":" sont absents, on vérifie que l'avant-dernier caractère de la cellule correspond à la variable Lettre ("F" ou "R") selon le cas.
                        ' puis on recherche la première ligne non vide.
                        If Mid(cAutre, Len(cAutre) - 1, 1) = Lettre Then
                       
                Set cRef = cRef.Offset(1)
                cAutre.Select
                            NonVide = cRef <> ""
                            k = 1
                                Do Until NonVide
                                    Set cRef = cRef.Offset(1)
                                        If cRef <> "" Then
                                            NonVide = True
                                        End If
                                Loop
                           Sequence = cRef
                           ' Si "F" et pas de ":", ce qui le cas ici, info sur 2 lignes. Il faut alors decaler cAutre d'une ligne vers le bas pour ne pas commencer
                           ' 1 ligne trop haut la recherche de ligne non vide pour le repérage du "R" orrespondant.
                           If Lettre = "F" Then Set cAutre = cRef
                        End If
                    Case Else
                        ' Si les ":" sont présents, on vérifie que le premier caractère (info du type"F : TGAAGGCAGTCACACTGGG") ou que le 3ème caractère avant les ":"
                        ' (info du type "0004-A-F2*: CTAGCTGCCTGCCAAATTAC"), correspond à la variable Lettre ("F" ou "R") selon le cas.
                        ' On ne peut utiliser "If Left(cAutre, 1) = Lettre Or Mid(cAutre, Pos - 3, 1) = Lettre Then", car si la 1ère condition est remplie (Lettre ("F" ou "R"))
                        ' comme premier caractère, Pos = 3 et "Pos - 3", utilisé dans la seconde condition ("Mid(cAutre, Pos - 3, 1)") génère une erreur, car le second argument
                        ' de Mid ne peut =atre égal à 0. C'est pour cela que le test est décomposé, avec un "ElseIf"
                        If Left(cAutre, 1) = Lettre Then
                            Sequence = Mid(cAutre, Pos + 1 + IIf(Asc(Mid(cAutre, Pos + 1, 1)) = 32 Or Asc(Mid(cAutre, Pos + 1, 1)) = 160, 1, 0))
                        ElseIf Mid(cAutre, Pos - 3, 1) = Lettre Then
                            Sequence = Mid(cAutre, Pos + 1 + IIf(Asc(Mid(cAutre, Pos + 1, 1)) = 32 Or Asc(Mid(cAutre, Pos + 1, 1)) = 160, 1, 0))
                        End If
                End Select
            ' MAJ de cAutre si lettre = "F" afin de commencer le traitement relatif à "R" 1 cellule + bas
            If Lettre = "F" Then Set cAutre = cAutre.Offset(1)
        End If
End Function
Si quelqu'un pouvait regarder ça de près, je ne vois plus rien
soria_t est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 18h18.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2008 www.developpez.com - Legal informations