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 :

Non prise en compte de condition (if) dans l'éxecution d'une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Par défaut Non prise en compte de condition (if) dans l'éxecution d'une macro
    Bonjour,
    Je viens vers vous car j'ai rencontré un problème.
    En effet, j'ai une macro qui me permet de prélever des données aléatoirement avec certaines conditions.
    Cependant, la macro ne respectent pas la condition if et me renvoie des valeurs erronées.
    Ci-joint un extrait du fichier.

    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
    Sub Date_exclus()
    '
    Dim tTab
    '
    fm_MsgBoxINPUT.Show
    '
     iRow = Cells(Rows.Count, 1).End(xlUp).Row
     tTab = Range("A5:H" & iRow)
     '
     Do
     iFlag = Int(Rnd * UBound(tTab, 1)) + 1
     If Mid(tTab(iFlag, 1), 2, 2) > Range("K1") And Mid(tTab(iFlag, 1), 4, 2) > Range("K2") And tTab(iFlag, 8) = "FN " Then
     tTab(iFlag, 1) = 0
     iLig = iLig + 1
     Sheets("Feuil2").Range("A" & iLig & ":H" & iLig).Value = Range("A" & iFlag + 1 & ":H" & iFlag + 1).Value
     End If
     iFlag1 = iFlag1 + 1
     Loop Until iLig = 83 Or iFlag1 = 30000
     '
    End Sub
    merci pour votre aide .
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Comme beaucoup, je n'ouvre pas les fichiers avec macros...
    Se pourrait-il que tu compares des valeurs texte (Mid) avec des valeurs numériques ?
    Si c'est le cas, aussi bien tout mettre en String avec CStr() ou inversement avec CLng()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CLng(Mid(tTab(iFlag, 1), 2, 2)) > Range("K1") And CLng(Mid(tTab(iFlag, 1), 4, 2)) > Range("K2") And tTab(iFlag, 8) = "FN " Then

  3. #3
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut Non prise en compte de condition (if) dans l'éxecution d'une macro
    bonjour


    je pense que ce sont tes variables avec des formats différents qui causent ton problème.

    bonne journée
    Images attachées Images attachées  

  4. #4
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Par défaut
    En fait j'ai une suite de nombre et je souhaite extraire les données qui ont le deuxième chiffre supérieur à 65 et le quatrième chiffre supérieur à 5. D'où l'utilisation de Mid pour récupérer ces chiffres.
    En utilisant Cstr j'ai une erreur.

    Je ne suis pas experte en macros.
    Pour harmoniser mes formats je dois passer par vb ou le faire sur Excel ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    As-tu essayé avec CLng comme je t'ai proposé ?

  6. #6
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Par défaut
    Oui j'ai une erreur 13 : incompatibilité de type.

    J'ai essayé différente façon en scindant la macro en deux pour d'abord récupérer les valeurs numériques mais j'ai le même problème.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Essaie comme ceci
    La date a 4 chiffres et le mois 1 ou 2 chiffres; il faut donc vérifier cette séquence.
    Aussi, il faut vérifier la bonne colonne du tableau. (J'ai utilisé seulement les 2 dernières colonnes)
    Avec Rnd, il est préférable d'utiliser Randomize en début de procédure

    Par contre, je vois un bug. Il arrive que le tableau ait 0 comme 1er item et je ne vois pas pourquoi (?)
    Je vérifie donc que ce soit >0 avant d'aller plus loin

    De plus, il faut ajouter +4 et non +1 puisque tes données commencent en ligne 5

    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
    Sub Date_exclus()
       Dim tTab
     
       fm_MsgBoxINPUT.Show
     
       Randomize
     
       iRow = Cells(Rows.Count, 1).End(xlUp).Row
       tTab = Range("G5:H" & iRow).Value
     
       Do
            iFlag = Int(Rnd * UBound(tTab, 1)) + 1
            If tTab(iFlag, 1) > 0 Then
                If CLng(Mid(tTab(iFlag, 1), 4, 2)) > Range("K2") And CLng(Mid(tTab(iFlag, 1), 1, 4)) > Range("K1") And tTab(iFlag, 2) = "FN " Then
                   tTab(iFlag, 1) = 0
                   iLig = iLig + 1
                   Sheets("Feuil2").Range("A" & iLig & ":H" & iLig).Value = Range("A" & iFlag + 4 & ":H" & iFlag + 4).Value
                End If
                iFlag1 = iFlag1 + 1
            End If
        Loop Until iLig = 83 Or iFlag1 = 30000
     
        MsgBox "Terminé"
    End Sub

Discussions similaires

  1. Variable non prise en compte dans un formulaire
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2008, 15h36
  2. feuille de style non prise en compte dans un module
    Par Phenomenium dans le forum Zend Framework
    Réponses: 14
    Dernier message: 17/07/2008, 13h17
  3. [Lex] Non-prise en compte de mots compris dans d'autres
    Par L8O8L dans le forum Générateurs de compilateur
    Réponses: 1
    Dernier message: 17/03/2008, 20h18
  4. Réponses: 1
    Dernier message: 08/08/2007, 12h26
  5. Condition OR non prise en compte
    Par Thetonio007 dans le forum SQL
    Réponses: 7
    Dernier message: 08/06/2007, 17h02

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