J'essaye de mettre en place une macro empêchant la modification d'une cellule si la saisie des informations à son sujet a commencé dans la base de données. La macro bloque sur la ligne en rouge dans la macro ci-dessous. Je n'arrive pas à trouver les termes pour nommer la plage de cellules variable.
Merci par avance de votre aide
Code:
For i = 8 To 10
[COLOR="Red"]Set ColVide = Workbooks("Commande.xls").Sheets("Feuilles").Range(Cells(8, i), Cells(127, i))[/COLOR]
If Not Intersect([cells(i-4, 2)], Target) Is Nothing Then
If Application.WorksheetFunction.CountA(ColVide) = 0 Then
MsgBox ("Attention, le tableau des réponses a commencé à être complété. Un changement dans la liste des adhérents est fortement déconseillé")
End If
End If
Next i
Bonsoir Gorfael, Banzai64, carcharodon-carcharias, et merci à vous pour l'intervention rapide et efficace (sourire)
J'ai retenu la première réponse et çà fonctionne.
Pour la petite histoire, voici la macro complète et son objectif.
J'ai tenu compte de ta remarque également Banzai. Je n'avais pas prévu ce blocage puisque la macro buggait avant (sourire).
Maintenant, ça fonctionne. Il me reste à l'aménager un peu pour la forme mais le principe est bon.
La macro complète figure ci-dessous. L'objectif est un peu expliqué par la réponse de la msgbox. Deux feuilles permettent d'une part la saisie des noms des adhérents, adresses, CP,...., et d'autre part, la saisie de leur commande. La première feuille alimente la seconde pour les noms uniquement. L'opérateur saisie la commande colonne par colonne dans la seconde feuille (les chiffres).
Si l'opérateur, pour une raison x ou y décide de modifier la première feuille, les noms des adhérents ne seront plus en adéquation avec les quantités commandées. Ils faut donc avertir l'opérateur de celà.
Voici la raison de la macro. J'ai joint un petit fichier exemple (le fichier d'origine contient trop de données personnelles). Si l'on modifie l'adhérent A, le message s'affiche car la feuil2 a commencé à être complétée pour lui. Par contre pour l'adhérent B, non.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 8 To 10
' Zone complète = 8 to 67
With Workbooks("Classeur2.xls").Sheets("Feuil2")
Set ColVide = .Range(.Cells(8, i), .Cells(127, i))
End With
If Not Intersect(Cells(i - 4, 2), Target) Is Nothing Then
If Application.WorksheetFunction.CountA(ColVide) <> 0 Then
MsgBox ("Attention, le tableau des réponses a commencé à être complété. Un changement dans la liste des adhérents est fortement déconseillé")
End If
End If
Next i
End Sub
Re : [Résolu] Définir une plage de données variable
Carcharodon, l'aménagement prévoyait d'offrir cette possibilité, d'annuler la modification, voire de supprimer la colonne de réponse pour l'adhérent concerné, ..., enfin je vais réfléchir à ça mais de toutes manières, c'est assez simple à mettre en place. Merci en tout cas pour l'idée.
Kjin, je n'ai pas de problème sur la boucle For Next mais sur la ligne en rouge.
Comme dans l'autre message, c'est le début d'une boucle.... qui fonctionne....