VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Piloul

XLDnaute Nouveau
Bonjour à tous,

Voici ma demande :

Je reçois tous les trimestres un fichier que je retraite pour avoir essentiellement les données que je souhaite. Pour cela, une des étapes est d'ajouter une colonne après celle qui s'appelle "Obligation". Ce nom ne change pas mais sa position dans le tableau oui. D'où ma difficulté à la sélectionner, car elle est donc variable, et ensuite insérer ma colonne.

Auriez-vous une solution ?

N'hésitez pas si vous avez besoin de plus de détail.

Merci par avance

Nicolas
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Bonjour Nicolas, bonjour le forum,

Essaie comme ça :

Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Byte 'déclare la variable COL (COLonne)

Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
Set R = O.Rows(1).Find("Obligation", , xlValues, xlWhole) 'définit la recherche R (recherche "Obligation" dans la ligne 1 (à adapter) de l'onglet O)
If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
    COL = R.Column 'définit la colonne COL
    Columns(COL + 1).Insert shift:=xlToRight 'insère une colonne après la colonne COL
End If 'fin de la condition
End Sub
 

Piloul

XLDnaute Nouveau
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Merci beaucoup Robert ! c'est parfait !

Est ce que je peux abuser encore un peu ? Parce que là je n'en vois pas le bout, j'ai essayé d'adapter ce que tu m'as écrit pour copier/coller la colonne sélectionnée dans un autre onglet, mais je n'y arrive pas.

Je cherche à copier/coller un certain nombre de colonnes dans un autre onglet toujours suivant leur nom et non leur positionnement dans le tableau.
Pourriez-vous donc me dire comment faire pour copier/coller la colonne "obligation" dans l'onglet qui s'appelle "Datas" ?
A partir de là je pense que je pourrai avancer car j'aurai juste à changer le nom des colonnes qui m'intéressent, elles deviendront fixes et cela sera plus facile pour faire mes formule :)

N'hésitez pas si vous avez besoin de plus de détail.

Merci encore !!

Nicolas
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Bonjour Nicolas, bonjour le forum,

Je n'ai pas compris où tu voulais copier la colonne obligation. Dans l'onglet Datas d'accord mais où ? En premier ? l'insérer dans la même position ? Dans une position que tu dois définir ?

 

Piloul

XLDnaute Nouveau
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Re bonjour,

Pardon si je n'ai pas été clair, en fait mon tableau d'extraction contient une centaine de colonne, mais je n'ai besoin que d'une quinzaine, que je voudrais copier dans "Datas".

Alors la colonne "Obligation" serait à coller en A1 dans l'onglet "Datas", puis j'aurais une autre colonne "Code Obligation" qui sera en B1, puis une autre "Structure" en C1 etc...
Mais si j'ai le premier exemple avec la colonne "Obligation" je pense que ça sera simple pour moi de mettre à la suite les autres non ?

Merci en tout cas !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Bonsoir Nicolas, bonsoir le forum,

Je te propose de copier la colonne juste en la sélectionnant, avec la macro événementielle SelectionChange ci-dessous. Il te suffit de cliquer sur la lettre de la colonne, pour la copier dans l'onglet Datas.
Le code :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim D As Object 'déclare la variable D (onglet Datas)
Dim NC As Long 'déclare la variable NC (Nombre de Cellules)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set D = Sheets("Datas") 'définit l'onglet D
NC = Application.Rows.Count 'définit le nombre de cellules dans une colonne
If Selection.Cells.Count = NC Then 'condition : si le nombre de cellules sélectionnées est égal à NC
    COL = ActiveCell.Column 'définit la colonne COL
    'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la ligne 1)
    Set DEST = IIf(D.Range("A1").Value = "", D.Range("A1"), D.Cells(1, Application.Columns.Count).End(xlToLeft).Offset(0, 1))
    Columns(COL).Copy DEST 'copie la colonne dans DEST
End If 'fin de la condition
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Bonjour le fil, bonjour le forum,

Il me semble que, XFD = 16384, la colonne maximum sur Excel 2010, fait partie de la fourchette des entiers (voir l'aide VBA ci-dessous) :


Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767. Le caractère de déclaration de type Integer est le signe %. Les variables de type Integer permettent également de représenter des valeurs énumérées. Celles-ci peuvent contenir un ensemble fini d'entiers uniques possédant tous une signification particulière dans le contexte où ils sont utilisés. Elles permettent d'opérer facilement une sélection parmi un nombre connu de choix, du type noir = 0, blanc = 1, etc. Il est conseillé de définir des constantes pour chaque valeur énumérée via l'instruction Const.
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Ajouter colonne après une autre colonne définie mais peut bouger.

Bonsoir à tous


Je ne suis simplement arrêté sur cette ligne (issue elle-aussi de l'aide VBA, cf lien dans précédent message)
Range.Column, propriété (Excel)
Office 2013
Renvoie le numéro de la première colonne de la première zone de la plage spécifiée. Long en lecture seule.
Et comme je l'ai écris, c'est juste pour infos.
(j'aurai du précisé : Pour infos à l'attention de tous lecteurs du fil)
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 144
Membres
103 129
dernier inscrit
Atruc81500