Ajout automatique de colonnes au tableau

bienvenu à tous

Existe-t-il un moyen pour que, lorsque j'écris un produit dans une

colonne C deux colonnes avec le nom du produit soient automatiquement

ajoutées au tableau dans toutes les feuilles Excel 1 à 12 au avant la

7test-2.xlsm (26.54 Ko)

colonne montant La

tâche est lors de l'écriture d'un produit dans une colonne F

scshot 2022 09 24 170144

Bonsoir,

oui il existe un moyen...
L'ajout du produit de la colonne C doit-il se faire avant la colonne MONTANT ou avant le premier produit de la colonne F ?

@ bientôt

LouReeD

Bonjour, merci de l'intérêt que vous portez au sujet. Oui, l'ajout se fait toujours avant une colonne MONTANT, que ce soit lors du référencement du produit à partir d'une colonne  C ou F

Bonsoir,

une solution, mais elle n'est pas pérenne au niveau des formules en cas de suppression de colonne :

@ bientôt

LouReeD

Merci 👍 je reviendrai après avoir essayé

Bonjour, bonne idée 👏👏👏 J'ai seulement besoin de copier les valeurs des cellules adjacentes. Exemple lors de l'écriture dans la cellule C5 les colonnes sont ajoutées et les cellules A5 et b5 sont copiées et lors de l'écriture dans la colonne F les cellules E et D sont copiées Merci merci beaucoup pour l'aide

Bien que je ne comprenne toujours pas l'idée de ne pas supprimer de colonnes, je vais essayer de m'adapter à la situation😁😁😁

Bonsoir,

voici le code (avec ajout de commentaires) pour ajouter ces deux valeurs :

Private Sub Worksheet_Change(ByVal Target As Range)
    ' on arrête la mise à jour de l'écran
    Application.ScreenUpdating = False
    ' on définit des variables
    Dim AncValeur, NouvValeur, Cel, Col
    Dim rRange
    ' si la cellule qui vient d'être modifiée et qu'il y a bien qu'une cellule de modifiée
    If Not Intersect(Target, Range("C5:C15,F5:F15")) Is Nothing And Target.CountLarge = 1 Then
        ' on arrête la surveillance événementielle, car on va modifier des cellules et cela empêche les boucles infinies
        Application.EnableEvents = False
        ' on met en mémoire la valeur qui vient d'être inscrite dans la cellule
        NouvValeur = Target
        ' on fait un UNDO pour revenir à la situation avant modification
        Application.Undo
        ' on met en mémoire l'ancienne valeur de la cellule
        AncValeur = Target.Value
        ' si l'ancienne valeur était "à rien" et que la nouvelle est différente de rien
        If AncValeur = "" And NouvValeur <> "" Then
            ' ajout des deux colonnes
            '************************
            ' on réécrit la nouvelle valeur
            Target = NouvValeur
            ' on recherche de la colonne "Montant"
            Set Cel = Sheets("1").Range("3:3").Find("MONTANT")
            ' si l'on trouve la cellule "MONTANT"
            If Not Cel Is Nothing Then
                ' on garde en mémoire sa valeur qui fatalement changera au moment de l'ajout des colonnes
                Col = Cel.Column
                ' on boucle 12 fois pour les douze feuilles
                For i = 1 To 12
                    ' avec la feuille du nom i (ici j'ai ajouté des doubles guillemet mais autant ils sont inutiles
                    With Sheets("" & i & "")
                        ' on active la feuille
                        .Activate
                        ' on sélectionne les deux colonnes à gauche de la colonne MONTANT
                        .Range(.Cells(3, Col - 2), .Cells(15, Col - 1)).Select
                        ' on copie
                        Selection.Copy
                        ' on insert avec un décalage vers la droite
                        Selection.Insert Shift:=xlToRight
                        ' on supprime le cadre de sélection copie
                        Application.CutCopyMode = False
                        ' dans la cellule fusionnée d'entête on met la valeur de la cellule modifiée
                        .Range(.Cells(3, Col), .Cells(3, Col + 1)).Value = Target
                        ' dans les deux cellules d ela ligne du dessous on met la valeur des cellules de droites
                        .Cells(4, Col).Value = Target.Offset(, -2).Value
                        .Cells(4, Col + 1).Value = Target.Offset(, -1).Value
                        ' arbitrairement on sélectionne la cellule A1 de cette feuille
                        .Cells(1, 1).Activate
                    ' on a fini avec cette feuille
                    End With
                ' on passe à la feuille suivante s'il en reste
                Next i
                ' on revient sur la feuille "Data"
                Sheets("data").Activate
            End If
        ' sinon
        Else
            ' et bien on ne fait rien et dans la cellule concernée par le changement d evaleur on retrouve la valeur initiale !
        End If
        ' on réactive la surveillance événementielle
        Application.EnableEvents = True
    End If
End Sub

Pas de test de présence de valeur, et toujours pas de gestion de suppression de colonne ou de valeurs en double ou de suppression de valeur en colonne C ou F etc...

@ bientôt

LouReeD

Rechercher des sujets similaires à "ajout automatique colonnes tableau"