Boucle avec condition

Bonjour,

J'essaie d'apprendre le VBA et plus précisément les boucles. J'aurai besoin de votre aide.
Mon but serait de copier les cellules "O11:O121" dans le tableau de ventilation mensuelle lorsque l'on clique sur un bouton. Cependant la copie se fait uniquement si la cellule "R7"(date du mois en cours) est égale à l'une des cellules de "AD9:BD9"(date des mois de ventilation). C'est assez compliqué à expliquer du coup je vous ai mis en pièce jointe le tableau.

Au départ j'étais partie sur l'idée de faire uniquement des "If" mais je pense que l'on peut facilement optimiser le code avec une boucle et une condition en utilisant peut-être un "For Each" ?

Vous trouverez également un bout de la macro que j'ai commencé à faire nommé "changement_mois".

Je remercie les personnes qui prendront le temps de trouver une possible solution à mon problème.

5tableau-test.xlsm (72.92 Ko)

Bonjour ShowTake, bonjour le forum,

Le code à affecter à un bouton. Attention, tu n'as pas précisé où tu voulais coller. Il faudra modifier ce code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TD As Variant 'déclare la variable TD (Tableau des Dates)
Dim DR As Date 'déclare la variable DR (Date de Reférence)
Dim PAC As Range 'déclare la variable PAC (Plage À Copier)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set O = Worksheets("M - Prestataire") 'définit l'onglet O
TD = O.Range("AD9:DB9") 'définit le tableau des dates TD
DR = CDate(O.Range("R7")) 'définit la date de référence DR
Set PAC = O.Range("O11:O121") 'définit la plage à copier PAC
Set DEST = O.Range("Ta_Cellule") 'tu n'as pas précisé où tu voulais coller !... Il faudra le définir ici en donnant l'adresse de la cellule
For I = 1 To UBound(TD, 2) 'boucle sur toutes les colonnes I du tableau des dates TD
    If CDate(TD(1, I)) = DR Then 'condition : si la donnée ligne 1 colonne I de TD (convertie en date) est égale à la date de référence DR
        PAC.Copy DEST 'copie la plage PAC et la colle dans DEST
        Exit For 'sort de la boucle
    End If 'fin de la condition
Next I 'prochaine  colonne de la boucle
End Sub

Merci pour le système de condition ThauThème. Cependant, la plage de cellule où doit être copié les cellules "O11:O121" doit se situer sous la colonne du mois en question. Je m'explique via un exemple si :
R7 est "avril 2021" et que il a trouvé que AL9 est "avril 2021" alors il va copier dans la cellule "AL11:A121"
De même si :
R7 est "mai 2021" et que il a trouvé que AM9 est "mai 2021" alors il va copier dans la cellule "AM11:AM121"
etc.

Mais je ne sais franchement pas si c'est possible via un code VBA de le faire hormis si on doit faire conditions par conditions.

Re,

Ben oui que je suis bête ! C'était évident... Le nouveau code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TD As Range 'déclare la variable TD (Tableau des Dates)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim DR As Date 'déclare la variable DR (Date de Référence)
Dim PAC As Range 'déclare la variable PAC (Plage À Copier)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set O = Worksheets("M - Prestataire") 'définit l'onglet O
Set TD = O.Range("AD9:DB9") 'définit le tableau des dates TD
DR = CDate(O.Range("R7")) 'définit la date de référence DR
Set PAC = O.Range("O11:O121") 'définit la plage à copier PAC
For Each CEL In TD
    If CDate(CEL.Value) = DR Then 'condition : si cellule CEL (convertie en date) est égale à la date de référence DR
        Set DEST = CEL.Offset(2, 0) 'définit la cellule de destination DEST (deux lignes en-dessous)
        PAC.Copy DEST 'copie la plage PAC et la colle dans DEST
        Exit For 'sort de la boucle
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub

Re, oh loin de là tu es bête ahah, je ne l'avais pas expliqué dans mon message. Merci beaucoup de ton aide, ça va grandement m'aider dans mon projet. Merci surtout pour les explications à coter du code qui me permette de mieux comprendre et d'apprendre

Rechercher des sujets similaires à "boucle condition"