XL 2010 [RESOLU] IIF imbriqués

  • Initiateur de la discussion Initiateur de la discussion cp4
  • 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 !

cp4

XLDnaute Barbatruc
Bonjour🙂,

J’ai un souci avec un IIF imbriqué. Je sollicite votre aide en vous remerciant par avance.
VB:
Option Explicit

Sub IIF_imbriqué()
   Dim Dl As Long, NbLig As Long, j As Long, Compte

   Dl = Range("A" & Rows.Count).End(xlUp).Row
   NbLig = Dl - 1

   For j = 2 To NbLig * 3
      Compte = IIf(j <= NbLig + 1, "627002", IIf(NbLig + 1 > j >= NbLig + 1 * 2, "580002", "512002"))
      .Cells(j, 3) = Compte
      .Cells(j, 3).NumberFormat = "General"   'on format cellule car excel convertit chiffre en date
   Next j
End Sub
En colonne A j’ai un certain nombre (variable) de lignes avec des dates. Je voudrais multiplier ce nombre de lignes par 3.
C’est-à-dire recopier/coller ces dates 2 fois à la suite.
Cependant, le problème que je n’arrive pas à résoudre est l’utilisation du IIF mais imbriqué pour insérer des codes (3) en colonne C et
en utilisant le nombre de lignes initial (Dl).
Dans le cas présent la dernière ligne non vide Dl=297, j’ai donc nblig= Dl-1 soit 296 lignes de données.
Je voudrais avec un iif imbriqué reporter des codes en colonne C comme suit :
627002 de ligne 2 à Dl,
580002 pour les lignes comprises entre dl+1 à nblig*2
et 512002 pour les lignes comprise entre nblig*2+1 et nblig*3.
En espérant avoir été explicite.
Bonne journée.
 

Pièces jointes

Bonjour,

Plus simple

VB:
Sub test()
  Dim NbLig As Long
  NbLig = Range("A" & Rows.Count).End(xlUp).Row - 1
  Range(Cells(2, 3), Cells(NbLig + 1, 3)) = "627002"
  Range(Cells(NbLig + 2, 3), Cells(NbLig + 1 + NbLig, 3)) = "580002"
  Range(Cells(NbLig + 2 + NbLig, 3), Cells(NbLig + NbLig + NbLig + 1, 3)) = "512002"
End Sub
 
Bonjour tous,
Comme c'est fait j'envoie quand même, la macro copie 2 fois
Bruno
VB:
Sub IIF_imbriqué()
Dim Dl As Long, j As Long, Compte
Dl = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C" & Dl).Value = "627002"
For j = 1 To 2
Range("A2:A" & Dl).Copy Destination:=Cells([A65000].End(3).Row + 1, 1)
Compte = IIf(j = 1, "580002", "512002")
Range(Cells([C65000].End(3).Row + 1, 3), Cells([A65000].End(3).Row, 3)).Value = Compte
Next
End Sub
 
Bonjour MJ12😉,

En effet, c'est plus simple ainsi. Cependant, mon but est d'apprendre un truc nouveau pour moi.

Je sais utiliser le if immédiat seul, je voulais apprendre à l'utiliser pour quelque chose de plus compliqué.

Aurais-tu une idée, pour résoudre ce problème en utilisant le IIF?

Avec mes sincères remerciements.🙂
 
Bonjour à tous,

Une méthode rapide sans gestion compliquée d'indice. Voir module 1 (avec commentaire).
VB:
Sub tripler()
Dim xrg As Range, i&
   Set xrg = Range("a2:a" & Range("A" & Rows.Count).End(xlUp).Row)
   For i = 0 To 2
      xrg.Offset(i * xrg.Rows.Count).Value = xrg.Value
      xrg.Offset(i * xrg.Rows.Count, 2) = Array(627002, 580002, 512002)(i)
   Next i
End Sub
 

Pièces jointes

Bonjour tous,
Comme c'est fait j'envoie quand même, la macro copie 2 fois
Bruno
VB:
Sub IIF_imbriqué()
Dim Dl As Long, j As Long, Compte
Dl = Range("A" & Rows.Count).End(xlUp).Row
Range("C2:C" & Dl).Value = "627002"
For j = 1 To 2
Range("A2:A" & Dl).Copy Destination:=Cells([A65000].End(3).Row + 1, 1)
Compte = IIf(j = 1, "580002", "512002")
Range(Cells([C65000].End(3).Row + 1, 3), Cells([A65000].End(3).Row, 3)).Value = Compte
Next
End Sub
Je te remercie beaucoup Youky(BJ)🙂 pour ton code qui fonctionne parfaitement.
Cependant, comme je viens de le dire à @M12 , je voudrais apprendre à imbriquer ces fameux IIF.
Encore merci. Je vous souhaite une bonne journée.

ET UNE TRÈS JOYEUSE FÊTE DE NOEL
 
Bonjour à tous,

Une méthode rapide sans gestion compliquée d'indice. Voir module 1 (avec commentaire).
VB:
Sub tripler()
Dim xrg As Range, i&
   Set xrg = Range("a2:a" & Range("A" & Rows.Count).End(xlUp).Row)
   For i = 0 To 2
      xrg.Offset(i * xrg.Rows.Count).Value = xrg.Value
      xrg.Offset(i * xrg.Rows.Count, 2) = Array(627002, 580002, 512002)(i)
   Next i
End Sub
@mapomme 😉, un très grand merci.
Je n'ai pas encore testé ton code mais sans voir je te fais confiance.
Je voudrais poursuivre dans ma logique compliquée juste pour apprendre à gérer ce iif par imbrication
Merci beaucoup.

🙂🙂🙂JOYEUSES FÊTES DE FIN D’ANNÉE😉😉😉
 
Re @cp4 😉
Je voudrais poursuivre dans ma logique compliquée juste pour apprendre à gérer ce iif par imbrication
Avec des IIF:
VB:
Sub IIF_imbriqué()
   Dim Der As Long, NbLig As Long, j As Long
   Der = Range("A" & Rows.Count).End(xlUp).Row
   NbLig = Der - 1

   'on commence par copier les dates (ce sera fait)
   Range("a2:a" & Der).Copy Cells(Der + 1, "a").Resize(2 * NbLig)

   'on remplit la colonne C. On compare du plus grand au plus petit
   For j = 1 To 3 * NbLig
      Cells(1 + j, 3) = IIf(j > 2 * NbLig, 512002, IIf(j > NbLig, 580002, 627002))
     Next j
End Sub
 
Re @cp4 😉

Avec des IIF:
VB:
Sub IIF_imbriqué()
   Dim Der As Long, NbLig As Long, j As Long
   Der = Range("A" & Rows.Count).End(xlUp).Row
   NbLig = Der - 1

   'on commence par copier les dates (ce sera fait)
   Range("a2:a" & Der).Copy Cells(Der + 1, "a").Resize(2 * NbLig)

   'on remplit la colonne C. On compare du plus grand au plus petit
   For j = 1 To 3 * NbLig
      Cells(1 + j, 3) = IIf(j > 2 * NbLig, 512002, IIf(j > NbLig, 580002, 627002))
     Next j
End Sub
Mon cher mapomme😎😎 c'est parfait. Exactement ce que je voulais comprendre. Je suis mêlé les pinceaux comme on dit.
Pour être honnête je me suis noyé pour déterminer les priorités et le bornage des lignes devant recevoir tel ou tel code.

Toute ma gratitude.

Bonne soirée.🙂🙂
 
- 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
4
Affichages
581
Réponses
5
Affichages
707
Réponses
8
Affichages
649
Réponses
5
Affichages
200
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
806
Retour