Sub Macro1()
Dim CTI As Worksheet 'déclare la variable CTI (onglet CTI)
Dim AD As String 'déclare la variable AD (ADresse)
Dim OM As Worksheet 'déclare la variable OM (onglet du Mois)
Dim COL As Byte 'déclare la variable COL (COLonne)
Set CTI = Worksheets("CTI") 'définit l'onglet CTI
Select Case Application.WorksheetFunction.CountA(CTI.Range("O31:P31")) 'agit en fonction du nombre de valeur dans la plage O31:P31
    Case 0 'aucune
        MsgBox "Données manquantes !" 'message
        CTI.Range("O31").Select 'séctionne la cellule O31 de l'onglet CTI
        Exit Sub 'sort de la procédure
    Case 1 'une seule
        AD = IIf(CTI.Range("O31").Value = "", "O31", "P31") 'définit l'adresse AD
        MsgBox "Donnée manquante !" 'message
        CTI.Range(AD).Select 'séctionne la cellule de l'adresse AD de l'onglet CTI
        Exit Sub 'sort de la procédure
End Select 'fin de l'action en fonction de...
'condition : si "Oui" au message
If MsgBox("Merci de bien vérifier la sélection avant de potentiellement écraser des données importante. Voulez-vous continuer ?", vbYesNo, "ATTENTION !") = vbYes Then
    Set OM = Worksheets(Range("O31").Value) 'définit l'onglet OM
    COL = Range("P31").Value + 7 'définit la colonne COL
    OM.Cells(113, COL).Resize(20, 1).Value = Range("O8:O27").Value 'renvoie les données du critère bleu
    OM.Cells(138, COL).Resize(20, 1).Value = Range("P8:P27").Value 'renvoie les données du critère jaune
    OM.Cells(163, COL).Resize(20, 1).Value = Range("Q8:Q27").Value 'renvoie les données du critère rouge
    OM.Select 'sélectionne l'onglet OM (à supprimer si pas nécesaire)
End If 'fin de la condition
End Sub