Divers soucis de code VBA notamment date et importation fichier texte [Résolu]

- - Dernière réponse :  pipoune755 - 28 juin 2013 à 09:09
Bonjour,

Je commence à développer des petites macros sous VBA dans mon entreprise et je fais face à divers problèmes.

Notamment celui ci.
Je dois comparer 2 dates et les mettre de couleurs différentes si supérieures ou égales, ou inférieures.
Le souci est qu'elles n'ont pas le même format, donc même si la date est égale, à cause de l'heure cela la compte inférieure.

La première a le format suivant : 19/12/2011
Et la deuxième contient la date + l'heure : 06/05/2013 14:43:12
Comment faire pour ne comparer que la date?

nbcolonne2 = Sheets("Feuil2").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne2 = Sheets("Feuil2").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne2

    If Sheets("Feuil2").Cells(i, 2).Value >= Sheets("Feuil2").Cells(i,3) Then
    Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 5 'bleu

    ElseIf Sheets("Feuil2").Cells(i, 2).Value < Sheets("Feuil2").Cells(i, 3) Then
    Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 3 'rouge

    

    End If
    
Next



Dans un second temps, j'aimerai importer une quantité de fichiers textes aléatoire (qui varie selon les mois ) dans une seule feuille excel, à la suite.
Quelqu'un pourrait-il me conseiller svp ?

Je vous remercie d'avance.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Je suis presque certain de ce que tu te mélanges les pinceaux avec les signes (négatif, positif)
Voilà donc une autre méthode qui t'affranchit de cette réflexion arithmétique.
Je l'ai testée (comparaison de A1 et B1). Moi, j'ai mis des msgbox (à toi de les remplacer par ton coloriage)
Exemple, donc :
date1 = Range("a1").Value
  date2 = Range("b1").Value
  coucou = Int(date1) - Int(date2)

  Select Case coucou
    Case Is = 0
      MsgBox "même jour"
    Case Is < 0
      MsgBox "date antérieure"
    Case Is > 0
      MsgBox "date postérieure"
   End Select


Il s'agit là plus de réflexion et de logique, comme tu le constates, que de connaissance en syntaxe, hein ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Bonjour,
1)
Visual Basic retourne en jours la différence (datre1-date2) entre deux dates

Elle sont égales si cette différence est < 1
Date1 > date2 si différence >=1
Date1 < date2 si différence <= - 1
2) ta seconde question ===>> Rien à voir avec la première et n'a pas sa place ii (une seule question par discussion) ===>> ouvre une autre discussion.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci
Dans mon cas cela ne marche pas.
Cela devrait colorer ma cellule en bleu pour les dates égales mais elle les met en rouge.
Ou alors il ne prend pas en compte mon >=
Commenter la réponse de pipoune755
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Dans mon cas cela ne marche pas.

ne veut rien dire.
Montre donc le code que tu as écrit.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci

Dans mon cas cela ne marche pas.


ne veut rien dire.
Montre donc le code que tu as écrit.



Le code était au dessus, il n'avait pas changé mais je te le remets si tu veux :
nbcolonne2 = Sheets("Feuil2").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne2 = Sheets("Feuil2").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne2

    If Sheets("Feuil2").Cells(i, 2).Value >= Sheets("Feuil2").Cells(i,3) Then
    Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 5 'bleu

    ElseIf Sheets("Feuil2").Cells(i, 2).Value < Sheets("Feuil2").Cells(i, 3) Then
    Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 3 'rouge

    

    End If
    
Next



J'aimerai juste comprendre pourquoi il ne marchait pas ( sûrement une erreur de logique comme tu l'as dit ).

Mais il me semblait que mes 2 conditions >= ou < étaient correctes. ( cf code au dessus )

En tout cas merci de ton aide, cela a fonctionné du premier coup. Voici ce que ca donné si ça intéresse quelqu'un :
    date1 = Sheets("Feuil2").Cells(i, 2).Value
    date2 = Sheets("Feuil2").Cells(i, 3).Value
    coucou = Int(date1) - Int(date2)

For i = 2 To nbligne2
 
  Select Case coucou
    Case Is = 0
      Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 5 'bleu
    Case Is < 0
      Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 3 'rouge
    Case Is > 0
      Sheets("Feuil2").Cells(i, 1).Interior.ColorIndex = 5 'bleu
   End Select
       
Next
Commenter la réponse de pipoune755