Condition Non prise en compte avec le Else

Bonsoir,

Je viens vers vous j'ai un petit souci, j'ai une condition qui n'est pas vérifier avec le else, mais qui fonctionne sans le else, comme si il y avait un conflit, je séche malgrès pas mal de test et de changement

Voici le code avec un if avec iif c'est pareil :

Sub Mod2()

    Const Lignes% = 110

    Dim Sh1 As Worksheet, Sh2 As Worksheet, I As Long

    Set Sh1 = Worksheets("Calcul"): Set Sh2 = Worksheets("Calc")

    For I = 2 To Lignes

        Select Case Sh2.Range("A1")

            Case "YOY"
                If Sh1.Cells(I, 1) = "P-YOY-01" Then Sh2.Cells(11, 10) = Sh1.Cells(I, 8) Else Sh2.Cells(11, 10) = "NA"

        End Select
    Next I

End Sub

Deuxième variante avec le code va directement dans le case else :

  Sub Mod()

    Dim I As Long, FeuilCalul As Worksheet, FeuilCalc As Worksheet

    Set FeuilMapC = Worksheets("Calcul"): Set FeuilCalc = Worksheets("Calc")

    Application.ScreenUpdating = False

    'I = Range("A" & Rows.Count).End(xlDown).Row

    For I = 2 To 110

        Select Case FeuilCalc.[B2]

            Case "YOY"

                Select Case FeuilMapC.Cells(I, 1)

                    Case "P-YOY-01": FeuilCalc.Cells(11, 7) = FeuilMapC.Cells(I, 8)

                    Case Else
                        Cells(11, 7) = 0

                End Select

        End Select
    Next I

    Application.ScreenUpdating = True

End Sub

J'essayerai de fournir un fichier quand il sera anonyme, mais si vous avez des idées de test

Merci à vous

Bonjour Shenzar,

Je n'ai pas vraiment d'idée mais je me permets de répondre, en tout cas sur ton premier essai. C'est à se demander si le else relatif au if n'est pas interprété comme le else du case, en l'absence de case else. Voici donc un essai :

Sub Mod2()

Const Lignes% = 110
Dim Sh1 As Worksheet, Sh2 As Worksheet, I As Long

Set Sh1 = Worksheets("Calcul"): Set Sh2 = Worksheets("Calc")

For I = 2 To Lignes
    Select Case Sh2.Range("A1").value
        Case "YOY"
            If Sh1.Cells(I, 1) = "P-YOY-01" Then Sh2.Cells(11, 10) = Sh1.Cells(I, 8) Else Sh2.Cells(11, 10) = "NA"
        case else
    End Select
Next I

End Sub

Et un autre qui parait plus approprié compte tenu du besoin (autant réserver les case pour des conditions multiples) :

Sub Mod2()

Const Lignes% = 110
Dim Sh1 As Worksheet, Sh2 As Worksheet, I As Long

Set Sh1 = Worksheets("Calcul"): Set Sh2 = Worksheets("Calc")

For I = 2 To Lignes
    if Sh2.Range("A1") = "YOY" then
        If Sh1.Cells(I, 1) = "P-YOY-01" Then Sh2.Cells(11, 10) = Sh1.Cells(I, 8) Else Sh2.Cells(11, 10) = "NA"
    end if
Next I

End Sub

C'est plus court en plus

Cdlt,

Bonsoir,

Merci à toi

Désoler effectivement, le select case est une condition multiple en fonction d'un clique sur un bouton il va récupérer des datas en JSON sur un serveur et le transformer et coller sous forme de tableau, ensuite arrive le choix multiples

Le code ici est un petit bout, le réelle est dis fois plus long ^^

Merci pour ton code je le sauvegarde, mais hélas il va sur le else aussi et affiche "NA"

Je vais refaire des test sur un fichier anonyme avec plusieurs tableaux avec texte et nombre

Pourtant le code à l'air cohérent, si j'enleve le else sa marche, si je le mets sa ne marche pas

D'accord, c'est pas pour le plaisir d'utiliser des select case .

Donc, si je comprends bien, A1 de la feuille 2 vaut "YOY".

Et même quand Ai de la feuille 1 vaut "P-YOY-01", il va sur le Else et renvoie "NA" en feuille 2 ?

C'est étrange... En dernier recours, j'essaierais de réécrire cette ligne comme ça pour lever le doute mais je ne pense pas que ça puisse jouer :

Select Case Sh2.Range("A1").value
    Case "YOY": _
        If Sh1.Cells(I, 1) = "P-YOY-01" Then: Sh2.Cells(11, 10) = Sh1.Cells(I, 8): Else: Sh2.Cells(11, 10) = "NA"
    case else
End Select

Cdlt,

Il va toujours dans le case else ,ou le else doit y avoir un truc qui m'échappe ou trouver une autre façon de faire

Je vais peut être passer par la fonction vlookup en disant si le texte n'est pas alors "NA"

J'ai créer un new fichier pour faire des test

cordialement

7laboratoire.xlsm (54.57 Ko)

Bonjour,

tu boucles sur toutes les lignes et tu écris toujours dans la même cellule, tu retrouves donc dans cette cellule la valeur qui correspond au test de la dernière ligne. Je suppose que tu devrais sortir de ta boucle dès que tu as trouvé la valeur que tu cherchais et mis à jour la cellule en conséquence.

Bonjour,

Tu veux dire la cellule cells(X, 1) ? je suis dis que j'avais un souci dans la boucle, en essayant d'en sortir une fois le texte trouver et sa valeur

Sinon je suis partis sur une autre méthode qui fonctionne pas mal, sa m'a pris quelques heures de lectures sur stackoverflow

Sub RefreshSelectCase()

Dim Sh1 As Worksheet, Sh2 As Worksheet, Rng As Range, Dl as Long

Dl = Range("C" & Rows.count).End (xlDown).row
Set Sh1 = Worksheets("Calc"): Set Sh2 = Worksheets("Calcul")
Set Rng = Sh2.Range("A1:C" & Dl)

Application.ScreenUpdating = False

Select Case Sh1.Range("B2").Value
    Case "YOY1"
        Sh1.[B5] = ChercheMetrics("P-YOY-01", Rng)
        Sh1.[C5] = ChercheMetrics("P-YOY-02", Rng)

End Select

Application.ScreenUpdating = True

End Sub

Function ChercheMetrics(ValeurCible As String, Optional Tableau As Range, _
Optional ColonneCible As Integer = 3, Optional ValeurProche As Boolean = 0)

ChercheMetrics= "NA"

On Error Resume Next

ChercheMetrics = Application.WorksheetFunction.VLookup(ValeurCible, Tableau, ColonneCible, ValeurProche)

End Function

bonjour,

Tu veux dire la cellule cells(X, 1) ?

non je vois pas de cells(X,1) dans les 1ers codes que tu as fournis, je veux dire cells(11,10) (mod) et cells(11,7) (mod2)

Bonsoir,

Je vois ce que tu veux dire, effectivement après quelques test les deux conditions sont vérifiées en même temps, si je mets des cellules différente, la cellule de droit prends la condition if et celle de gauche prends la condition else

image

Un truc qui m'échappe encore

Je vais regardé ça de plus près, pour le moment j'ai fais autrement et sa marche beaucoup mieux

Merci à vous !

Rechercher des sujets similaires à "condition prise compte else"