IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Impossible de détecter une variable vide en VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Par défaut Impossible de détecter une variable vide en VBA
    Bonjour à tous,

    Tout d'abord, c'est la première fois que je demande de l'aide sur un forum et j'espère vraiment pouvoir trouver de l'aide ici car personne autour de moi n'a pu m'aider.

    Je vous sommets donc mon problème, je suis en stage et on m'a assigné comme tâche de réaliser un programme permettant de trier des fichiers logs contenants certaines données, réparties aléatoirement dans ces derniers. (Il est important de savoir que je n'ai commencé à utiliser le VBA qu'il y a 3 jours, j'en suis donc encore aux bases). J'ai donc une quantité non déterminée de fichiers logs, ils peuvent être ajoutés dans le fichier source au fur et à mesure et doivent être traités par le programme dès qu'Excel s'est ouvert.

    Le but de mon programme est d'aller chercher les fichier logs un par un, de les analyser, de trouver les données qui m'intéressent, de les remettre en forme, de les extraire et de les trier dans un tableau, contenu dans une nouvelle feuille Excel. J'ai donc commencé par trouver un moyen de récupérer mes données. Les fichiers log se présentent de la façon suivante : un nombre indéterminé de ligne, une seule colonne, une information par ligne. Les informations que je cherches sont les noms et les références des cartes électroniques testées, contenus dans une ligne commençant par "<ETX>" et les dates des tests dans la ligne qui suit cette dernière. Encore une fois ces deux lignes se suivent forcément mais elles sont disposées aléatoirement dans le fichier d'origine à longueur variable.

    Voici mon premier essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Option Compare Text
     
    Sub comparaison()
     
    Dim text As String
    Dim ligne_depart As Long
    Dim ligne_arrivee As Long
    Dim colonne As Byte
    ligne_depart = 1
    ligne_arrivee = 2
    colonne = 0
     
    text = Sheets("Départ").Range("A" & ligne_depart).Value
     
    Do While Not IsEmpty(text)
     
    text = Sheets("Départ").Range("A" & ligne_depart).Value
     
        If text Like "<ETX>*" Then
        text = Replace(text, "<ETX>H#2", "")
        colonne = 0
     
                    Select Case colonne
                        Case 0 'A
                        Sheets("Arrivée").Range("A" & ligne_arrivee).Value = text
     
                        Case 1 'B
                        Sheets("Arrivée").Range("B" & ligne_arrivee).Value = text
     
                        Case 2 'C
                        Sheets("Arrivée").Range("C" & ligne_arrivee).Value = text
     
                        Case Else
     
                    End Select
     
        ligne_depart = ligne_depart + 1
        text = Sheets("Départ").Range("A" & ligne_depart).Value
        colonne = colonne + 1
     
                    Select Case colonne
                        Case 0 'A
                        Sheets("Arrivée").Range("A" & ligne_arrivee).Value = text
     
                        Case 1 'B
                        Sheets("Arrivée").Range("B" & ligne_arrivee).Value = text
     
                        Case 2 'C
                        Sheets("Arrivée").Range("C" & ligne_arrivee).Value = text
     
                    Case Else
                    End Select
        ligne_arrivee = ligne_arrivee + 1
     
        Else
        ligne_depart = ligne_depart + 1
     
        End If
     
    Loop
     
    End Sub
    Mon tri se fait, je retrouve mes valeurs, j'arrive à les mettre dans le tableau que je souhaite mais le problème vient de ma boucle. Je n'arrive pas à faire en sorte que mon programme s'arrête lorsqu'il rencontre une case vide dans la feuille contenant le fichier texte (log). J'ai beau essayer avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsEmpty(text) = True then 
     
    end sub
     
    EndIf
    un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    While IsNotEmpty(text)
     
    MON CODE 
     
    Wend
    ou encore avec un Do While IsEmpty, Loop, et autres alternatives, rien ne fonctionne, mon programme ne veut pas s'arrêter lorsqu'il rencontre une case contenant la variable texte vide. Il continu de tourner jusqu'à la fin du tableau excel, et ne s'arrête donc jamais.

    Je pense qu'il y a un problème avec la variable, il ne doit pas comprendre si elle est vide ou non, mais je ne sais pas comment régler le problème.

    Merci par avance de votre aide et du temps que vous prendrez,
    Cordialement, TitPaon.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pour commencer, ne jamais utiliser de mots réservés ou sensibles en VBA, "text" en fait partie, utilise Texte par exemple si tu veux

    ensuite, une variable String (chaine de caractère) est vide quand son contenu l'est également

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim MaVariableString As String
    ' ici on a pas encore utilisé la variable, elle est donc vide
     
    If MaVariableString = "" Then MsgBox "La Variable Est Vide" Else MsgBox "La Variables Est Pas Vide"
     
    ' on utilise la variable
    MaVariableString = "toto"
    If MaVariableString = "" Then MsgBox "La Variable Est Vide" Else MsgBox "La Variables Est Pas Vide"

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Par défaut
    Mais ma variable est vide lorsque "text" prend le contenu d'une case vide non ?

    J'ai essayé de régler le problème autrement de mon côté, en fixant ma limite de lignes_depart à 5000, soit le double de mon fichier le plus long, dans un souci de sécurité. De cette façon ma boucle peut fonctionner.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Si je comprend bien :

    1) tu as une colonne avec des données
    2) au sein de tes données, tu peux avoir des cellules vides
    3) tu veux parcourir la colonne jusqu'à la dernière valeur non vide, incluant par là le passage dans les cellules vides MAIS qui font partie de la plage de données

    il faut dans ce cas là calculer la dernière cellule de ta colonne.

    un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim DerLig as Long
     
    DerLig = ActiveSheet.Cells(Rows.Count,1).End(xlup).Row
    Te donne la dernière ligne non vide de la colonne A de la feuille active

    Et de là, tu boucles avec For/Next

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 2 To Derlig  ' si les données commencent en Ligne 2
        Debug.print ActiveSheet.Cells(i,1).value  ' affiche la valeur de la cellule située en colonne A et en ligne i
    Next i

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While trim("" & text)<>""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with   Sheets("Départ").Range("A" & ligne_depart)
    While trim("" & .value)<>""
    if .value  Like "<ETX>*"   then
    End if
    ligne_depart=ligne_depart +1
    Wend
    End with
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with   Sheets("Départ")
             For i =1 to .usedrange.rows count
               if .cells(i,"A").value  Like "<ETX>*"   then
               end if
           Next
    End with
    Dernière modification par Invité ; 14/04/2017 à 13h21.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Si je comprend bien :

    1) tu as une colonne avec des données
    2) au sein de tes données, tu peux avoir des cellules vides
    3) tu veux parcourir la colonne jusqu'à la dernière valeur non vide, incluant par là le passage dans les cellules vides MAIS qui font partie de la plage de données
    En réalité non, il n'y a aucune cellule vide dans mes données, voilà pourquoi je souhaite marquer la fin grâce à la première cellule vide qui entre dans ma variable texte

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Où est alors le problème dans le fait que :

    - tu peux utiliser la méthode For/Next qui va de la première ligne jusqu'à la dernière ligne non vide (mon dernier message)
    - tu peux balayer dans une boucle While/Wend (par exemple) ta colonne en basant ta condition de sortie par le fait que la Cellule.Value = ""

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Par défaut
    J'ai réussi à régler mon problème, merci à vous !

    Si j'ai besoin d'aide pour la suite de mon programme (concernant la fonction split que je n'arrive pas à utiliser) dois-je rouvrir une discussion ?

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Le sujet de cette discussion n'étant pas l'utilisation d'un Split, mais la détection d'une variable string (ou du contenu d'une cellule) vide, c'est préférable de marquer cette discussion comme résolue et d'en ouvrir un autre en effet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOS] Gérer une variable vide
    Par Bahan dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 13/12/2007, 11h30
  2. [Free Pascal] [2.2] Impossible d'assigner une variable de type T à une variable de type T
    Par Hibou57 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 12/10/2007, 12h31
  3. Détecter une balise vide
    Par yassinchaouki dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/04/2006, 14h05
  4. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  5. Ajouter un enregitrement a une table vide en VBA avec access
    Par Mateache dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/01/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo