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. 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.
  2. 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 ^^