Probleme VBA excel

Résolu
titi875 Messages postés 10 Statut Membre -  
titi875 Messages postés 10 Statut Membre -
Bonjour,

Je viens vers vous car je suis en train de faire un code en VBA et j'ai un petit soucis. Je vais essayer d'être claire mais ca ne va pas etre facile :
Dans un premier classeur, j'ai des cellules où sont récupérées des dates d'un autre onglet par l'intermédiaire d'une formule.
Dans mon second classeur je veux récupérer cette date (en format dd/mm/yyyy) et là est mon souci :
- si il y a une valeur dans le premier classeur, je n'ai pas de soucis
- s'il n'y a pas de valeur il m'écrit 12/30/1899 dans ma cellule de destination
Moi je voudrais que s'il n'y a pas de date d'indiquer dans le premier classeur il n'écrive rien dans le deuxième
Voila un extrait de mon code :

If WS.Name = "toto" Then `Premier classeur
Sheets("toto").Activate

DateFPBE = Format(Range("B" & 13), "mm/dd/yyyy")
DateFPind = Format(Range("B" & 21), "mm/dd/yyyy")

With master.Worksheets(Nom) `Classeur de destination
.Cells(l, 5) = DateFPBE
.Cells(l, 6) = DateFPind

Merci d'avance pour votre aide

3 réponses

  1. Neliel Messages postés 7012 Statut Contributeur 1 702
     
    Bonjour,

    Pourquoi ne teste tu pas la date récupérée:

    Si la cellule est vide alors :

    .Cells(l,5)=""

    Désolé, je ne me souviens plus trop de la syntaxe VBA...
    0
    1. titi875 Messages postés 10 Statut Membre
       
      Bah parce que en fait je n'ai pas que deux dates j'en ai une vingtaine ou je ne peux pas faire de boucle alors ca va etre un peu lourd!! a moins qu'il y ai des moyens simples...
      0
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    Alors fait un petit test avant le traitement avec la fonction IsEmpty

    Sub test()
    Dim date1 As Date
    For i = 5 To 8   ' une serie de date et cellules vides en A5:A8
        If Not IsEmpty(Cells(i, 1)) Then
    
            date1 = Format(Cells(i, 1), "dd/mm/yyyy")
            Cells(i, 3).Value = date1 ' on réécrit  en c5 c8
        Else
        Cells(i, 3).Value = ""
        End If
    Next
    
    
    End Sub
    0
    1. Neliel Messages postés 7012 Statut Contributeur 1 702
       
      C'est à peu de chose près ce que je lui avais proposé sauf que moi, je me souvenais plus du code... lol!
      0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    @Neliel
    Je l'avais compris comme ça!

    il y a d'autres solutions mais le plus simple reste de contrôler
    la cellule avant d'en faire une affectation à une variable.
    cela evite les boucles et les tests en série.

    Je donne un exemple pas la solution toute faite.
    pour
    DateFPBE = Format(Range("B" & 13), "mm/dd/yyyy")
    DateFPind = Format(Range("B" & 21), "mm/dd/yyyy")
    je ferai :

    if not isempty(Range("B" & 13)) then....
    0
    1. titi875 Messages postés 10 Statut Membre
       
      Ok Merci a tous!!!
      Je vais faire comme cela pour l'instant mais si quelqu'un voit une autre solution plus simple je suis preneuse (parce que vu le nombre de date le code va etre un peu lourd...
      0
    2. Neliel Messages postés 7012 Statut Contributeur 1 702
       
      Avec une boucle, ça ne sera pas lourd...
      0
    3. titi875 Messages postés 10 Statut Membre
       
      Alors finalement je viens de tester et ca ne fonctionne pas!
      Voila ce que j'ai ecrit:
      If Not IsEmpty(Range("B" & 13)) Then
      .Cells(l, 5) = DateFPBE
      End If
      et j'ai toujours en résultat 12/30/1899 a la place de la bonne date...
      0
    4. Neliel Messages postés 7012 Statut Contributeur 1 702
       
      Les cellules sans dates sont-elle bien vides ?
      0
    5. titi875 Messages postés 10 Statut Membre
       
      Et il me met que Range("B"&13)=00:00:00 donc pour lui c'est pas vide
      0