conflit verrouillage cellules en mode partagé

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je n'arrive à comprendre l'affectation des N° ou nom d'onglet dans le VBA
je vais être amené à changer des noms à partir d'une semaine précise et mieux vaut utiliser une petite macro qu'une centaine de copier/coller
le cas en cours : A partir de S40 je dois changer le 1er nom (barret) jusque S52
la macro est dans module 1 > sub modif , je fais du pas à pas en debug pour tenter de comprendre car à 53 il me met : S38 ?? comment faire de S40 à S52 correctement dans cette boucle
merci
 

Pièces jointes

  • ABSENCES_2017.xlsm
    467.9 KB · Affichages: 34

vgendron

XLDnaute Barbatruc
Hello

dans ta macro tu utilises les CODESNAMES imposés par VBA - et qu'on ne peut pas changer.. je crois...
utilises plutot le NOM de la feuille que tu donnes

VB:
For k = 1 To 52
    NomFeuille = "S" & Format(k, "00")
    Worksheets(NomFeuille).Unprotect
    'MsgBox Worksheets(NomFeuille).Name
    Worksheets(NomFeuille).Range("B5").Value = "NAPIERALA Bruno"
    Worksheets(NomFeuille).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True
Next k

End Sub

Hello Dranreb :-D
 

Dranreb

XLDnaute Barbatruc
Bonjour vgendron.
J'ai eu la même idée mais en évitant 2 recherches dans la collection Worksheets :
VB:
Sub modif()
Dim Feui As Worksheet, S&
For S = 40 To 52
   Set Feui = Worksheets("S" & Format(S, "00"))
   Feui.Unprotect
   Feui.Range("B5").Value = "NAPIERALA Bruno"
   Feui.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True
   Next S
End Sub
 
Dernière édition:

vgendron

XLDnaute Barbatruc
@Dranreb
en évitant 2 recherches dans la collections Worksheets :

la. on tape dans l'optimisation des accès non?
et j'en profite pour te demander la signification du & après S dans la déclaration..
Dim Feui As Worksheet, S&

j'avoue l'avoir déjà vu de nombreuses fois sans trop chercher à comprendre.. vu que moi.. et la déclaration . c'est pas encore un réflexe.. :-D
 

Dranreb

XLDnaute Barbatruc
ByRef et ByVal sont des attributs réservés aux définitions de paramètres des procédures.
C'est une question de lieu de résidence de la donnée transmise, vu de la procédure appelée :
ByRef: externe, ByVal: interne.
Parmi la foule de détails microscopiques contribuant à du code performant, j'ai à cœur d'essayer de programmer en VBA de façon à engendrer un code machine qui ne soit pas trop idiot (comme là où c'est en fond rose des deux cotés dans l'encadré).
Le plus souvent, un paramètre de procédure devrait être défini ByVal. Il ne doit être laissé ByRef (option par défaut) que s'il s'agit d'un tableau, ou si la procédure appelante doit spécifier pour ce paramètre non pas une expression mais une variable, et que la procédure appelée est chargée de la modifier durablement.
Remarque: Pour une variable objet, ce qui consiste à la modifier c'est de l'initialiser par un Set, et non pas de changer des propriétés de l'exemplaire qu'elle désigne. Pour ne faire que ça, ByVal convient parfaitement.
Une variable objet n'est en réalité qu'à un simple pointeur. C’est-à-dire une zone de mémoire contenant une adresse. C'est cette adresse qui en est, techniquement, le contenu, pas ce vers quoi elle pointe.
upload_2017-9-29_12-21-32.png

Ces explications concernent seulement les données de tailles fixes. L'accès au contenu proprement dit, toujours alloué en dehors de la pile, des Variant, String, objets et tableaux est réalisé dans un deuxième temps (voire un troisième, du coup, quand y a des passages ByRef inutiles).
De plus ByVal documente la programmation en indiquant dans l'instruction Sub, Function ou Property qu'il s'agit d'une donnée d'entrée, et que même si la procédure modifiera sa valeur, par simple commodité, ce ne sera pas dans l'intention de modifier le paramètre qui lui aura été transmis. C'est juste une variable de travail interne pourvue par la procédure appelante d'une valeur initiale.
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je viens de m'apercevoir en remettant la SUB dans Thisworkbook permettant de selectionner une plage en ligne et de la colorer en auto par clic droit que .. ça plante ??
Cette appli doit fonctionner en mode Partagé , ( en normal c'est Ok) et je ne vois pas le pourquoi du bug ?
en validant la plage colorée , je verrouille les cellules , est ce cela qui gêne avec le mode partagé ?
 

Pièces jointes

  • ABSENCES_2017.xlsm
    481.6 KB · Affichages: 24

Statistiques des forums

Discussions
314 145
Messages
2 106 365
Membres
109 564
dernier inscrit
db974run