Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA-Selection

4 réponses
Avatar
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

4 réponses

Avatar
Daniel.C
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


Avatar
FFO
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 !!!!!!
Avatar
FS
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



Avatar
Pierre.M
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