Divers soucis de code VBA notamment date et importation fichier texte

Résolu
pipoune755 - 27 juin 2013 à 14:06
 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.

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2013 à 18:33
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.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2013 à 15:13
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.
0
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 >=
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2013 à 18:20
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

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
0
Rejoignez-nous