Bonjour,
J'ai un tableau de comparaison d'offre, ce dernier peut posséder un nombre variable de prestataires à comparer.
J'ai voulu créer un bouton permettant d'ajouter des colonnes "ST XX" vierge à la suite des colonnes existantes afin d'éviter les problèmes liées aux modifications de formules, mauvais nettoyage et faire gagner du temps à l'utilisateur.
Une colonne ST XX est composée de 7 colonnes, ce nombre et fixe et ne doit pas varier, le nombre de ligne lui est totalement dépendant de l'utilisateur.
Pour effectuer mon code, j'ai pris la première colonne "ST XX" de mon fichier, en sélectionnant les 7 colonnes qui la compose et j'ai nommée la plage "NEWSTX".
J’obtiens le code suivant :
Mes problèmes sont les suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Sub NEWST() ' macro pour ajouter un ST 'Diminue les changements de fenêtre Application.ScreenUpdating = False Dim nb_ligne As Integer Dim nb_colonne As Integer Dim i As Integer ' nombre de ligne à remettre à 0 nb_ligne = Range("C" & Rows.Count).End(xlUp).Row - 1 ' Numéro de la dernière colonne remplie nb_colonne = Cells(10, Cells.Columns.Count).End(xlToLeft).Column ' Selection du ST 6 et copier Range("NEWSTX").Copy ' sélection la dernière colonne, se décale de 1 et colle un tableau (même si il est rempli) Columns(nb_colonne).Offset(0, 1).Insert Shift:=xlToRight SendKeys "{Escape}" Dim NomDuST As Integer ' regarde après création ou est le nom de ST NomDuST = Sheets("Tableau comparatif").Cells(4, Cells.Columns.Count).End(xlToLeft).Column With Sheets("Tableau comparatif") ' change le nom du ST pour un nom générique à modifier par l'acheteur .Cells(4, NomDuST).Value = "ST XX" .Cells(5, NomDuST + 2).Value = "" .Cells(6, NomDuST + 2).Value = "" .Cells(7, NomDuST + 2).Value = "" .Cells(8, NomDuST + 2).Value = "" For i = 12 To nb_ligne ' vide les cellules Qté, Unité et PU pour avoir un tableau propre .Cells(i, NomDuST).Value = "" .Cells(i, NomDuST + 1).Value = 0 .Cells(i, NomDuST + 2).Value = 0 .Cells(i, NomDuST + 5).Value = "" Next End With 'Diminue les changements de fenêtre Application.ScreenUpdating = True SendKeys "{Escape}" End Sub
Lorsque j'ouvre le ficher et que j'utilise ce code pas de problème il s'effectue autant que je veux, mais
- si je supprime les colonnes que j'ai créé via le bouton, le code bug et m'affiche des erreurs
- idem si j'écris après la dernière colonne, (comme si j’écrivais un mémo, ou si je faisais un calcul), or c'est tous l’intérêt de la fonction insert car avec la fonction copy/paste j'ai aucun problème.
- si la plage nommée est masquée ça bug aussi
La première erreur est la suivante :
erreur d'exécution '-2147417848 (80010108)':
Erreur Automation
L'objet invoqué s'est déconnecté de ses clients.
Si je fais un débogage il va me surligner la ligne :
Columns(nb_colonne).Offset(0, 1).Insert Shift:=xlToRight
lorsque je relance la macro sans rien changer il me met l'erreur :
erreur d'exécution '1004':
La méthode Insert de la classe Range a échoué
et si j’arrête la macro puis la relance
cette fois c'est l’erreur d'exécution '1004':
La méthode Copy de la classe Range à échoué. Et il me surligne la ligne
Range("NEWSTX").copy
si je change le code comme ça :
j'ai aucun problème mais j'écrase toutes les éventuelles notes mises à la suite des colonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Range("NEWSTX").Copy ' sélection la dernière colonne, se décale de 1 et colle un tableau (même si il est rempli) Columns(nb_colonne).Offset(0, 1).activate Activesheet.paste
J'ai également essayer en changeant le Range("NEWSTX") par les lettres des colonnes : Range("Z:AF"), mais j'ai le même problème.
Lors des erreurs l'ensemble des variables prennent les bonnes valeurs donc je comprend pas pourquoi j'ai ces erreurs, j'aurai besoin d'un coup de main soit pour trouver une autre méthode, soit me dire ce qui ne va pas.
Pour le cas ou la plage est masquée, la macro ne fait tout simplement : rien
J'espère avoir été suffisamment clair, si vous avez besoin de plus précisions j’essayerai d'en apporter.
Ps : je m'excuse encore pour le doublon avec la section excel sans VBA
Partager