Ligne incorrect, mais ou?

Résolu
Bonjour,

VOila, je viens a vous pour vous demander votre aide. Je ne comprend pas ou ai-je fait une erreur dans le code suivant :

Sub present()

Dim i As Integer
Dim j As Integer

For i = 16 To 152 Step 8
j = i + 7
If Sheets("relevé").Cells(i, 2).Text = "" Then
Rows(i & ":" & j).Select
Selection.EntireRow.Hidden = True
End If
Next
End Sub


Il ne veux pas me masquer les colonnes. j'ai fiat plusieur test, et apparement, il ne comprend pas cette ligne la:

If Sheets("relevé").Cells(i, 2).Text = "" Then

Quelqu'un saurait pourquoi? :s

Merci d'avance,

Ctesias

20 réponses

  1. tout simplement que pour effectuer un test il faut un double égal (==)
    Le simple égal est une attribution de variable, donc normal qu'il comprenne pas en fait :)
    Pour lui tu fais aucune opération dans ton If, juste une attribution

    If Sheets("relevé").Cells(i, 2).Text == "" Then
    1. j'ai bien tester, c'est comme en C, le probème, c'ets qu'il me met: "erreur de compilation: expression attendue" et me surligne le deuxieme "=".
      1. Je suis pas sur mais c'est peut être ton .Text qui gène.

        Maintenant à ta place je mettrais une vérification d'existence plutot que =""
        J'ai plus le nom en tête mais pour faire une comparaison avec le C, ça donnerait dans le genre

        If !(Sheets("relevé").Cells(i, 2).Text) Then
        1. EDIT: je viens de faire quelques recherches, regarde du coté de la fonction IsNull
        2. J'ai bien essayé avec la fonction isnull:

          If IsNull(Sheets("relevé").Cells(i, 2).Value) Then

          mais rien ne se produit...
      2. ba j'ai utilisé un .value aussi, mais ca ne marche pas.

        If !(Sheets("relevé").Cells(i, 2).Text) Then ne marche pas, il me dis avec des crochets :
        If ![Sheets("relevé").Cells(i, 2).Text] Then
        Mais une erreur apparait:

        "Erreur de compilation: reference incorrct ou non qualifié"

        Que pasa? ^^'

        je ne comprend pas la...
        1. C'est étonnant qu'avec IsNull ça marche pas... la je dois te dire que si cette fonction marche pas je sèche un peu
          1. Bienvenu au club ;)

            C'est quand meme bizarre, parce que la, je commence a avoir l'impression qu'il detecte pas les cellules vides...
            1. J'ai trouvé! j'ai mis le temps mais j'ai trouvé.

              dans ton premier post, tu mets:
              If Sheets("relevé").Cells(i, 2).Text = "" Then

              Or je viens de tester avec un cas en dur, il faut mettre Value à la place de Text et ça fonctionne. Précisément, en test j'ai écrit dans un classeur vide:

              If Sheets("Feuil1").Cells(2, 2).Value = "" Then
              MsgBox "dommage"
              End If

              Et ça a fonctionné. Par contre question existentielle et dont je ne suis pas sur que ça ait de l'influence, ta macro du l'écrit ou? je veux dire dans quelle feuille?
              1. Euh, dans un module. Ca peut influer?

                Et pour moi If Sheets("Feuil1").Cells(2, 2).Value = "" Then
                ne marche pas, j'avais deja essayé. Alors est-ce que ca viens de mes cellules ou il y a des formules mathématique dedans?
                1. ça peut venir de la, réessaye de ton coté en ouvrant un nouveau classeur et en copiant le If que j'ai fait.
                  Après ce que je voulais dire pour savoir ou tu écrivais ta macro, c'était plutot si tu l'écrivait dans une feuille du document ou dans Thisworkbook.
                  J'ai testé en écrivant dans ThisWorkBook, je vais tester dans une feuille la
                  EDIT: ça change rien la page ou est écrite la macro
                  1. ta macro dans un autre classeur fonctionne.. Cela doit venir des formules alors.

                    Le truc, c'est que mes formules sont sencés afficher une valeur d'une autre feuille...
                    1. tu as essayé d'avancer en pas à pas dans ta macro? tu vas peut être voir où ça coince et pourquoi ça ne rentre pas dans ton If
                    2. je suis pas un super fan du pas a pas, je ne comprend pas comment il fonctionne
                  2. question con, tu es sur du nom de la feuille où tu fais tes tests? Essaye un nom sans accents aussi, des fois ça peut faire bugger
                    1. oui je suis sur du nom ;), et non, je prefere pas changer le nom, parce que sinon, je dois rechanger loes formules d'une quinzaine de feuille :s
                      1. j'ai changé le code, ca marche mieux, masi pas completement:

                        Sub present()

                        Dim i As Integer
                        Dim j As Integer
                        Dim k As Integer

                        k = 16
                        For i = 4 To 22
                        If Sheets("personnels").Cells(i, 2).Value = "NON" Then
                        j = k + 7
                        Sheets("relevé").Rows(k & ":" & j).Select
                        Selection.EntireRow.Hidden = True
                        End If
                        k = k + 8
                        Next

                        End Sub

                        le problème, c'est qu'il me reste à la fin, un oui, non, non...
                        1. Bon au moins on sait ou est le souci, c'est ton If qui déconne, continuons à isoler petit à petit pour essayer de trouver l'erreur.
                          Il faut donc tester séparément le nom de la feuille (en mettre une autre qui existe) et tenter avec une valeur précise pour i.
                          Finalement, tester ces deux choses en même temps si il y a toujours souci
                          1. oui, mais j'ai honte de dire l'erreur que j'ai faite... une erreur toute bete...

                            le code est celui la :

                            Sub present()

                            Dim i As Integer
                            Dim j As Integer
                            Dim k As Integer

                            k = 16
                            For i = 5 To 22
                            If Sheets("personnels").Cells(i, 2).Value = "NON" Then
                            j = k + 7
                            Sheets("relevé").Rows(k & ":" & j).Select
                            Selection.EntireRow.Hidden = True
                            End If
                            k = k + 8
                            Next

                            End Sub

                            Mais l'erreur etait For i = 4 To 22 au lieu de For i = 5 To 22 ...

                            LA HONTE xD

                            Merci quand meme =)
                            1. LOL, je pouvais vouloir t'aider autant que je veux j'étais pas rendu XD