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 :

Une cellule de valeur '#N/A' ne supporte pas un test pour savoir si elle est vide


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Points : 45
    Points
    45
    Par défaut Une cellule de valeur '#N/A' ne supporte pas un test pour savoir si elle est vide
    Bonjour,

    Voici mon problème : Le code suivant ne veut pas fonctionner quand je tombe sur une cellule (i,46) qui est en erreur (valeur "#N/A") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Iserror(Cells(i,46))=True And Cells(i,46) <> "" then
    [blabla]
    Endif
    End Sub
    En effet, il semblerait que vba ne tolère pas que je fasse de test sur une cellule #N/A. Même le code suivant ne marche pas :
    If Cells(i,46) <> "" then
    Ou le code suivant : If Cells(i,46) = "" then

    Dans tous les cas, vba écrit qu'il y a incompatibilité de type.
    POurquoi ?
    Comment pourrais-je m'en sortir ?

  2. #2
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    je ferais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If not Iserror(Cells(i,46)) then
        if Cells(i,46) <> "" then
            [blabla]
        End If
    End If
    Il faut d'abord tester si c'est en erreur avant de tester le reste
    dans ton code, tu demande si c'est en erreur ET si c'est différent de "".

  3. #3
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Points : 45
    Points
    45
    Par défaut
    Bonjour mayekeul,

    Merci de m'avoir répondu tout dabord.
    J'avais également pensé à ta solution, mais je en suis pas certain que cela marche avec mon code en entier. En effet, j'ai déjà plusieurs If imbriqués...
    Le voici en entier :
    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
     
    For i = 1 To 100
        If Not IsError(Cells(i + 1, 56)) And Cells(i + 1, 56) <> "" Then
            Cells(i + 1, ColDestination) = Cells(i + 1, 56)
        Else
            If Not IsError(Cells(i + 1, 57)) And Cells(i + 1, 57) <> "" Then
                Cells(i + 1, ColDestination) = Cells(i + 1, 57)
                Else
                    If Not IsError(Cells(i + 1, 58)) And Cells(i + 1, 58) <> "" Then
                        Cells(i + 1, ColDestination) = Cells(i + 1, 58)
                        Else
                            If Not IsError(Cells(i + 1, 55)) And Cells(i + 1, 55) <> "" Then
                            Cells(i + 1, ColDestination) = Cells(i + 1, 55)
                            End If
                    End If
            End If
        End If
    Next i

    L'idée était de récupérer en priorité la valeur de la colonne 56 en priorité, puis 57 si la colonne 56 n'était ni en erreur ni vide, puis 58 si... (et ainsi de suite).
    Seulement, si je mets deux if, je ne vois pas quel Else je dois utiliser pour tester la colonne d'après

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je vois ;o)

    Alors pour donner une idée de la marche à suivre dans ce cas

    on procedera plus comme ceci ( enfin moi je procederai plus comme ça )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for i=1 to 100
        for j=56 to 10000
            if not iserror(cells(i+1,j)) then
                if cells(i+1,j)<>"" then
                    cells(i+1,coldestination)=cells(i+1,j)
                    exit for
                end if
            end if
        next j
    next i
    j'ai pas testé... mais c'est l'idée

  5. #5
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Points : 45
    Points
    45
    Par défaut
    Bonjour mayekeul,

    Tu as peut-être mal lu mon code (ce sont des +1, non des j que j'utilise dedans).
    Le problème ne vient pas de la boucle for, mais des If imbriqués (finalement, la priorisation de mes colonnes ne se fait que sur quatre colonnes, donc je n'avais pas besoin d'utiliser une boucle for).

    Peut-être est-ce moi aussi qui ait mal compris ce que tu me proposais.

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    alors , le j, c'est le numéro de ta colonne

    l'idée que je te propose est :
    on enumere de la colonne 56 à la colonne x (valeur de l'énumération est j)
    on teste la cellule dans la colonne j
    dès que le test est positif, on sort de l'énumération

    ainsi, on ne réalise qu'une même série de test sur le nombre de colonne désiré
    et le code est plus clair...
    pas moi peut-être par contre

  7. #7
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 81
    Points : 45
    Points
    45
    Par défaut
    Bonjour mayekeul;

    C'est une bonne idée, à la seule nuance que la conne 55 est celle que j'ai le moins envie de prendre, ... mais je peux toujours la changer de place pour la mettre en colonne 59 à la limite.

    Je vais tester ton code,
    Merci !

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    dans ce cas, je procederais plus comme ça

    je prends la valeur de la colonne 55
    ensuite je debute l'énumération.
    ainsi, si elle n'aboutis pas, pas besoin de faire une condition supplémentaire et si l'énumération abouti, ben elle remplace la valeur de la colonne 55

    de rien et bonne chance

  9. #9
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Si t'as une erreur, c'est que c'est différent de "". Par définition, la deuxième condition est un peu bête, non ?

    Il faut d'abord tester si c'est en erreur avant de tester le reste
    dans ton code, tu demande si c'est en erreur ET si c'est différent de "".

  10. #10
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    c'est pour ça que le code dit:


Discussions similaires

  1. [AC-2007] Test d'une valeur pour savoir si elle est nulle
    Par glooping dans le forum IHM
    Réponses: 2
    Dernier message: 01/10/2009, 11h26
  2. Trouver dans une cellule toutes valeurs differentes
    Par lilp1 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 25/05/2009, 13h53
  3. tester une chaine pour savoir si elle est numérique ?
    Par _MattU_ dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/06/2008, 15h47
  4. Réponses: 3
    Dernier message: 27/05/2007, 15h40
  5. Réponses: 3
    Dernier message: 13/06/2006, 16h36

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