aide sur macro

  • Initiateur de la discussion nicolas
  • Date de début
N

nicolas

Guest
Bonjour à vous mercenaires du forum

Serez-vous une fois de plus la hauteur de vos dernières prestations ?

Mon pb est le suivant, pour les amateurs de Visual Basic

J'ai une macro qui envoie des données dans une cellule spécifique. J'aimerai que ma macro donne l'alerte lorsque cette case est déja remplie (différente de 0) genre avec un message comme "vous avez déja saisi une donnée dans cette cellule, voulez-vous continuez ?- oui - non -

Merci d'avance

nicolas
 
@

@+Thierry

Guest
Bonsoir Nicolas, le Forum

En fait tu n'est pas très clair dans les détails de la macro qui génère des écriture...

Enfin imaginons que ce soit une boucle qui va traiter la plage de A1 à A25

Première Option :
Sub AlerteApresEcriture()
Dim Cell As Range, Plage As Range
Dim TheList As String

Set Plage = Range("A1:A25")
For Each Cell In Plage
If Cell.Value <> "" Then
TheList = TheList & Cell.Address & vbCrLf
Else
Cell.Value = Int((12 * Rnd) + 1) 'pour écrire quelque chose
End If
Next

If TheList <> "" Then
MsgBox "Alerte !!! Les Cellules : " & vbCrLf & TheList & "contiennent des données et n'ont pas été traitése"
End If
End Sub


Seconde Option :
Sub AlertePendantEcriture()
Dim Cell As Range, Plage As Range
Dim Reply As Byte


Set Plage = Range("A1:A25")
For Each Cell In Plage
If Cell.Value <> "" Then
Reply = MsgBox("Alerte !!! la Cellule " & Cell.Address & "n'est pas vide" & _
"Voulez Vous Continuer ?", vbYesNo)
If Reply = vbNo Then
Exit Sub
Else
Cell.Value = Int((12 * Rnd) + 1) 'pour écrire quelque chose
Else
Cell.Value = Int((12 * Rnd) + 1) 'pour écrire quelque chose
End If
Next
End Sub


Il y aurait aussi d'autres méthodes, mais tout dépend du contexte de ta macro originale...

En tout cas ces deux possibilités t'offrent le choix :

Soit de poursuivre le job et d'alerter qu'en fin de traitement pour la première option sans modifier les cellules non vides...

Soit de t'alerter en cours de traitement et de te laisser le choix de stopper ou de poursuivre...En écrasant les données par contre...(On pourrait évidemmment gérer ceci autrement sans écraser les données...)

Bonne Soirée
@+Thierry
 
N

nicolas

Guest
Salut à toi @+Thierry

La deuxième option est effectivement celle qui me convient
toutefois l'exécution de la macro provoque un message d'erreur

il y avait une légère erreur d'étourderie dans ta macro (commande en double) maid cela fonctionne bien sinon

merci à toi
 
@

@+Thierry

Guest
Bonsoir Nicolas, le Forum

Non non ce n'est pas une commande en double mais c'est bien une étourderie...
Mais la double commande est pûrement volontaire, tu vois une commande en double car on ne peut faire de retrait sur la droite, mais ce n'est absolument pas une commande en double !!!

Par contre il manque un End If avant le second Else !!!

Fait des essaie avec

Sub AlertePendantEcriture()
Dim Cell As Range, Plage As Range
Dim Reply As Byte


Set Plage = Range("A1:A25")
For Each Cell In Plage
If Cell.Value <> "" Then
Reply = MsgBox("Alerte !!! la Cellule " & Cell.Address & "n'est pas vide" & _
"Voulez Vous Continuer ?", vbYesNo)
If Reply = vbNo Then
Exit Sub
Else
Cell.Value = Int((12 * Rnd) + 1) '<<<<<<< ici si on répond NON
End If
Else
Cell.Value = Int((12 * Rnd) + 1) '<<<<<<< ici si la cellule est vide !!
End If
Next
End Sub


Bonne nuit
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 377
Messages
2 087 738
Membres
103 657
dernier inscrit
chaval