Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Code VBA avec une boucle pour réduire la longueur d'une macro

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

BChaly

XLDnaute Occasionnel
Bonsoir à tous,

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.

Y-a-t-il une possibilité?

Merci pour votre aide.

Cordialement

BChaly

Code
************************************************

Sub Test()

With Sheets("JAN").Range("C3:G20")
.Formula = "=IF(ISBLANK('F:\[Base.xls]JAN'!RC),"""",""ABC"")"
.Value = .Value
End With

With Sheets("JAN").Range("C23:G30")
.Formula = "=IF(ISBLANK('F:\[Base.xls]JAN'!RC),"""",""ABC"")"
.Value = .Value
End With

With Sheets("FEV").Range("C3:G20")
.Formula = "=IF(ISBLANK('F:\[Base.xls]FEV'!RC),"""",""ABC"")"
.Value = .Value
End With

With Sheets("FEV").Range("C23:G30")
.Formula = "=IF(ISBLANK('F:\[Base.xls]FEV'!RC),"""",""ABC"")"
.Value = .Value
End With

' ...........................................etc
' pour tous les mois de l'année.

End Sub

************************************************
 

Pièces jointes

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..."

Espérant avoir répondu.

Cordialement.
 
Re : Code VBA avec une boucle pour réduire la longueur d'une macro

Bonsoir à tous

Papou-net:
Le nom des onglets de la feuille source change aussi:
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
 
Dernière édition:
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 = ..."

Cordialement
 
Re : Code VBA avec une boucle pour réduire la longueur d'une macro

Re

La première fonctionne au moins ?
(L'autre on peut l'oublier, c'est juste pour divertir mes vieux jours, les soirs de tempête)

Essaie TestII en la scindant en deux boucles comme le fit Papou-net.
 
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

Oui ça fonctionne également.

Merci encore une fois pour l'intérêt porté à ma question.

Cordialement,
 
Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
853
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…