selection plage

Sarlone

XLDnaute Occasionnel
bonjour a tous

je cherche a faire la chose suivante:

si une case de la plage qui va de la cellule U7 a la cellule qui contient le mot 'moyenne' (de la meme ligne) est double cliquée alors :
si elle contient '?' effacement de la colonne
sinon elle insere une colonne avec '?'

voici le code que j'ai trouvé:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

'trouve l'adresse de la cellule contenant moyenne dans la plage allant de u7 a la derniere cellule remplie de la ligne 7
Celfin = Range(range"U7",range("IV7").end(xlToLeft)).Find("moyenne").Address

'nomme la plage allant de u7 a la cellule contenant 'moyenne'
Plage = range(range("U7"), Range(Celfin))

If Not Intersect(Plage, Target) Is Nothing Then
If ActiveCell.Value = "?" Then
ActiveCell.EntireColumn.Delete Shift:=xlToLeft
Else
ActiveCell.EntireColumn.Insert Shift:=xlToRight
ActiveCell.Value = "?"
End If
End If
Cancel = True

End Sub

et ca marche pas

qqn aurat il une idée?
merci pour votre aide
 

Pierrot93

XLDnaute Barbatruc
Re : selection plage

Bonjour,

quand tu dis cela ne marche pas... cela veut dire quoi ? message d'erreur ou pas le résultat attendu ? Regarde dans l'aide vba, sur le mot "FIND", il y a des arguments qu'il est préférable d'indiquer.... Sinon mets en pièce jointe un tout petit fichier représentant uniquement le problème posé et le résultat attendu...

bon après midi
@+
 
G

Guest

Guest
Re : selection plage

Re,

J'ai pas tout vérifié mais il me semble qu'il y a erreur dans cette ligne:
Code:
Plage = range(range("U7"), Range(Celfin))
Ne serait-ce pas
Code:
[SIZE=3][COLOR=red]Set[/COLOR][/SIZE] Plage = range(range("U7"), Range(Celfin))

Les bases, les bases, les bases....:D

A+
 

kjin

XLDnaute Barbatruc
Re : selection plage

Bonjour ou re,
Sans doute encore rien compris
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
l = Target.Row
Set c = Range(Cells(l, 21), Cells(l, 256).End(xlToLeft)).Find("moyenne")
If Not c Is Nothing Then
    Set plage = Range(Range("U" & l), c.Offset(0, -1).Address)
    If Not Intersect(plage, Target) Is Nothing Then
        Cancel = True
        If Target = "?" Then
            Target.EntireColumn.Delete Shift:=xlToLeft
        Else
            Target.EntireColumn.Insert Shift:=xlToRight
            Target.Value = "?"
        End If
    End If
End If
End Sub
Remplace l par 7 si ça ne concerne que la ligne 7...
A+
kjin
 

Sarlone

XLDnaute Occasionnel
Re : selection plage

bonjour à tous
merci à toi Kjin c presque parfait
toutefois j'ai qqs questions stp:
1) cancel = true sert a quoi ?
2) offset(0,-1) sert a quoi ?
3) la procedure marche sauf que elle intercale une colonne vide (sans le ? dans la ligne 7, et decale la colonne ou on s'était positionné en changeant son entete (en ligne 7) (par le fameux ? ) au lieu de conserver l'entete...
j'essaye de comprendre pkoi
:p
A+
 

kjin

XLDnaute Barbatruc
Re : selection plage

Bonjour,
1) cancel = true sert a quoi ?
Evite de passer en mode édition, qui est le fonctionnement normal lorsqu'on double-click sur une cellule
Pour le coup, il est mal placé
2) offset(0,-1) sert a quoi ?
Evite de prendre en compte la cellule "moyenne"
Du coup, ça n'est plus utile
3) la procedure marche sauf que elle intercale une colonne vide (sans le ? dans la ligne 7, et decale la colonne ou on s'était positionné en changeant son entete (en ligne 7) (par le fameux ? ) au lieu de conserver l'entete...
Je suis parti de ce que tu as fait et de tes explications...j'avais bien dit que je n'avais sans doute rien compris...
Pas sûr non plus mais bon
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set c = Range(Cells(7, 21), Cells(7, 256).End(xlToLeft)).Find("moyenne")
If Not c Is Nothing Then
    Set plage = Range(Range("U" & l), c.Address)
    If Not Intersect(plage, Target) Is Nothing Then
        If Target = "?" Then
            Cancel = True
            Target.Delete Shift:=xlToLeft
        Else
            Target.Insert Shift:=xlToRight
            Target.Offset(0, -1).Value = "?"
        End If
    End If
End If

End Sub
A+
kjin
 

Sarlone

XLDnaute Occasionnel
Re : selection plage

hello
non c parfait Kjin, c'est exactement ca , j'avais a peu près modifié mais sans bien placer le cancel = true.
Je dois juste ajouter une boite de dialogue pour demander la confirmation de l'effacement de le colonne ;)
Je vais essayer de trouver ca :p dans le forum
merci pour ton aide bien precieuse
A+

ca y est c réglé merci encore
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
154

Statistiques des forums

Discussions
312 453
Messages
2 088 550
Membres
103 881
dernier inscrit
malbousquet