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

optimisation de macro

  • Initiateur de la discussion Initiateur de la discussion chich
  • Date de début Date de début

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 !

chich

XLDnaute Occasionnel
Bonjour a tous
ma macro ne fonctionne pas entièrement car elle ne tien pas de la possibilité que (I3)
peux être non vide (renseigner manuellement)
et je souhaite qu'elle s'applique a la plage (I3:10) en foction de la plage (A3:AH10)

Private Sub Worksheet_Activate()
Range("I3").Value = IIf(I3 <> "", "", IIf(AA3 = "", "07:00", ""))
End Sub
Merci d'avance
 

Pièces jointes

Bonjour.
Pas compris non plus mais appliquant ce que vous aviez écrit sans comprendre, ça pourrait donner ça :
VB:
Private Sub Worksheet_Activate()
Dim T(), L&, C&
T = [I3:AH10].Value
For L = 1 To 8: For C = 1 To 8
   If L Mod 3 <> 0 And C Mod 3 <> 0 Then T(L, C) = IIf(IsEmpty(T(L, C)), _
      IIf(IsEmpty(T(L, C + 18)), TimeSerial(7, 30, 0), Empty), Empty)
   Next C, L
[I3:P10].Value = T
End Sub
 
Re merci pour votre interet
ces presque ca il manque juste qu' il soit pris en compte si par exemple (I3) et déjà renseigner manuellement
 
Ne pouvez vous expliquer clairement ce que vous voulez dans chacun des 4 cas possible ?
1) — Ni Ia cellule ni celle 18 colonnes à sa droite ne sont renseignées,
2) — Seulement celle de gauche l'est,
3) — Seulement celle de droite l'est,
4) — Les deux le sont.
 
re
le but et que toutes les cellules peuvent être renseigner manuellement et donc quant une cellule
est non vide alors la formule ne s'applique pas a cette dernière
j' être suffisamment explicite
 
Répondez à ma question telle que je l'ai posée. Que doit on mettre dans la cellule de gauche dans chacun des 4 cas ?
Il ne s'agit quand même pas tout simplement de mettre 7:30 dans les cellules vide et de laisser ce qu'il y a dans celles qui sont renseignées, j'espère ? Ce serait trop simple !
VB:
Private Sub Worksheet_Activate()
Dim T(), L&, C&
T = [I3:AH10].Value
For L = 1 To 8: For C = 1 To 34
   If L Mod 3 <> 0 And C Mod 3 <> 0 And Not IsEmpty(T(L, C)) Then T(L, C) = TimeSerial(7, 30, 0)
   Next C, L
[I3:AH10].Value = T
End Sub
 
Dernière édition:
Re
Oui vous avez tout compris
 
C'est le 32 qui nest pas bon remplacez le par le bon nombre de colonnes de la plage.
Re l' ideal serait de fusionner les deux et je souhaiterais aussi me débarrasser du Worksheet_Activate()
et de le remplacer par Private Sub Worksheet_Change(ByVal Target As Range) si possible !

Private Sub Worksheet_Activate()
Dim T(), L&, C&
T = [I3:AH10].Value
For L = 1 To 8: For C = 1 To 8
If L Mod 3 <> 0 And C Mod 3 <> 0 And IsEmpty(T(L, C)) Then T(L, C) = TimeSerial(7, 30, 0)
Next C, L
[I3:AH10].Value = T
End Sub

Private Sub Worksheet_Activate()
Dim T(), L&, C&
T = [I3:AH10].Value
For L = 1 To 8: For C = 1 To 8
If L Mod 3 <> 0 And C Mod 3 <> 0 Then T(L, C) = IIf(IsEmpty(T(L, C)), _
IIf(IsEmpty(T(L, C + 18)), TimeSerial(7, 30, 0), Empty), Empty)
Next C, L
[I3: P10].Value = T
End Sub
 
Eh bien faites le ! Je ne sais pas ce que vous voulez fusionner, moi.
Et puis tiens, pour éviter tout risque d'erreur de nombres de lignes ou de colonnes remplacez donc :
For L = 1 To 8: For C = 1 To 8
par :
For L = 1 To UBound(T, 1): For C = 1 To UBound(T, 2)
 
Dernière édition:
- 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
12
Affichages
691
Réponses
4
Affichages
495
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…