VBA-Selection

Le
Pierre.M
Bonjour,

J'utilise une macro du genre (je simplifie) :

Private sub erreur()
If Not Intersect (Range("A1:A200"), Selection) Is Nothing then
With Selection
.Range("D1,G1, J1:M1").ClearContents
.Range("B1").value="ANNULE"
End With
End If
End Sub

pour supprimer des données dans un tableau.
Ca fonctionne bien quand je selectionne une ligne de la colonne A, mais
pas quand j'en selectionne plusieurs (c'est toujours la ligne de la
cellule active qui subit la macro).

Est-ce normal ? Pourquoi (Selection <>ActiveCell) ? On peut sans doute
changer ça, non ?

Merci d'avance et bonne journée à tous.

Pierre.M
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #20745041
Bonjour.
Quand tu écris :
Selection.Range("D1"), ce qui est pris en compte, c'est la colonne D et
la première ligne de la sélection. Essaie :

If Not Intersect(Range("A1:A200"), Selection) Is Nothing Then
Intersect(Selection.Resize(, 13), Range("D:D, G:G, J:M")).ClearContents
Intersect(Selection.Resize(, 2), Range("B:B")) = "ANNULE"
End If

Cordialement.
Daniel

Bonjour,

J'utilise une macro du genre (je simplifie...) :

Private sub erreur()
If Not Intersect (Range("A1:A200"), Selection) Is Nothing then
With Selection
.Range("D1,G1, J1:M1").ClearContents
.Range("B1").value="ANNULE"
End With
End If
End Sub

pour supprimer des données dans un tableau.
Ca fonctionne bien quand je selectionne une ligne de la colonne A, mais pas
quand j'en selectionne plusieurs (c'est toujours la ligne de la cellule
active qui subit la macro).

Est-ce normal ? Pourquoi (Selection <>ActiveCell) ? On peut sans doute
changer ça, non ?

Merci d'avance et bonne journée à tous.

Pierre.M


FFO
Le #20745251
Salut à toi

Les lignes :
.Range("D1,G1, J1:M1").ClearContents
.Range("B1").value="ANNULE"

traite seulement la 1° ligne de la sélection que représente le chiffre 1

Si tu veux traiter toutes les lignes d'une sélection utilises plutôt ceci :

Sub erreur()
If Not Intersect(Range("A1:A200"), Selection) Is Nothing Then
With Selection
For i = 1 To Selection.Rows.Count
.Range("D" & i & ",G" & i & ", J" & i & ":M" & i & "").ClearContents
.Range("B" & i).Value = "ANNULE"
Next
End With
End If
End Sub

Celà devrait mieux convenir

Dis moi !!!!!!
FS
Le #20745681
Bonjour,

Tu peux aussi utiliser une boucle For..Each :

Private Sub erreur()
Dim cell As Range
If Not Intersect(Range("A1:A200"), Selection) Is Nothing Then
For Each cell In Selection
cell.Range("D1,G1, J1:M1").ClearContents
cell.Range("B1").Value = "ANNULE"
Next
End If
End Sub

NB : (Juste au cas où...) Comme tu as déclaré ta procédure Private elle
n'apparaît pas dans la liste affichée (dans le tableur) par Alt+F8.
Cependant, comme c'est assez pratique de tester "en situation", si tu
tapes dans la boite de dialogue le nom de la procédure (ici 'erreur') le
bouton Exécuter deviendra disponible et tu pourras tester ton code.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Pierre.M a écrit :
Bonjour,

J'utilise une macro du genre (je simplifie...) :

Private sub erreur()
If Not Intersect (Range("A1:A200"), Selection) Is Nothing then
With Selection
..Range("D1,G1, J1:M1").ClearContents
..Range("B1").value="ANNULE"
End With
End If
End Sub

pour supprimer des données dans un tableau.
Ca fonctionne bien quand je selectionne une ligne de la colonne A, mais
pas quand j'en selectionne plusieurs (c'est toujours la ligne de la
cellule active qui subit la macro).

Est-ce normal ? Pourquoi (Selection <>ActiveCell) ? On peut sans doute
changer ça, non ?

Merci d'avance et bonne journée à tous.

Pierre.M



Pierre.M
Le #20748651
Merci à tous les 3.
Mon problème est résolu et de 3 manières différentes en plus !
Quoi de mieux pour apprendre ?
Bonne soirée.

Pierre.M




On 2009-12-11 10:38:06 +0100, Pierre.M said:

Bonjour,

J'utilise une macro du genre (je simplifie...) :

Private sub erreur()
If Not Intersect (Range("A1:A200"), Selection) Is Nothing then
With Selection
.Range("D1,G1, J1:M1").ClearContents
.Range("B1").value="ANNULE"
End With
End If
End Sub

pour supprimer des données dans un tableau.
Ca fonctionne bien quand je selectionne une ligne de la colonne A, mais
pas quand j'en selectionne plusieurs (c'est toujours la ligne de la
cellule active qui subit la macro).

Est-ce normal ? Pourquoi (Selection <>ActiveCell) ? On peut sans doute
changer ça, non ?

Merci d'avance et bonne journée à tous.

Pierre.M


Publicité
Poster une réponse
Anonyme