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?
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.
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 çà.
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
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
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 ?
× 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.
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre