Je cherche à cumuler en VBA les fonctions "If" et "For Each cell..." pour améliorer grandement une macro sur un des fichiers que j'utilise.
J'ai programmé il y a quelques années un enchainement de fonctions de type :
Sub Structure()
'
' Structure Macro
' Macro qui sert à copier la même structure sur tous les tronçons
'
If (Sheets("Détail réseau").Cells(16, 1) = "") Then
Sheets("Détail réseau").Cells(16, 9) = ""
Else
Sheets("Détail réseau").Cells(16, 9) = Sheets("Calcul").Cells(151, 2)
End If
If (Sheets("Détail réseau").Cells(17, 1) = "") Then
Sheets("Détail réseau").Cells(17, 9) = ""
Else
Sheets("Détail réseau").Cells(17, 9) = Sheets("Calcul").Cells(151, 2)
End If
Bon là j'ai raccourcis le nombre de cellules, car j'ai 40 lignes environ et excel met très longtemps à effectuer tous ces tests...
Mon idée serait de traduire toutes ces lignes par quelque chose de type :
Pour chacune des cellules dans [C1:C10] ; (ou sur chacune de [A1:A10] ?)
Si [A] = 0 ; alors [C] = 0 ; Sinon [C] = [D]
Après quelques recherches ça se traduirait très certainement par la fonction "For each cell in" suivie de "If ; Then ; Else"
Ma fonction pourrait alors tenir en quelques lignes et le temps de traitement en serait surement grandement amélioré.
Si quelqu'un peut m'aider sur ce sujet... je lui en serais grandement reconnaissant ^^'
(et j'en profiterai pour utiliser la recherche par "Range" plutot que par "Cells", plus pratique à s'y retrouver... mais ça je sais déjà le faire)
Et juste au cas où, étant donné mon fichier beaucoup plus complet que cette seule fonction, je ne peux pas me permettre de simplement remplir les formules "=si(.....)" dans la feuille de calcul
Re : VBA : For Each Cell In [selection] et fonction If
Bonsoir
Sous réserve d'avoir bien compris :
Si la cellule C est vide la cellule A est vide - sinon la cellule A prend la valeur de la cellule D
Code:
Sub Test()
Dim c As Range
For Each c In Range("C1:C10")
With c.Offset(0, -2)
.Value = IIf(c.Value = "", "", c.Offset(0, 1).Value)
End With
Next
End Sub
Edit : en relisant ta demande :
Si la cellule A est vide la cellule C est vide - sinon la cellule C prend la valeur de la cellule D
Code:
Sub Test2()
Dim c As Range
For Each c In Range("A1:A10")
With c.Offset(0, 2)
.Value = IIf(c.Value = "", "", c.Offset(0, 3).Value)
End With
Next
End Sub
Re : VBA : For Each Cell In [selection] et fonction If
Bonsoir et tout d'abord merci de ta réponse rapide !
Mais je crois que j'ai oublié un point qui pose problème avec ton code : dans la pratique mon test donne plutot la chose suivante :
La cellule que je veux remplir est dans la colonne C, mais si sur la même ligne A est vide, alors C doit rester vide.
Si A n'est pas vide, C doit alors prendre la valeur d'une cellule spécifique en feuille "Calculs", et étant donné la structure de ma feuille "Calcul", ça le numéro de ligne n'est pas le même.
Exemple : A5 et C5 sont liés et en ligne, ça c'est Ok. Mais si A5 n'est pas vide, alors C5 prend la valeur de [Feuille"Calcul"]D108 (et C6 prendra la valeur de D109, etc...)
Et cette demande étant adaptée pour plusieurs macro ensuite, je suis incapable de tout lier dans le même numéro de ligne. (sauf à créer des multitude de liaisons dans ma fameuse feuille "Calcul")
Ceci dit ton code semble pouvoir s'adapter à une autre macro, un peu plus simple que celle qui concerne ma demande initiale, alors je vais la garder sous le coude pour quand j'en serai rendu à cette macro
Sous réserve d'avoir bien compris :
Si la cellule C est vide la cellule A est vide - sinon la cellule A prend la valeur de la cellule D
Code:
Sub Test()
Dim c As Range
For Each c In Range("C1:C10")
With c.Offset(0, -2)
.Value = IIf(c.Value = "", "", c.Offset(0, 1).Value)
End With
Next
End Sub
Re : VBA : For Each Cell In [selection] et fonction If
Re
J'ai édité mon 1er message.
Ce que je ne comprends pas, si A n'est pas vide est-ce que c'est toujours le résultat de [Feuille"Calcul"]D108 ou bien cette valeur peut-elle changée ? Si elle peut changer, merci de joindre un fichier avec les réponses attendues sur 3 lignes non vides.
Ce que je ne comprends pas, si A n'est pas vide est-ce que c'est toujours le résultat de [Feuille"Calcul"]D108 ou bien cette valeur peut-elle changée ? Si elle peut changer, merci de joindre un fichier avec les réponses attendues sur 3 lignes non vides.
Re : VBA : For Each Cell In [selection] et fonction If
Re
Code:
Sub Test()
Dim c As Range
For Each c In Range("A2:A10")
With c.Offset(0, 2)
.Value = IIf(c.Value = "", "", Sheets("Calcul").Range("D25"))
End With
Next
End Sub