Double-clic sur un TCD pour changer une valeur

Bonjour à tous,

J'éspère que vous passez de belles fêtes de fin d'année.

Je ne suis pas un adepte de VBA mais j'en ai besoin pour créer un outil professionnel, alors je me permets de solliciter votre aide. La plupart des données étant confidentielles, je vais tenter de vous décrire au mieux ce que je souhaiterais :

Suite à plusieurs exportations, je consolide le tout dans un onglet "Base" qui va me servir de base de données pour réaliser un tableau croisé dynamique sur un nouvel onglet nommé "COMPIL".

Dans celui-ci, je souhaiterai faire en sorte qu'en faisant un double clic sur les données de la colonne M, je puisse faire passer la valeur de 0 à 1 et inversement (Bien entendu, il faudrait que cela modifie la valeur dans "Base"). D'après ce que j'ai vu dans plusieurs blogs, je suis allé dans visualiser le code de l'onglet "COMPIL" et j'ai collé le code suivant :

Private Sub worksheet_beforedoubleclick(ByVal target As Range, cancel As Boolean)
If Not Intersect([M:M], target) Is Nothing Then target.Value = IIf(target.Value = "0", "1", "0")
cancel = True
End Sub

Si cela fonctionne sur des données dans la base, ce n'est malheureusement pas le cas dans mon TCD. Auriez-vous une solution s'il vous plait ?

En parallèle, je rencontre un autre problème qui est bien moins important cependant:

Je souhaite afficher des codes barres avec la police "Code EAN 13". Cela fonctionne parfaitement dans l'onglet "Base", mais pas dans le TCD... Sauriez-vous s'il existe un problème de compatibilité de la police avec l'outil ? Sinon je tâcherai de trouver de mon côté.

Merci à vous pour votre aide.

Sébastien LORET

Bonjour

Les valeurs calculées dans un TCD ne peuvent être modifié que par la modification de sa source

Par défaut le double clic dans un TCD affiche un extrait de la source

Anonymise tes données et joins un extrait

Corrige aussi ton profil : la langue d'Excel importe moins que se version 2016, 2019, 2021, 365...

Bonjour Chris,

Tout d'abord, merci pour ton aide.

Etant donné la quantité de données à anonymiser, cela me parait compliqué à réaliser tout en conservant un extrait exploitable.

Effectivement, j'avais cru comprendre que seul la source pouvait être modifiée, mais un autre service a conçu un fichier du même type. Le double-clic se fait bien dans le TCD et cela modifie les valeurs dans le fichier source également. Malheureusement, la personne ayant conçu le dit fichier n'est plus dans l'entreprise et personne ne sait reproduire la démarche ...

Si avec ces éléments tu as une idée, je suis preneur.

Sinon je vais continuer de chercher de mon côté et te remercie pour ton aide

Ps : La correction a été faite, merci.

RE

Cela nécessite de

  1. trapper l'extrait créé par le double clic
  2. trouver la correspondance avec la source
  3. modifier la source,
  4. supprimer l'extrait
  5. actualiser le TCD

selon la structure du TCD le point 2 est le plus complexe sauf si l'extrait se limite à une ligne, auquel cas on se demande à quoi sert le TCD...

Bonjour Chris,

Après avoir fait de plus amples recherches, j'ai trouvé un exemple que je n'arrive pas à adapter à mon fichier.

Tu trouveras en P.J. un extrait du fichier pour mieux comprendre ce que j'ai fait (J'ai tenté de modifier le code directement) :

Concrètement, je souhaiterais que dans le TCD sur l'onglet "COMPIL", sur les valeurs dans la colonne K (Préco), la valeur switch entre 0 et 1 à chaque double-clic. Pour rappel, il faudrait que cela change les valeurs dans le document source (onglet "Base").

Sur l'exemple que j'ai trouvé, la macro fonctionne parfaitement ==> Le fichier en question :

10tcd-sample.xlsm (25.59 Ko)

Je te remercie pour le temps que tu m'accordes, en espérant que tu arriveras à trouver la solution à mon problème.

Bonne journée.

RE

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    If Intersect(Target, Me.PivotTables(1).DataBodyRange) Is Nothing Or Target.Column <> 11 Or _
      Target.Value = "" Then Exit Sub
    EAN = Target.Offset(0, -9)
    If EAN = "(vide)" Then Exit Sub
    Select Case Target.Value
        Case 1
            valeur = 0
        Case 0
            valeur = 1
    Case Else
        Exit Sub
    End Select
    With Sheets("Base")
        Set A_Changer = .Range("A:A").Find(EAN)
        If Not A_Changer Is Nothing Then A_Changer.Offset(0, 205).Value = CDbl(valeur)
    End With
    ThisWorkbook.RefreshAll
End Sub

Je maintiens ma remarque avec 1 ligne de TCD par ligne de la source c'est un pseudo TCD

Bonjour Chris,

Cela fonctionne parfaitement, je vous remercie pour votre aide.

Belle année 2022 à vous !

Bonjour,

Suite à un test avec plusieurs personnes, il s'avère que le fichier provoque désormais des ralentissements sur les ordinateurs de plusieurs personnes depuis la mise en place de la macro avec le double-clic.

Est-ce qu'il est possible de modifier les valeurs directement dans le TCD en les saisissant (Donc sans double-clic) tout en modifiant la base comme avant , pour éventuellement alléger le fichier et permettre d'éviter les ralentissements ?? Ou alors cela ne changera rien ?

Merci pour votre aide.

Bonjour

Non il n'est pas possible de saisir dans un TCD sauf étiquettes

Le problème serait le même car détecter un double clic ou une saisie repose sur le même principe

Tout double clic en dehors du TCD arrête immédiatement la macro et, le double clic étant plus rare dans Excel qu'un changement de valeur, le code ne se déclenche pas en dehors de cette manip.

Il parait donc curieux que ce seul code ralentisse Excel...

Le code est-il bien dans le bon module ?

Rechercher des sujets similaires à "double clic tcd changer valeur"