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 :

[VBA-E][debutant]Tester des cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut [VBA-E][debutant]Tester des cellules
    Bonjour

    J'ai une colonne remplie de date (jj/mm/aaaa hh:mm). Je teste cellule par cellule. Lorsque la date de la cellule est supérieure à la date référence, je met 1 dans la colonne suivante sur la meme ligne, sinon je met 0

    Voici le bout de code que je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For Each c In Worksheets("LISTE").Range("A:A")
        Range("B:B").Select
        If c.Value > Date Then
     
            ActiveCell.FormulaR1C1 = "1"
        Else
            ActiveCell.FormulaR1C1 = "0"
        End If
    Next c
    Ceci ne marche pas, pouvez vous m'aider?
    Je ne sais pas comment faire bien et rapide.

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each c In Worksheets("LISTE").Range("A:A")
        If c.Value > Date Then
            c.Offset(,1).Value = 1
        Else
            c.Offset(,1).Value = 0
        End If
    Next c

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 557
    Par défaut
    Essaie çà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim i As Integer
    i = 1
     
    Worksheets("LISTE").Activate
     
    While Trim(Cells(i, 1).Value) <> ""
        Cells(i, 2).Value = 0
        If (Cells(i, 1).Value > dte) Then Cells(i, 2).Value = 1
        i = i + 1
    Wend
    Ainsi, il va boucler sur toute tes cellules de la première colonne jusqu'à ce qu'il trouve une cellule vide

    Si tu veux boucler sur les 655536 ligne, tu remplace le test apr while i<=655536, voilà c'est tout

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each c In Worksheets("LISTE").Range("A:A") ' là c'est bon
        Range("B:B").Select ' ici tu lui dis de selectionner la colonne B entiere
        If c.Value > Date Then ' ici, tu ne lui dis pas ce qu'est ce date
     
            ActiveCell.FormulaR1C1 = "1" ici activecell n'est autre que la cellule en colone A
        Else
            ActiveCell.FormulaR1C1 = "0"
        End If
    Next c
    en gros c'est pas bon
    pour l'exmple suivant, j'ai supposé que la colonne A contient les dates référence, la colonne B la date a tester, et tu écris le resultat dans la colone C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim C as variant
    For Each c In Worksheets("LISTE").Range("A:A") 'pour chaque c dans feuille ("liste").plage(A:a)
    if c.offset(0,1) > c then ' si c.décaler(0 en ligne, 1 en colonne)>c alors
    c.offset(0,2) = 1' c.décaler(0 en ligne, 2 en colonne) = 1
    else 'sinon
    c.offset(0,2) = 0' c.décaler(0 en ligne, 2 en colonne) = 0
    end if ' fin de la condition si
    next c ' passer au C suivant, refaire la boucle
    là ça marche, mais tu teste l'integralité de la colonne A, ce qui n'est pas tres bon.
    si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Worksheets("LISTE").Range("A1:A100")
    tu testes les 100 premieres cases de la colonne A et tu gagne du temps.
    voila, voila, j'espere que ça t'aura aidé a comprendre.

  5. #5
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Merci pour vos réponses et vos explications cela m'aide pas beaucoup à comprendre VBA.

    Bon le fonctionnement est à peu près bon. Sauf que lorsque la date testée est supérieure à la date référent. Au lieu de mettre 1, il garde le zéro.

    Est ce que le problème vient des types des variables ?
    (date testé : variant/Object/Range date réferent variant/String)

    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
     
    Dim fs
    Dim Seq
    Dim c As Variant
    Dim Sequence As Variant
    Dim i As Integer
    Dim j As Integer
     
    i = 0
    j=2
     
    'Sauvegarde des séquences
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set Seq = fs.OpenTextFile("Sequence.tmp", 1)
    Sequence = Array(Seq.readline, Seq.readline, Seq.readline, Seq.readline, Seq.readline, Seq.readline)
     
    'Test de la date par rapport aux dates référents
     
    Worksheets("LISTE").Activate
     
    While Trim(Cells(j, 1).Value) <> ""
        Cells(j, 2).Value = 0
        If (Cells(j, 1).Value >= Sequence(i)) Then
            Cells(j, 2).Value = 1
            i = i + 1
        End If
        j = j + 1
    Wend
     
    End Sub
    Cordialement,

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Ben, dans Sequence(i), tu as du texte et, dans tes cellules, tu as des nombres (représentant des dates).
    De plus, on ne peut pas de donner de code car on ne connaît pas le format des dates dans ton fichier texte.

    Au départ, tu nous avais fait croire que tu comparais avec la date du jour
    Maintenant, tu nous montres que ta date vient d'un fichier texte.

    Il serait bon de nous donner toute l'info en une fois, ça nous évitera de t'envoyer sur de mauvaises pistes.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    oops, dans mon explication, j'avais pas capté que date = date actuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    j'avais dis
    If c.Value > Date Then ' ici, tu ne lui dis pas ce qu'est ce date
    et effectivement comme le dis alain tech c'est la date du jour. désolé. mais bon à la fois, c'étais incongru dans ce code.

  8. #8
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Désolé je ne savais pas que Date était un mot réservé.

    Le fonctionnement est correcte avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If (Cells(j, 1).Value > CDate(Sequence(i))) Then
    Merci pour votre aide

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

Discussions similaires

  1. [XL-2010] VBA - Remplacement du contenu des cellules d'un range défini par filtre
    Par Anto_NEX dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/06/2012, 11h10
  2. [VBA] Gérer la taille des cellules lors de l'envoi de mail depuis excel
    Par Arschney dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2007, 10h58
  3. [VBA]effacer les espaces à ralonge dans des cellules
    Par repié dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/01/2006, 11h00
  4. [VBA]comptage de lignes en fonction du contenu des cellules
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2005, 11h38
  5. [VBA] [EXCEL 97] Formatage automatique des cellules
    Par plante20100 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/09/2005, 09h49

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