Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Une Idée pour améliorer Excel? (VB Editor: Bouton ON/OFF pour ajuster automatiquement l'ajout de nvelles colonnes)

8 réponses
Avatar
Eric
Bonsoir,

J'importe des données d'Access vers Excel où je les mets en forme avec une
macro en VBA.
Tout va bien sinon que à chaque fois que j'ajoute une colonne sous Access,
je suis obligé de décaller manuellement le nom des colonnes dans ma macro et
c'est assez fastidieux (même en faisant un CTRL+F, Bouton "Remplacer" telle
nom de colonne par tel autre)!

Savez si Microsoft à penser à implémenter du genre un gros bouton ON/OFF
tout bête sous VB Editor qui me permettrait de fire la chose suivante:
1) Importer mes données d'access (là rien ne change, j'exporte depuis Access
en Fichier Excel ; le fichier Excel n'a pas de code VBA, et comme j'en ai
gardé une copie, je l'ajoute. Donc j'ai mon fichier Excel avec mes données
et mon précédent code VBA).
2) Puis dans VB Editor j'appuye sur ON en disant décalle moi tout de X
colonne(s) à droite à partir de telle colonne (ou "les nouvelles colonnes
sont en position : "F" et "M" par exemple. Puis OFF.
Et là plus besoin de changer manuellement. Par exemple pour la première
colonne [Columns("F:F").Select] par [Columns("H:H").Select]. ;-)

La même idée pourrait être appliquée pour les lignes. ;)

En fait c'est un peu la même chose que quand on coupe la cellule A1 en S1,
la formule positionnée en C1 (=A1+1) s'adapte et devient C1 (=S1+1).

Merci d'avance ;)
Eric

8 réponses

Avatar
Daniel
Bonsoir.
J'ai peur de ne pas avoir tout compris, mais je vais essayer de répondre.
Si, au lieu d'exporter tes données d'Access vers Excel, tu faisais le
contraire, c'est à dire importer depuis Excel, tu aurais le choix des champs
de la table ou de la requête à importer. Ainsi, quel que soit le nombre de
colonnes ajoutées dans la table Access, le nombre de colonnes importées ne
varie pas.
Cordialement.
Daniel


Bonsoir,

J'importe des données d'Access vers Excel où je les mets en forme avec une
macro en VBA.
Tout va bien sinon que à chaque fois que j'ajoute une colonne sous Access,
je suis obligé de décaller manuellement le nom des colonnes dans ma macro et
c'est assez fastidieux (même en faisant un CTRL+F, Bouton "Remplacer" telle
nom de colonne par tel autre)!

Savez si Microsoft à penser à implémenter du genre un gros bouton ON/OFF
tout bête sous VB Editor qui me permettrait de fire la chose suivante:
1) Importer mes données d'access (là rien ne change, j'exporte depuis Access
en Fichier Excel ; le fichier Excel n'a pas de code VBA, et comme j'en ai
gardé une copie, je l'ajoute. Donc j'ai mon fichier Excel avec mes données
et mon précédent code VBA).
2) Puis dans VB Editor j'appuye sur ON en disant décalle moi tout de X
colonne(s) à droite à partir de telle colonne (ou "les nouvelles colonnes
sont en position : "F" et "M" par exemple. Puis OFF.
Et là plus besoin de changer manuellement. Par exemple pour la première
colonne [Columns("F:F").Select] par [Columns("H:H").Select]. ;-)

La même idée pourrait être appliquée pour les lignes. ;)

En fait c'est un peu la même chose que quand on coupe la cellule A1 en S1,
la formule positionnée en C1 (¡+1) s'adapte et devient C1 (=S1+1).

Merci d'avance ;)
Eric




Avatar
Eric
Bonsoir Daniel,

Merci pour ta réponse.
Désolé de ne pas avoir été assez clair! Il faut certainement que je
reformule ma demande! ;)

En fait peu importe si d'abord j'importe à partir d'Excel ou si j'exporte
vers Excel à partir de Access!

En effet le problème survient lorsque j'ajoute une colonne (Champ) dans
Access.
Dès lors la macro (en VBA) de mise en forme de toutes mes colonnes que j'ai
sous Excel ne marche plus. Les bonnes colonnes ne sont plus mises en forme
de façon adéquate. ;(

Donc si il existait une possibilité de garder la mise en forme sur les
bonnes colonnes en décallant automatiquement le numéro des colonnes dans
VBA, çà me faciliterait la vie! ;))


Je vais essayer de donner un exemple plus simple (sans parler d'Access pour
ne pas embrouiller inutilement):

J'aimerais passer de ceci
http://cjoint.com/?kvsVFOYOZw

à cela (ajout d'une colonne):
http://cjoint.com/?kvsVV3zGMW

Là on remarque que 'Columns("B:B").Select' devient
'Columns("C:C").Select'...etc...

Existe-t-il un moyen de faire ceci automatiquement?

Personellement je pensais à un bouton ON/OFF.
1/ Sur position ON: il me permetrait de dire à VBA , si j'ajoute une colonne
entre A et B, décale moi toutes les références existantes dans ma macro
automatiquement (dans l'exemple 'Columns("B:B")' devient 'Columns("C:C")'
etc.. Ensuite j'appuye sur OFF et j'ai juste à rajouter manuellement une
mise en forme pour la nouvelle colonne B. ;)
2/ Sur position OFF: VBA ne change rien (on reste comme dans la version
actuelle, aucune mise en forme de colonne n'est renommée).


Merci d'avance ;)
Eric
Avatar
AV
Dès lors la macro (en VBA) de mise en forme de toutes mes colonnes que j'ai
sous Excel ne marche plus. Les bonnes colonnes ne sont plus mises en forme de
façon adéquate. ;(


Utilise des plages (colonnes) nommées
L'insertion de x colonnes n'aura aucune incidence sur tes macros de mises en
forme
Ca pourrait donner un truc comme ça :

With [colonne1]
.style="comma"
. numberformat=blablablabla
End With

With [colonne2]
.style="comma"
. numberformat=blablablabla
End With

....etc.....

AV

Avatar
Eric
Bonsoir,
Merci Alain! Cà m'a l'air d'être une très bonne idée. ;)
Toutefois après reflexion j'ai toujours un problème! Je pense que çà doit
être possible de résoudre en faisant la chose suivante :
1) Il faut que j'ajoute une macro pour tester l'entête de chaque colonne
(A1, B1,...), puis dire si l'entête de la première colonne égale "Produits",
auquel cas la nommer "colonne1", si...etc..
2) Et enfin utiliser ta macro pour mettre toutes les colonnes en forme.

Si quelqu'un aurait la gentillesse de m'aider un peu pour le 1) , je suis
preneur. ;)
Merci d'avance ;)



"AV" a écrit dans le message de news:

Dès lors la macro (en VBA) de mise en forme de toutes mes colonnes que
j'ai sous Excel ne marche plus. Les bonnes colonnes ne sont plus mises en
forme de façon adéquate. ;(


Utilise des plages (colonnes) nommées
L'insertion de x colonnes n'aura aucune incidence sur tes macros de mises
en forme
Ca pourrait donner un truc comme ça :

With [colonne1]
.style="comma"
. numberformat=blablablabla
End With

With [colonne2]
.style="comma"
. numberformat=blablablabla
End With

....etc.....

AV




Avatar
AV
1) Il faut que j'ajoute une macro pour tester l'entête de chaque colonne (A1,
B1,...), puis dire si l'entête de la première colonne égale "Produits", auquel
cas la nommer "colonne1", si...etc..


Bien que je ne vois pas l'utilité du "renommage" des champs puisque dans un
tableau on définit l'ordre des éléments...
Soit.....
Avec tes noms de champs présents en ligne 1 (dont l'ordre sera défini dans la
matrice "tablo") :

Sub zzz()
tablo = Array("Produits", "Machins", "Trucs", "Choses")
For x = 1 To 4
z = Application.Index(tablo, x)
col = Rows("1:1").Find(z).Column
lg = Cells(65536, col).End(3).Row
aD = Cells(2, col).Resize(lg - 1).Address
nomF = ActiveSheet.Name
ActiveWorkbook.Names.Add Name:="colonne" & x, RefersTo:="=" & nomF & "!" &
aD
Next
End Sub

Exmple là :
http://cjoint.com/?kxix6l17rB

AV

Avatar
Eric
Bonjour Alain,

Merci pour ton aide. J'apprécie beaucoup. ;)

Toutefois malgré mes essais, après avoir fait fonctionné la macro "zzz",
rien ne se passe!

http://cjoint.com/?kxkPfFsdzl
En A1 il a "Trucs". Mais le nom en haut à gauche est toujours A1.


Puis étant donné ton étonnement ("...je ne vois pas l'utilité du "renommage"
des champs "...) j'ai ressayé avec ta prémière suggestion.
Donc si j'essaie de l'adapater pour l'exemple que tu as donné, ceci me
donnerait la macro suivante :

Sub essai01
With [Truc] 'là çà a trouvé tout seul où se trouve cette colonne "Truc",
c'est çà?
.Style = "Comma"
.NumberFormat = _
"_-* #,##0.0 [$?]_-;-* #,##0.0 [$?]_-;_-* ""-""?? [$?]_-;"
End With
End sub


Hélas je n'y arrive pas non plus. Je suis désolé de ma piètre performance!

Merci d'avance ;)
Eric
Avatar
AV
Toutefois malgré mes essais, après avoir fait fonctionné la macro "zzz", rien
ne se passe!


Normal que visuellement il ne se passe rien
La macro a pour but de nommer les champs x, y, z,.....(l'ordre est défini par
toi) en colonn1, colonne2...etc
Après exécution va voir dans Insertion > Nom > Définir...
C'est ce que tu as demandé
Regarde le code (alt+F11)

AV

Avatar
Eric
Normal que visuellement il ne se passe rien
La macro a pour but de nommer les champs x, y, z,.....(l'ordre est défini
par toi) en colonn1, colonne2...etc
Après exécution va voir dans Insertion > Nom > Définir...


Cà y est ! J'y ai mis du temps mais j'ai fini par comprendre! Merci beaucoup
Alain. ;)

En tous cas c'est génial! Merci encore. ;)
Eric