Adapter automatiquement le code VBA lors de l'insertion d'une colonne

Bonjour,

J'ai cherché sur internet une solution, cependant je crois que je ne sais pas comment formuler ma question à google .

Voici mon soucis, après plusieurs jours à écrire et peaufiner une macro (je suis plutôt lent en VBA), je viens de m’apercevoir qu'il manque des colonnes dans mon tableur. Le problème c'est que lorsque j'insère une colonne, contrairement aux formules excel qui s’adaptent seule, je suis obligé de modifier manuellement touts les numéros de colonne de mon code VBA.

Suis-je condamner à faire ces changements manuellement ou existe t-il un moyen automatisé de réaliser ce décalage ?

J'utilise excel 2013.

merci d'avance.

Bonjour le forum,

Je connais bien ce problème.. c'est frustrant

Je connais 2 solutions, mais je suis curieux de savoir comment les plus aguerris du forum font face à cette situation.

Solution 1 Le basique rechercher/remplacer directement dans le code VBA. Par exemple tu as Range("D" & variable).copy tu peux faire un remplacer ("D" par ("E"

Solution 2 Créer une fonction VBA qui trouve la ligne / colonne concernée en fonction de données fixes. Imaginons que la colonne comment toujours (et est la seule) par "Prix:" Tu peux faire une fonction avec le classeur comme argument et qui renvoi le numéro de colonne qui à une entête qui commence par "Prix:" et avec un peu d'imagination on peux créer des fonctions robustes à pas mal de cas de figures.

Bonjour Thomas, bonjour le forum,

Ardent adepte de VBA j'ai souvent eu ce problème qui fait tant rire les "formulistes" . Il n'y a malheureusement pas de solution mais, malgré, tout l'éditeur Visual Basic (VBE) possède un Rechercher/Remplacer suffisamment efficace pour modifier ton code sans avoir à le faire manuellement... Bon courage.

[Édition]

Bonjour Gabin, nos posts se sont croisés...

Merci à vous deux, c'est bien dommage que ce ne soit pas intégré étant donné que quelque chose de similaire existe sur Excel..

Tant pis y a plus qu'a tout remplacer , merci encore !

Bonjour,

La solution c'est de construire ses feuilles directement pour quelles soit gérables et programmables.

Et de gérer sa programmation en conséquence...

Ça veut dire : S'il s'agit de feuilles quelconquse travailler au maximum avec des cellules nommées. Quand vous appelez des cellules nommées en VBA peu importe leur place... Si vous devez utiliser des formules avec VBA, utilisez autant que faire se peut des formules nommées : Vous sous traitez ainsi à Excel la charge d'en déduire l'adaptation.

S'il s'agit de feuilles contenant un tableau utilisez de préférence un tableau structuré : Dans un tableau structuré peut importe les adresses de colonnes : Elles sont toutes nommées d'offices : Quand aux formules elles sont auto incrémentées.

Et si vous êtes le gros débutant lambda et que vous utilisez encore les anciens tableaux, nommez au maximum le tableau et chacune des colonnes avec des formules dynamiques ( DECALER )

Evitez tous les Select, Offset... et n'utilisez que des variables contenant le N° de colonne d'une cellule ou d'une colonne nommée.

Moyennant quoi en principe vous ne devriez pas avoir ce souci !

A+

j'avais bel et bien structuré mes colonnes cependant, j'avais bien évidemment oublié une colonne...bref c'est ma faute !

Par tableau structuré, parle tu des tableaux qui renvoie par exemple @[numéro de colonne] au lieu de "A1:A5" par exemple ?

Pas du tout je ne vois pas de quoi tu parles.

Il s'agit des tableaux à rayures que l'on obtient par Insertion > Tableau

A+

Salut,

Voilà qui est bien parlé, @Galopin, on ne le répétera jamais assez.

Par tableau structuré, parle tu des tableaux qui renvoie par exemple @[numéro de colonne] au lieu de "A1:A5" par exemple ?

C'est exactement cela, un colonne nommée ou quelle soit sera facilement utilisable

Dim Ele As Range
    For Each Ele In Range("Tableau1").ListObject.ListColumns("Nom").DataBodyRange
        Debug.Print Ele
    Next

@[numéro de colonne] Hum...

Ça serait plutôt pas : TaBD[#Ventes] des fois ?

A+

J'ai lu trop vite

[@Nom de la colonne] te renvois la valeur de la colonne nommée de la même ligne, dans une cellule. ex: =[@TotalHT] + [@TVA]

tu peux aussi avoir accès à ta colonne en faisant:

Dim Ele As Range
    For Each Ele In Range("Tableau1[Nom]")
        Debug.Print Ele
    Next

merci pour vos commentaires, je n'ai pas l'habitude d'utiliser les tableau, mais les habitudes sont faites pour être changé !

J'utiliserai maintenant des tableaux aussi souvent que possible, merci !

Rechercher des sujets similaires à "adapter automatiquement code vba lors insertion colonne"