Incrémenter une plage excel

Signaler
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
-
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
-
Bonjour à tous,
Qqn aurait-il une idée pour incrémenter une plage à chaque clic.
Pour ma part j'utilise "Selection_change de ma feuille" le hic c'est que je doit à chaque fois cliquer sur une autre plage et revenir ensuite a la plage qui doit être incrémenter (1, 2,3,4 etc....)

Je suis preneur de toute idée ou code merci d'avance



Cordialement, Jean-Paul
______________________________________________________________________
Le Savoir n'a de valeur que s'il est partagé

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Ha, d'accord, je n'avais pas saisi.
En effet, point de solution puisqu'il n'y a pas eu de modif, pas de recalcul nécessaire.
La seule solution est d'utiliser les APIs pour lire l'état des boutons de la souris.
Mais cela risque d'être compliqué sous VBA.
Il faut "hooker" (faire un hook) des évènements windows et filtrer les infos en rapport avec les boutons de la souris.
Je n'ai pas ça sous la main.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut Jean-Paul

"Incrémenter" ?
Passer le contenu d'une cellule de X à X+1 ?
ou bien passer à la cellule suivante ? (dessus, dessous, à gauche, droite ?)

"à chaque clic" ?
Clic sur quoi ?

Si tu parles d'incrémenter la valeur d'une cellule et que tu sois obligé de changer de sélection, c'est que le code que tu utilises doit utilise l'objet Selection, ce qui n'est pas recommandé.
Utilise plutôt un objet Range :
    Dim oRange As Range
    Set oRange = Range("A4012")
    oRange.Value = oRange.Value + 1

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Salut Jack,
J'utilise les objets range la dessus pas de prob
donc un exemple:
je clique sur la cellule "A1" (pour moi se sont des plages) ==> la valeur de cette plage passe à 1
Je reclique sur cette même plage ==> la valeur passe à 2
et ainsi de suite.
J'ai un code qui tourne mais je dois faire:
clic sur "A1" ==> la valeur passe à 1
pour que la valeur de "A1" passe à 2 je dois d'abord faire un clic sur une autre plage ex: "A2" puis cliquer sur "A1".

c'est normal puisque j'utilise la sub SelectionChange de ma feuille


tout ça car je suis un peu fainiant et j'utilise surtout la souris dans cette feuille

Cordialement, Jean-Paul
______________________________________________________________________
Le Savoir n'a de valeur que s'il est partagé
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Merci jack,
j'ai contourné le prob je fais un .Offset(0,-1) pour sélectionner une colonne caché largeur = 0

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Static MyTarget
' on vérifie si on a clique dans la plage voulue
If IsCellInRange(Target, "Bouches") = True Then
'
If MyTarget = "" Then
MyTarget = Target.Address
Target.Value = Target.Value + 1
Target.Offset(0, -1).Select
MyTarget = ""

End If
End If


Si quelqun à quelque chose de plus propre je suis preneur
Cordialement, Jean-Paul
______________________________________________________________________
Le Savoir n'a de valeur que s'il est partagé
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Oui, en effet, bonne astuce.
Pourquoi as-tu besoin de MyTarget ?
Si tu veux simplement ne pas traiter l'évènement déclenché par le passage sur ta colonne fantôme, suffit de tester si Target.Visible est True (ou Width = 0)
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
Bé quand je fais le .Offset Excel relance "SelectionChange de la feuille, donc c'est pour éviter de relancer le code de la procédure.
MyTarget est déclarer en Static si je ne fais pas cela je me retrouve avec l'incrémentation dans ma plage caché.

Mais bon si qqn à mieux je suis preneur.

Tant que je suis là je recherche un bon bouquin sur le Visual Basic 2010 de bonne facture et pas pour les débutants.


Cordialement, Jean-Paul
______________________________________________________________________
Le Savoir n'a de valeur que s'il est partagé