Insertion colone

Bonjour,

Je suis en cours de création d'un planning, type semainier, je cherche à faire une macro pour insérer une colonne avant chaque "lundi", sauf s'il y a déja une colonne vide

2 réponses

  1. Modérateur
    Bonjour,

    Et qu'as tu commencé à faire ? Sur quoi bloques tu exactement ? comment se présentent tes données ?
    Un minimum de détail pourra aider les volontaires à te répondre ^^

    1. A chaque colonne correspond une date (de colonne B à NG pour le moment). Je souhaite garder une colonne vide avant chaque début de semaine pour y inscrire diverses informations sur mon planning.
      Par soucis d'économie de temps je souhaiterai ne pas avoir à insérer les colonnes une par une, surtout qu'il est fort probable que le nombre de colonne augmente.
      1. Modérateur
        Tu ne m'as pas répondu concernant ce que tu as commencé à faire ( sous entendu... à coder)
        Dans le cas où tu n'aurais rien commencé....
        Voici de quoi démarrer :
        Faire une boucle sur chaque cellule de ta ligne de dates
        https://silkyroad.developpez.com/vba/boucles/#LII

        Vérifier le jour de la date correspondant pour trouver les "lundi"
        Lire la "valeur" d'une cellule
        https://docs.microsoft.com/fr-FR/office/vba/api/Excel.Range.Value
        Vérifier le jour :
        https://www.excelfunctions.net/vba-weekday-function.html
        https://www.excel-pratique.com/fr/vba/conditions.php

        Insérer des colonnes
        https://analysistabs.com/excel-vba/inserting-columns-worksheet/
      2. Modérateur
        En gros :
        Sub ajoutcolLundi()
        Dim numJour As Integer
        Dim d As Date
        Dim rng As Range
        Dim i As Long
        Dim col As Long
        Set rng = Sheets(1).Range("A1:AX1")
        nbcol = rng.Count
        For i = nbcol To 1 Step -1
            d = CDate(rng(i).Value)
            numJour = Weekday(d, vbMonday)
            If numJour = 1 Then
                Sheets(1).Columns(i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
            End If
        Next
        
        
        End Sub
        
      3. @jordane45Merci beaucoup, cela marche presque bien avec des ajustements de nom :

        La colonne est ajouté avant le dimanche et non le lundi, mais j'ai résolu ça


        Sub ajoutcolLundi()
        Dim numJour As Integer
        Dim d As Date
        Dim rng As Range
        Dim i As Long
        Dim col As Long
        Set rng = Sheets("Sheet1").Range("B3:NW3")
        nbcol = rng.Count
        For i = nbcol To 1 Step -1
        d = CDate(rng(i).Value)
        numJour = Weekday(d, vbMonday)
        If numJour = 2 Then
        Sheets("Sheet1").Columns(i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
        Next

        End Sub


        Ce pendant je voudrais ajouter une exception s'il y a déja une colonne vide
      4. Modérateur
        Ben tu fais un if pour voir si la cellule précédente est vide ou non.