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

Résolu/Fermé
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - Modifié par HugoHerbomez le 24/01/2017 à 16:26
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 25 janv. 2017 à 10:35
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

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 janv. 2017 à 18:21
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
24 janv. 2017 à 18:29
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
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 25/01/2017 à 09:32
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
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017
25 janv. 2017 à 09:29
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017
Modifié par f894009 le 25/01/2017 à 09:34
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
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 25/01/2017 à 09:44
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