XL 2010 Etendre macro à plusieurs lignes

RémiCom

XLDnaute Nouveau
Bonjour,

Je suis débutant en VBA.
J'essai d'écrire un code qui je pense est très simple, et je pense même avoir lu des parties de réponse sur le forum mais je ne suis toujours pas arrivé à mes fins
J'ai écris une macro qui me permet de rendre deux champs obligatoires si un cellule est non vide (voir ci-dessous)
Maintenant j'ai besoin de faire exactement la même chose mais appliqué à plusieurs lignes, lignes 2 à 2000.
En vain je n'arrive pas à l'écrire.
Ce que je recherche est simplement que si la cellule BX est non vide alors les champs CX et FX deviennent obligatoire et ceux étendu sur 2000 lignes.
Quelqu'un pourrait m'aider.

En vous remerciant.
Salutations

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If Range("B2") <> "" Then
If Range("C2") = "" Or Range("F2") = "" Then
Cancel = True
MsgBox ("Champ obligatoire")

End If
End If

End Sub
 

Dranreb

XLDnaute Barbatruc
Votre cellule T12 est vide, or vous ne faites un goto 28 que si elle n'est pas vide.
En y mettant quelque chose, l'instruction avec SpecialCells(xlCellTypeBlanks) provoque bien une erreur mais pas parce qu'il ne trouve pas de correspondance mais parce que vous ne pouvez pas utiliser cette commande sur une feuille protégée.
 
Dernière édition:

RémiCom

XLDnaute Nouveau
Bonjour Dranreb et Merci de votre aide.
J'avais écris un unprotect"1221" mais comme je partage ce fichier je l'avais enlevé car j'ai découvert que c'était pas bien géré. Comme j'écris dans l'onglet base de données j'avais pas mis de protection dans celui-ci, je pensais pas que lire dans l'autre onglet poserait pas de problème.
Donc pour les essais j'ai simplement enlevé la protection de la feuille, et ca marche! je dois réfléchir si je ne peux pas le laisser en déprotégé.
Du coup je suis passé au dernier test. Et voila de nouveau un problème.
Afin de faire une mise à jour des fichiers partagés, j'ai écris " activeworkbook.save" en début et en fin de macro, j'ai aussi essayé thisworkbook.save ou Workbooks("Recolte BT-ZONE2.xlsb").Save, la macro se déroule normalement mais les données ne se mettent pas à jour. Pourtant si manuellement je clique sur enregistrer avant et après de lancer ma macro ça marche.
Avez vous une idée?

Merci

Voici le début de ma macro:

Code:
Sub Enregister_sur_Base_Données_BT()





Workbooks("Recolte BT-ZONE2.xlsb").Save





Dim LastRow As Long
Dim WsDepart As Worksheet
Dim WsDestination As Worksheet
Dim Num_BT As String
Dim Classeur_BT As String
Dim Plg As Range
Dim R As Range







On Error Resume Next

 
If Not IsEmpty(ActiveSheet.[T12].Value) Then GoTo 28




GoTo 26




28: 'Set Plg = Intersect([A12,H12,I12,J12,K12,U12,V12,W12,X12,Y12,AC12,AF12,AG12,AI12,AO12,AS12,AT12,AY12,DS12], Plg)
Set Plg = ActiveSheet.[A12,H12:K12,U12:Y12,AC12,AF12,AG12,AI12,AO12,AS12,AT12,AY12,DS12].SpecialCells(xlCellTypeBlanks)
If Err Then GoTo 24
Set Plg = Plg.SpecialCells(xlCellTypeBlanks)
If Err Then GoTo 24
Cancel = True
Application.Goto Plg
 
  MsgBox "Champ obligatoire", vbExclamation, "Sauvegarde"




If Plg = ActiveSheet.[A12,H12,I12,J12,K12,U12,V12,W12,X12,Y12,AC12,AF12,AG12,AI12,AO12,AS12,AT12,AY12,DS12].SpecialCells(xlCellTypeBlanks) Then GoTo 25
24: Set WsDestination = Sheets("Base_Données_BT")
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Non. Pas d'idée, Ça devrait marcher. Mettez un MsgBox Err.Description,vbInformation,"Vérif" juste derrière un ThisWorkbook.Save pour vérifier que l'exécution est bien passée par cette instruction sans provoquer d'erreur.
 

RémiCom

XLDnaute Nouveau
Bonjour,

J'ai bien essayé comme vous me l'avez indiqué, apparemment ca enregistrait correctement mais ca ne marchait pas.
Pour test j'ai essayé d'enlever la macro "before save" dans "Thisworkbook", et effectivement ca a marché.
Je n'ai pas compris pourquoi ca ne marchait pas avant.
Du coup j'essai de réécrire une macro dans "Beforesave" dans "Thisworkbook", mais déjà sans même l'essayer en mode partagé ca ne marche pas.
Dans la macro de ma feuil3, il y a un "Workbooks("xxx").Save", lorsque la macro passe cette ligne elle lance la macro présente dans beforesave de Thisworkbook.
Cependant, que la condition soit respectée ou non elle m'affiche tjs le message :"Saisie obligatoire dans l'onglet SAISIES".
Parcontre si j'enregistre par "fichier" "enregistrer" la macro marche bien dans les deux conditions.
Je n'y comprend rien.

Auriez-vous une idée?

Merci

Salutations

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)



Sheets("Base_Données_BT").Activate


Dim Plg As Range
On Error Resume Next
Set Plg = [T13:T2000].SpecialCells(xlCellTypeConstants, 23).EntireRow
If Err Then Exit Sub
Set Plg = Intersect([H:H,I:I], Plg)
If Err Then Exit Sub
Set Plg = Plg.SpecialCells(xlCellTypeBlanks)
If Err Then Exit Sub
Cancel = True
Application.GoTo Plg
MsgBox "Saisie obligatoire dans l'onglet SAISIES", vbExclamation, "Sauvegarde"
End Sub
 

Pièces jointes

  • Recolte BT-ZONE2.xlsm
    1.1 MB · Affichages: 27

Dranreb

XLDnaute Barbatruc
Bonsoir.
Votre projet VBA est protégé par un mot de passe.
S'il ne fallait pas exécuter la Workbook_BeforeSave lors du "Workbooks("xxx").Save" de la macro de votre feuil3, vous pourriez mettre Application.EnableEvents = False devant et le remettre à True juste après.
 

Discussions similaires

Réponses
10
Affichages
302
Réponses
2
Affichages
145

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972