Je cherche un code avec une boucle pour réduire une macro (voir fichier joint) qui fonctionne. Il s'agit de remplir les cellules de tableaux, à conditions que les cellules figurant dans des tableaux identiques, mais dans un autre fichier "Base" soient < > 0.
Re : Code VBA avec une boucle pour réduire la longueur d'une macro
Bonsoir BChaly,
A priori (non testé) tu dois pouvoir simplifier ta macro comme suit :
Code:
Sub Test()
Dim Sh As Object
For Each Sh In Sheets
With Sh.Range("C3:G20")
.Formula = "=IF(ISBLANK('F:\[Base.xls]SEP'!RC),"""",""ABC"")"
.Value = .Value
End With
With Sh.Range("C23:G30")
.Formula = "=IF(ISBLANK('F:\[Base.xls]SEP'!RC),"""",""ABC"")"
.Value = .Value
End With
Next
End Sub
Attention, si ton classeur possède d'autres feuilles, il faut revoir la boucle "For Each Sh..."
Non testé non plus (et pour cause j'ai point de F: )
Code:
Sub TestII()
Dim Sh As worksheet
For Each Sh In Worksheets
With Sh.Range("C3:G20,C23:G30")
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
End With
Next
End Sub
Re : Code VBA avec une boucle pour réduire la longueur d'une macro
Re
Juste pour le fun , et pour m’attirer les foudres des adeptes de l'écriture classique
Code:
Sub TestIII()
Dim Sh As worksheet, a$, b$
a = "C3:G20,C23:G30"
b = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
For Each Sh In Worksheets
With Sh.Range(a): .Formula = b: .Value = .Value: End With
Next
End Sub
Re : Code VBA avec une boucle pour réduire la longueur d'une macro
Merci à Papou-net d'avoir étudié le problème.
Bravo Staple1600, Bien vu, et Merci beaucoup.
Dans la première solution il y a un petit problème avec "Range("C3:G20,C23:G30")":
En effet les 3 dernières lignes ne sont pas prises en compte.
Est-ce du à la séparation des deux tableaux? Je me penche sur le problème.
Quant à la deuxème solution, elle bloque sur "b = ..."
Re : Code VBA avec une boucle pour réduire la longueur d'une macro
Oui, c'est bien ça, il fallait scinder les deux boucles.
Merci encore une fois à tous les deux.
Voici la solution pour ceux qui seraient intéressés:
Bonne soirée
Cordialement,
**************************************
Sub TestII()
Dim Sh As Worksheet
For Each Sh In Worksheets
With Sh.Range("C3:G20")
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
End With
With Sh.Range("C23:G30")
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
End With
Next
End Sub
Re : Code VBA avec une boucle pour réduire la longueur d'une macro
Re
Par curiosité camarcheticomessaussi?
Code:
Sub TestII4FunBis()
Dim Sh As Worksheet
For Each Sh In Worksheets
With Sh.Range("C3:G20")
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
With .Offset(20).Resize(8)
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
End With
End With
Next
End Sub
Re : Code VBA avec une boucle pour réduire la longueur d'une macro
Bonsoir
Y a pas de raison que cela ne fonctionne pas pourtant...
Essaies tu verras que la MsgBox affiche bien la bonne adresse
Code:
Sub TestII4FunTer()
Dim Sh As Worksheet
For Each Sh In Worksheets
With Sh.Range("C3:G20")
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
With .Offset(20).Resize(8)
MsgBox .Address ' par acquis de conscience
.Formula = "=IF(ISBLANK('F:\[Base.xls]" & Sh.Name & "'!RC),"""",""ABC"")"
.Value = .Value
End With
End With
Next
End Sub