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 :

Problème transfert si une condition vide ou nulle [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Problème transfert si une condition vide ou nulle
    Bonjour,

    Par rapport au contenu de 4 cellules, par macro ma feuille récupère des données d'une autre feuille (BD). En renseignant les 4 cellules, je ne récupère qu'une partie bien précise des données (ce code fonctionne bien si les 4 cellules contiennent une donnée). Pour des besoins de calcul, j'ai voulu récupérer plus de données en laissant vide la 4ème cellule [Val4=.Range("C4")]. C-à-d récupérer les données suivant 3 conditions au lieu de 4. Et là, j'ai été surpris, ma feuille est restée vide. Comment faire?
    voici mon code:
    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
    With MaFeuille
     
         Val1 = .Range("H4")        
         Val2 = .Range("F1")        
         Val3 = .Range("C1")        
         Val4 = .Range("C4")        
     
        For I = 1 To lastlig - 1
     
            If Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3 And Tb(I, 5) = Val4 Then
     
                j = j + 1
     
                ReDim Preserve Res(1 To 14, 1 To j)
     
                Res(1, j) = j       
                Res(2, j) = Tb(I, 7)    
                Res(3, j) = Tb(I, 8)    
                Res(4, j) = Tb(I, 9)   
                Res(5, j) = Tb(I, 10)   
                Res(6, j) = Tb(I, 11)   
                Res(7, j) = Tb(I, 12)    
                Res(8, j) = Tb(I, 13)    
                Res(9, j) = Tb(I, 14)    
                Res(10, j) = Tb(I, 15)  
                Res(11, j) = Tb(I, 16)   
                Res(12, j) = Tb(I, 17)   
     
            End If
     
        Next I
     
        lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
        If lastlig > 8 Then .Range("A8:M" & lastlig).Clear
        If j > 0 Then .Range("A8").Resize(j, 14) = Application.Transpose(Res)
     
    End With
    Je vous remercie par avance pour votre aide.
    Dernière modification par cathodique ; 22/04/2013 à 09h51. Motif: omission

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Je ne suis pas du tout sûr d'avoir compris ce que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3 Then

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu peux inclure la condition "Cellule vide" dans ton test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With MaFeuille
     
         Set Val1 = .Range("H4")
         Set Val2 = .Range("F1")
         Set Val3 = .Range("C1")
         Set Val4 = .Range("C4")
     
        For I = 1 To lastlig - 1
     
            If (Tb(I, 1) = Val1 Or IsEmpty(Val1)) And _
            (Tb(I, 3) = Val2 Or IsEmpty(Val2)) And _
            (Tb(I, 4) = Val3 Or IsEmpty(Val3)) And _
            (Tb(I, 5) = Val4 Or IsEmpty(Val4)) Then
    Cordialement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Messieurs Bonjour,

    Daniel.C, ce que tu me proposes je l'ai déjà fait, c-à-d que je supprime la 4éme condition.

    gFZT82, j'ai testé ton code mais ça ne donne rien.

    Je vous remercie tous les deux. c'est pour la condition que je suis bloqué car je ne manipule pas bien le VBA.

    La condition est juste pour la cellule C4 qui contient Val4.

    Donc pour récapituler, si C4 est vide, donc la récup se fera avec Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3 (3 conditions)

    et si C4 est non vide, alors la recup se fera avec Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3 And Tb(I, 5) = Val4 (4 conditions)

    Je vous précise que Val1, Val2 et Val3 seront dans tous les cas non vides, ce n'est que pour Val4 qui pourrait être vide ou contenant un texte.

    Encore merci.

    Cordialement,

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je ne vois pas où tu colles les variables Valx ou les cellules correspondantes.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je suis débutant, je voudrais trouver une solution à mon problème. d'après moi et il fort possible que je sois dans l'erreur.

    je voudrais faire à peu près ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If IsEmpty(Range("C4")) then Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3
     
    If Not IsEmpty(Range("C4")) Then Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3 And Tb(I, 5) = Val4
    enfin il y a quelque chose qui cloche, car l'extraction des données se fait sur un If tb(I, 1)= les conditions (dans mon code initial).

    Conclusion, je suis perdu.

    Merci beaucoup.

    Cordialement,
    Dernière modification par AlainTech ; 06/05/2013 à 21h05. Motif: Balises [code]

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Ce qui se traduit par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tb(I, 1) = Val1
    Tb(I, 3) = Val2
    Tb(I, 4) = Val3
    If IsEmpty(Range("C4")) Then
        Tb(I, 5) = Val4
    End If

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci Daniel,

    entre-temps j'avais trouvé cette solution (il y avait in "IF" qui me gênait, que j'ai résolu))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If IsEmpty(Range("C4")) Then Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3
    If Not IsEmpty(Range("C4")) Then Tb(I, 1) = Val1 And Tb(I, 3) = Val2 And Tb(I, 4) = Val3 And Tb(I, 5) = Val4
    Mais je vais opter pour ton code. je te remercie beaucoup pour ton aide.

    cordialement,

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

Discussions similaires

  1. Meilleur moyen de remplacer une chaine vide par null
    Par ToniConti dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 02/09/2013, 10h11
  2. [JNDI] Problème pour insérer une valeur vide
    Par felix79 dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 20/10/2011, 11h37
  3. [MySQL] Remplacer une chaîne vide par NULL
    Par whoaloic dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/05/2011, 14h29
  4. [Débutant] [break] Problème sur une condition vide
    Par pedrosanchau dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/01/2009, 16h45
  5. [INSERT / UPDATE] Remplacer une valeur vide par NULL
    Par jissay dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 28/09/2006, 14h15

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