Excel - VBA - StrComp(Mid(CStr(Range()))) Problème

Résolu
HugoHerbomez Messages postés 59 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Configuration: Windows 10 / Excel 2013

Je me permet d'écrire mon second problème de la journée, je suis dans un switch case et je ne sais pas comment tout fonctionne, surtout que j'ai tout empilé comme un GROS BARBARE :D Quelqu'un aurait-il l'obligeance de m'éclairer sur la solution? Afin que j'ai les résultats attendus, j'entends par là les résultats que les fonctions devraient normalement me donner !

Dim anneeS As String

 With ActiveSheet
    Select Case .Name
       Case "Traitement Biocide"
           i = 12
          .Range("N18") = CStr(.Range("B" & i & "").Value)
          .Range("N19") = Mid(CStr(.Range("B" & i & "").Value), 7, 4)
          .Range("N20") = StrComp(Mid(CStr(.Range("B" & i & "").Value), 7, 4),anneeS)


Et voici respectivement mes résultat; je ne comprend vraiment pas pourquoi Cstr me change le mois et le jour, pourquoi Mid prend du plaisir à me donner quelque chose que je ne veux pas, et pourquoi StrComp me sort autre chose que -1, 0 ou 1 !

B12 et B13 = 10/01/2017
J'ai fusionné ces deux cellules pour un document plus épuré, donc je ne changerai pas cette fusion !

N18 : 01/10/2017 Je voudrais 10/01/2017
N19 : 09/07/1905 Je voudrais 2017
N20 : 00/01/1900 Je voudrais que anneeS est égale à 2017 !

Merci beaucoup,
Cordialement,
Hugo.

1 réponse

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonsoir Hugo, bonsoir le forum

    peut-être comme ça :

    With ActiveSheet
    Dim d As String
        Select Case .Name
           Case "Traitement Biocide"
               I = 12
               d = CStr(.Range("B12").Value)
              .Range("N18") = CDate(d)
              .Range("N19") = Mid(d, 7, 4)
              .Range("N20") = StrComp(Mid(d, 7, 4), anneeS, 1)
        End Select
    End With


    Mais en N20 tu auras toujours -1, 0 ou 1 (regarde l'aide de la fonction CtrComp). Je ne comprends pas ce que tu veux dire par Je voudrais que anneeS est égale à 2017 !
    1
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      Un peu different mais ca se rejoint
      .Range("N18") = CDate(.Range("B" & i & ""))
                .Range("N19") = Year(CDate(Range("B" & i & "")))


      Et comme vous le strcomp, comprends pas trop vu que AnneS pas affectee
      0
    2. HugoHerbomez Messages postés 59 Statut Membre 2
       
      Bonjour Messieurs,
      je vous remercie pour l'aide apportée,

      Mais en N20 tu auras toujours -1, 0 ou 1 (regarde l'aide de la fonction CtrComp). Je ne comprends pas ce que tu veux dire par Je voudrais que anneeS est égale à 2017 !
      Justement mon résultat n'est pas le bon, je recommence tout mon problème avec vos mise à jour !

      Alors j'ai ce code :

      Dim dateCopieD As Date
      Dim i As Integer
      Dim dateS, moisS, anneeS, feuilleActive, dateCopieS As String
          dateS = TextBox1.Value
          If Len(dateS) = 4 Or (Len(dateS) = 7 And Mid(dateS, 3, 1) = "/") Then
              If Len(dateS) = 4 Then
                  anneeS = dateS
              Else
                  moisS = Mid(dateS, 1, 2)
                  anneeS = Mid(dateS, 4, 4)
              End If
                  .
                  .Code pas important
                  .
                  With ActiveSheet
                     Select Case .Name
                        Case "Traitement Biocide"
                             i = 12
                             dateCopieS = CStr(.Range("B12").Value)
                             dateCopieD = CDate(.Range("B" & i & "").Value)
                            .Range("N16") = dateCopieD
                            .Range("N17") = dateCopieS
                            .Range("N18") = Year(dateCopieD)
                            .Range("N19") = Year(CDate(.Range("B" & i & "")))
                            .Range("N20") = StrComp(CStr(Year(dateCopieS)), anneeS)
                            While Not IsEmpty("B" & i & "") Or StrComp(CStr(Year(dateCopieS)), anneeS) = 1
                                  i = i + 2
                            Wend
      


      Et sur Excel j'ai les résultats suivant :
      N16 : 10/01/2017 --> Là on est d'accord
      N17 : 01/10/2017 --> Là le mois et le jour sont inversé mais ça passe
      N18 : 09/07/1905 --> Là J'ai pas l'année je sais pas pourquoi
      N19 : juil-05 --> Là J'ai pas l'année je sais pas pourquoi
      N20 : 00/01/1900 --> Et ici j'ai tout sauf un 1, un 0 ou un -1

      Donc ça ne va pas du tout !!!!! Sachant que ma cellule B12 et B13 sont fusionnés et qu'elle est égale à '10/01/2017'
      De plus mes trois dernières lignes de code permettent d'incrémenter ma recherche de ligne en fonction de l'année entrée dans une texteBox, anneeS est donc déjà un String, je pense que le problème n'est pas de ce côté.
      En gros tant que l'année entrée (anneeS) est plus petite que l'année dans la cellule, je passe à la suivante et ainsi de suite, c'est pour cela que je fait i = i +2, vu que mes cellules sont fusionnées 2 par 2 sur la colonne.

      Pour information Les opérations de N16 à N20 sont juste des test, elles ne sont pas importante à mon code, c'est juste pour vous expliquer les résultat et les potentielles zones de problème(s).

      Voilà :D

      Mis à jour -----> J'ai fait la même opération sur N22,N23,N24,N25 et N26 et j'ai les bon résultats cette fois ci je ne comprend rien...
      0
    3. ThauTheme Messages postés 1564 Statut Membre 160 > HugoHerbomez Messages postés 59 Statut Membre
       
      Re,

      Pour éviter de tourner en rond, je pense qu'un fichier joint est nécessaire... Regarde du coté de https://www.cjoint.com/ (ou d'autres il y en a plein).
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > HugoHerbomez Messages postés 59 Statut Membre
       
      Bonjour,

      E si vous mettiez votre fichier a dispo, ce serait plus simple, vu que vous ne mettez a chaque fois qu'un morceau du puzzle

      dans une texteBox, anneeS
      Ah Oui, mais dans votre code elle est ou la valeur de cette textbox?

      De plus
      N17 : 01/10/2017 --> Là le mois et le jour sont inversé mais ça passe
      Normal puisque nous vous avons donne ce qui marche et vous utilisez ce qui ne marche pas!!!!!!!!
      0
    5. HugoHerbomez Messages postés 59 Statut Membre 2
       
      C'est bon en faite... je ne comprend absolument pas pourquoi mais sur N16:N20 j'avais des résultats différents que sur N22:N26... Bref le sujet est résolu pour le coup.

      Mais vos fonctions de départ m'ont aidé à améliorer mon code, merci beaucoup!
      0