Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] end if sans bloc if

Sujet résolu
    7 août 2018 à 8:10:29

    Bonjour,

    Je suis débutant en VBA, mais je bloque depuis un moment sur un problème sans doute anodin pour certain,

    j'ai regardé comment on fait une recherchev avec l'enregistreur de macro, puis j'ai ajouté une condition pour qu'elle ne s'applique que lorsque une autre cellule est vide:

    Sub test()
    
    Dim i As Long
    
    With Sheets("DataIn").Activate
    For i = 8 To 50000
    If .Cells(i, 10) = "" Then .Cells(i, 10).FormulaR1C1 = "=VLOOKUP(RC[4],VES!R2C1:R5000C23,8,0)"
    End If
    
    Next i
    End With
    
    End Sub
    


    Le soucis est le classique message "erreur de compilation end if sans bloc if", est ce que quelqu'un saurait me débloquer sur ce code?

    Merci,

    • Partager sur Facebook
    • Partager sur Twitter
      7 août 2018 à 11:48:42

      Bonjour,

      Il ne faut pas mettre de "." devant les "Cells(i, 10)" et une fois le mot clé "Then" utilisé tu dois passer à la ligne.

      • Partager sur Facebook
      • Partager sur Twitter
        7 août 2018 à 12:04:42

        ok, maintenant  il m'affiche"erreur d'exécution 13 une incompatibilité de type".

        Avec le débogage, le problème se situe à la ligne:

        If Cells(i, 10) = "" Then

        les colonnes sur lesquelles ma recherchev s'effectue sont tous au format standard, le problème vient il de là?

        -
        Edité par hypnor 7 août 2018 à 12:29:57

        • Partager sur Facebook
        • Partager sur Twitter
          7 août 2018 à 13:55:20

          Ajoute ".value" après :

          Cells(i, 10).value

          -
          Edité par Blaster13 7 août 2018 à 13:56:36

          • Partager sur Facebook
          • Partager sur Twitter
            7 août 2018 à 13:59:02

            Salut,

            Il y a deux manières d'écrire une condition, en une ligne ou en plusieurs.

            En une ligne il ne faut pas mettre de End If, par exemple :

            If Cells(i,10).value = "" Then Cells(i,10).value="Simple ligne"

            Ecrire comme ça permet de pas trop encombrer le code, mais ce n'est possible que si on veut faire une seule instruction.

            Par contre si on veut plusieurs instructions (on peut aussi en mettre une seule, c'est ce que je préfère d'ailleurs pour avoir une écriture un peu homogène), il faut passer à la ligne suivante après le Then ET ajouter le End If, par exemple :

            If Cells(i,10).value = "" Then
                Cells(i,10).value = "Multi ligne"
            End If



            Pour ton erreur, essaie de rajouter ".value" à Cells() comme dans mon exemple, il me semble que ça ne devrait rien changer mais on ne sait jamais.

            Aussi ne commence pas tout de suite à faire une boucle sur 50 000 cellules, ça peut prendre beaucoup de temps, essaie d'abord sur quelques cellules pour voir si ça fonctionne comme tu veux. Tu pourras ensuite passer à 50 000 cellules.

            • Partager sur Facebook
            • Partager sur Twitter
              7 août 2018 à 13:59:50

              même problème,

              mes données sont des adresses et des noms de contrats avec des chiffres et des lettres.

              le Value renvoie à une valeur numérique? ou le contenu d'une celulle?

              • Partager sur Facebook
              • Partager sur Twitter
                7 août 2018 à 14:04:30

                La propriété value renvoie le contenu de la cellule donc soit un nombre, texte, date, etc...

                Tu as toujours la même erreur sur le If Cells(i,10).value ="" ? C'est le message d'erreur complet que tu as donné ?

                • Partager sur Facebook
                • Partager sur Twitter
                  7 août 2018 à 14:05:57

                  oui, l'erreur est sur:

                  If Cells(i, 10).Value = "" Then


                  toujours en incompatibilité de type

                  PS: pardon stormweaker, ton premier message est arrivé entre temps, je l'avais pas vue

                  -
                  Edité par hypnor 7 août 2018 à 14:08:25

                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 août 2018 à 14:11:25

                    J'ai une macro qui tourne donc je peux pas tester ton code mais il y a un morceau qui me fait tiquer :

                    With Sheets("DataIn").Activate


                    Essaie d'enlever le With (et le End With qui correspond un peu en dessous).

                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 août 2018 à 14:33:56

                      C'est un fichier comprenant  plusieurs feuilles,

                      mais pour mon problème, la macro concerne 2 feuilles,

                      Une feuille "DataIn" remplit par extraction de fichier excel remplit par des tech, mais avec des colonnes vierges

                      Une feuille "VES" qui contient les données dans lesquelles je choisis la plage de recherche

                      Sinon le fait d'enlever with et end with me donne la même erreur à la même ligne.

                      -
                      Edité par hypnor 7 août 2018 à 14:34:14

                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 août 2018 à 15:23:26

                        Est-ce que tu peux redonner ton code comme il est en ce moment ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 août 2018 à 16:18:11

                          Sub test()
                           
                          Dim i As Long
                           
                          With Sheets("DataIn").Activate
                          For i = 8 To 50000
                          If Cells(i, 10) = "" Then
                          Cells(i, 10).FormulaR1C1 = "=VLOOKUP(RC[4],VES!R2C1:R5000C23,8,0)"
                          End If
                           
                          Next i
                          End With
                           
                          End Sub
                          

                          je souhaite que ma macro effectue la formule d'une cellule, lorsque cette même cellule est vide.
                          Pour que lorsque la feuille "VES" est mise à jour, çà ne change pas les cellules remplis auparavent.
                          Et j'ai autre problème, mais indépendant de ma demande, je ferais un autre poste pour çà.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 août 2018 à 16:51:19

                            Chez moi ça donnait une erreur si il y avait des valeurs d'erreur dans les cellules. Est-ce que tu en as dans tes cellules ?

                            La solution que j'ai du coup c'est de d'abord vérifier si il y  une erreur dans la cellule :

                            Sub test()
                            
                                Dim i As Long
                            
                                Sheets("DataIn").Activate
                                
                                For i = 8 To 50
                                    If Not IsError(Cells(i, 10).Value) Then
                                        If Cells(i, 10).Value = "" Then
                                            Cells(i, 10).FormulaR1C1 = "=VLOOKUP(RC[4],VES!R2C1:R5000C23,8,0)"
                                        End If
                                    End If
                                Next i
                            
                            End Sub



                            -
                            Edité par Stormweaker 7 août 2018 à 16:51:56

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 août 2018 à 8:39:40

                              j'ai trouvé d'où viennent certaines erreurs, c'est dû à des espace présent en fin de cellule dans ma feuille VES,

                              La feuille DataIn est une extraction excel d'une application qui supprime les espaces en fin de cellules.

                              il y a juste 2 petites choses qui me manquent pour compléter ma macro:

                              1- tant que Cells(i,1) <>"" alors la boucle continue sinon la macro s'arrête

                              2- supprimer les lignes dont Celles(i,18) =""

                              Pour le 2 ème point, je pense qu'il faut rajouter "else rows(i).delete" dans la première boucle if, mais je dois placer cette ligne au mauvais endroit, çà ne fonctionne pas.

                              Je ne sais pas si c'est la bonne solution pour supprimer ces lignes.

                              Voici ma macro actuellement:

                              Sub test()
                              
                              Dim i As Long
                              
                              With Sheets("DataIn").Activate
                              For i = 8 To 50000
                              If Cells(i, 18) <> "" Then
                              Cells(i, 10).FormulaR1C1 = "=IF(VLOOKUP(RC[4],VES!R2C1:R5000C22,8,0)="""","""",VLOOKUP(RC[4],VES!R2C1:R5000C22,8,0))"
                              Cells(i, 11).FormulaR1C1 = "=IF(VLOOKUP(RC[3],VES!R2C1:R5000C22,10,0)="""","""",VLOOKUP(RC[3],VES!R2C1:R5000C22,10,0))"
                              Cells(i, 12).FormulaR1C1 = "=IF(VLOOKUP(RC[2],VES!R2C1:R5000C22,12,0)="""","""",VLOOKUP(RC[2],VES!R2C1:R5000C22,12,0))"
                              Cells(i, 19).FormulaR1C1 = "=IF(VLOOKUP(RC[-5],VES!R2C1:R5000C22,21,0)="""","""",VLOOKUP(RC[-5],VES!R2C1:R5000C22,21,0))"
                              Cells(i, 20).FormulaR1C1 = "=IF(VLOOKUP(RC[-6],VES!R2C1:R5000C22,22,0)="""","""",VLOOKUP(RC[-6],VES!R2C1:R5000C22,22,0))"
                              
                              End If
                              
                              Next i
                              End With
                              
                              End Sub
                              



                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 août 2018 à 10:18:27

                                >1- tant que Cells(i,1) <>"" alors la boucle continue sinon la macro s'arrête

                                Une boucle While conviendra parfaitement : https://www.excel-pratique.com/fr/vba/boucles.php

                                >2- supprimer les lignes dont Celles(i,18) =""

                                Ton idée a l'air correct mais tu ne l'as pas mise dans ton code donc difficile de te corriger, qu'est-ce que "ça ne fonctionne pas" veut dire ? Rien n'est supprimé, pas la bonne ligne ?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 août 2018 à 10:26:11

                                  Stormweaker, pour la ligne à supprimer, J'ai répondu à son problème mais je n'ai pas eu de retour.

                                  https://openclassrooms.com/forum/sujet/vba-suppression-de-lignes

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [VBA] end if sans bloc if

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown