Application d'une formule dans plusieurs onglets

Fermé
Utilisateur anonyme - 14 févr. 2014 à 06:56
 Utilisateur anonyme - 17 févr. 2014 à 11:26
Bonjour,

Je suis en train de faire une macro VBA et je suis bloque.
Je veux appliquer une meme macro a plusieurs feuilles sauf la premiere. Dans cette macro, j'ai une formule contenant une recherche V qui recupere des donnees dans un autre fichier "Conversion Table" dans l'onglet ayant le meme nom que celui de la feuille dans laquelle la formule s'applique.

J'ai ecris le code suivant, si vous pouvez m'aider, ce serait genial.

Private Sub CommandButton1_Click()

Dim nbfeuilles As Integer
Dim i As Integer
Dim j As Integer
nbfeuilles = Sheets.Count
salon = ActiveSheet.Name

For i = 2 To nbfeuilles
Sheets(i).Select
Columns("A:A").Insert Shift:=xlToRight

Cells(j, 2).Cut Destination:=Range("A8:A500")
Cells(j, 1).Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next j


For j = 1 To 500
Cells(j, 2).Select
Selection.FormulaR1C1 = "IF(ISERROR(VLOOKUP(RC[-1],'[Conversion Table.xlsx]" & Sheets(i).Name & "'!R2C1:R500C2,1,FALSE)),RC[-1],VLOOKUP(RC[-1],'[Conversion Table.xlsx]" & Sheets(i).Name & "'!R2C1:R500C2,1,FALSE))"

Cells(j, 2).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Selection.Replace What:="0 ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False 'enleve les espaces au debut des intitules
Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False 'enleve les 0 qui peuvent apparaitre

Next j


Next i

End Sub
A voir également:

1 réponse

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
16 févr. 2014 à 12:47
Bonjour
Tout d'abord il manque un "For j = 1 to 500" dans la première sous boucle .
Ensuite, il manque le signe "=" devant le IF dans la formule,
Puis, pour supprimer des espaces utilisez la commande TRIM ou LTRIM.
Vous pouvez aussi, inclure directement dans la formule, SUBSTITUTE pour remplacer les 0 par des ESPACES, puis y appliquer TRIM pour supprimer tous les espaces ainsi créer. Ce qui donne ceci:
Selection.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],'[Conversion Table.xlsx]" & Sheets(i).Name & "'!R2C1:R500C2,1,FALSE)),TRIM(SUBSTITUTE(RC[-1],0,"""",1)),TRIM(SUBSTITUTE(VLOOKUP(RC[-1],'[Conversion Table.xlsx]" & Sheets(i).Name & "'!R2C1:R500C2,1,FALSE),0,"""",1)))"
ce qui va considérablement raccourcir le code.
Vous pouvez remplacer:
Cells(j, 2).Select 
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
par
Cells(j, 2).value=Cells(j, 2).value
Rajoutez la ligne suivante en première ligne:
Application.screenUpdating=False
,ça ira beaucoup plus vite.
Sauf erreur ou oubli de ma part,
bonne journée
cdlt
0
Utilisateur anonyme
17 févr. 2014 à 11:26
Merci beaucoup pour votre aide !

J'ai encore quelques ajustements à faire, je reviens vers vous si je ne trouve pas.
0