Incompatabilité VBA avec le classeur partagé

Fermé
Stephane - 5 mai 2014 à 17:36
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 6 mai 2014 à 10:46
Bonjour,

Dans le cadre d'un stage j'ai du commencer l'apprentissage du VBA. Les débuts ont été fastidieux, mais maintenant je pense être plus ou moins au point avec ce langage de programmation. Après plusieurs semaines de dure labeur, j'ai fini par réussir à aboutir à un programme fonctionnel et répondant à mes attentes. Cependant l'étape suivante consiste à rendre le document sur lequel j'ai travaillé ainsi que le programme accessible à plusieurs personnes. De ce fait, j'ai cherché à mettre le classeur avec le programme VBA en "Classeur partagé". Jusque là aucun problème, mais c'est après quand je lance le programme qu'interviennent de nombreux problèmes liés au VBA.

Après plusieurs recherches j'ai vu qu'il était impossible de réaliser certaines fonctions avec le VBA sous classeur partagé. Je me demandais s'ils existait cependant certaines astuces pour les contourner? J'ai pu trouver la provenance de certains bog en utilisant la commande MsgBox à outrance. Je vous c/c ci-dessous certaines parties de code qui posent problème :


Cells.FormatConditions.Delete
Cells.ClearFormats
Cells.ClearContents
Cells.ClearComments

J'aimerais vider intégralement la feuille de calcul (formats et valeurs) sans pour autant avoir à en recréer une nouvelle. De plus, je dispose de certaines cellules fusionnées, mais il suffirait seuelement de ne pas les "unmerge".

A la suite du code, je cherche des cellules dans un autre fichier excel puis les copie/colle en gardant le format ainsi que les mises en formes conditionnelles que je dois absolument garder. Ce passage me pose encore problème, mais je n'ai pas eu le temps de l'analyser complétement... Je suppose (sans aucune certitude) que l'erreur pourrait également provenir de ce passage :


If prod <> 0 Then
Workbooks(wb_copier).Worksheets(ws_copier).Cells(lig_copier, prod).Copy
Workbooks(wb_coller).Worksheets(ws_coller).Cells(lig_coller, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues
Selection.PasteSpecial Paste:=xlPasteFormats
Selection.PasteSpecial Paste:=xlPasteComments
'Comme impossible de copier tout sauf formule, copier en 3 fois
End If

Auriez-vous des astuces ou conseils pour m'aider à faire fonctionner mon programme VBA dans une classeur partagé?

En attente de vos réponses,
Cordialement.

A voir également:

2 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
5 mai 2014 à 19:56
Bonjour,

sans pour autant avoir à en recréer une nouvelle.
Pourquoi cette réticence si ça te règle 50% de tes problèmes ?
Tu te crées une feuille modèle cachée que tu as juste à dupliquer.

eric
0
Bonjour Eric,

J'aimerais éviter de créer une nouvelle feuille car je dispose de cellules fusionnées dans la feuille que je traite, par conséquent comme je sais qu'il est impossible de fusionner des cellules une fois le classeur partagé, ça devient compliqué, je me trompe?

Stephane
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
6 mai 2014 à 10:46
Bonjour,

De toute façon, même non partagé, il faut éviter au maximum de fusionner les cellules.
En horizontal tu peux 'centrer sur plusieurs colonnes', en vertical écrire sur la 1ère cellule (le plus simple et le mieux à mon avis) ou bien calculer la cellule centrale.

Et pour ton 2nd soucis il faut que tu copies les propriétés qui t'intéressent une par une. Par exemple :
    [A1] = [B1].Value
    [A1].Font.ColorIndex = [B1].Font.ColorIndex
    [A1].Interior.ColorIndex = [B1].Interior.ColorIndex
    With [A1].Borders
        .LineStyle = [B1].Borders.LineStyle
        .Weight = [B1].Borders.Weight
        .ColorIndex = [B1].Borders.ColorIndex
    End With
    [A1].ClearComments
    If Not [B1].Comment Is Nothing Then
        [A1].AddComment [B1].Comment.Text
    End If

eric
0