IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Perl Discussion :

TableMatrix: monitorer une modification


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut TableMatrix: monitorer une modification
    Bonjour,

    Je tente de colorer les cellules modifiées par rapport à leur valeur initiale mais sans vrai succès malgré de nombreux essais avec $table->bind, $table->configure(-browsecmd..) et $table->configure(-validatecmd..) .

    Le code ci-dessous fonctionne mais il y a surement beaucoup plus propre et simple, et surtout plus efficace que de rebalayer 2 hash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $table->configure (
      -browsecmd => sub {
       my ( $previous_index, $current_index ) = @_;
     
    	my $new_value = $table->get($current_index) ;
    	my $previous_value = $table->get($previous_index) ;
     
    	# Check if we did select a cell and not an entire row or a column
       if ( $previous_index =~ m{^\d+,\d+$} ) {
     
    		# Store the updated cell into hash for later needs
    		$spreadsheet_current->{$current_index} = $new_value ;
     
    		# Highlight all changes
    		while ( my ($k,$v) = each(%$spreadsheet_initial) ) {
    				$table->tagCell('modified', "$k" ) if ($spreadsheet_current->{$k} ne $spreadsheet_initial->{$k});
    		}
     
    	}
      },
     
    );
    Merci d'avance si vous pouvez donner une meilleure solution.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Peux-tu re-expliquer, je n'ai pas compris ce que tu souhaites faire. Sinon as tu regarder les exemples de la FAQs, j'ai mis un programme où je change la couleur des lignes en jouant avec les tags.

  3. #3
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Bonjour Djibril

    J'ai bien regardé en long et en large la FAQ qui est parmi les meilleures doc trouvées sur TableMatrix. J'ai vu aussi cet exemple excellent qui est probablement de toi. Mais j'ai dû loupé un épisode qq part :-).

    J'essaye de mieux expliquer ce que je souhaite faire:

    Les valeurs du tableau sont pré renseignées à partir d'une base de données.
    L'utilisateur peut modifier certaines de ces cellules. (pour l'instant, ce n'est pas restrictif, toutes les cellules sont modifiables)
    Quand il modifie une cellule et qu'il a saisi une valeur différente de la valeur initiale (celle qui vient de la dB), alors la cellule doit apparaitre dans une autre couleur (par ex en noir sur fond orange ) que celle définie initialement.

    Le code que j'ai posté fonctionne mais ce n'est pas très académique de réaliser cette fonction par comparaison de chaque cellule du hash de départ et du hash courant entré par l'utilisateur.

    Je préférerai attacher un événement à une cellule: lorsque celle-ci est éditée et validée, alors je voudrais comparer le nouveau contenu de la cellule avec son ancien contenu.
    Si les deux contenus diffèrent, alors je voudrais colorer la cellule en noir sur fond orange.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par hornetbzz Voir le message
    Bonjour Djibril

    J'ai bien regardé en long et en large la FAQ qui est parmi les meilleures doc trouvées sur TableMatrix.
    Merci !
    Citation Envoyé par hornetbzz Voir le message
    J'ai vu aussi cet exemple excellent qui est probablement de toi. Mais j'ai dû loupé un épisode qq part :-).
    , d'ailleurs je devrais le mettre dans notre FAQ, j'avais oublié ce code.

    Citation Envoyé par hornetbzz Voir le message
    J'essaye de mieux expliquer ce que je souhaite faire:

    Les valeurs du tableau sont pré renseignées à partir d'une base de données.
    L'utilisateur peut modifier certaines de ces cellules. (pour l'instant, ce n'est pas restrictif, toutes les cellules sont modifiables)
    Quand il modifie une cellule et qu'il a saisi une valeur différente de la valeur initiale (celle qui vient de la dB), alors la cellule doit apparaitre dans une autre couleur (par ex en noir sur fond orange ) que celle définie initialement.

    Le code que j'ai posté fonctionne mais ce n'est pas très académique de réaliser cette fonction par comparaison de chaque cellule du hash de départ et du hash courant entré par l'utilisateur.

    Je préférerai attacher un événement à une cellule: lorsque celle-ci est éditée et validée, alors je voudrais comparer le nouveau contenu de la cellule avec son ancien contenu.
    Si les deux contenus diffèrent, alors je voudrais colorer la cellule en noir sur fond orange.
    OK.

    Je vais essayer de reprendre mon exemple google pour te faire un exemple.

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Voici un code qui fonctionne. Le principe est le suivant.
    Tu as ton premier hash qui contient les valeurs de ton tableau et te permet de créer le tableau dans Tk. Tu crées un second Hash qui te permettra de stocker les valeurs originales des cellules sélectionnées. Dans ton événement browsecmd, tu changes la couleur de la cellule via le tag modifié uniquement si la comparaison des valeurs échoue. Le code est commenté de toute façon, dis moi si tu as besoin de plus d'explications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #!/usr/bin/perl
    use warnings;
    use strict;
    use Tk;
    use Tk::TableMatrix;
     
    my $top = MainWindow->new( -title => 'TableMatrix - gestion cellule precedente', );
     
    # Supposons que notre BD génère ce tableau.
    my $tableau_bd = {};
    for my $r ( 0 .. 7 ) {
      for my $c ( 0 .. 7 ) {
        $tableau_bd->{"$r,$c"} = "($r,$c)";
      }
    }
     
    # Tableau qui contiendra les valeurs d'origine de notre tableau.
    my %tableau_origine;
     
    # Création du widget TableMatrix
    my $table = $top->Scrolled(
      'TableMatrix',
      -variable   => $tableau_bd,
      -selectmode => 'extended',
      -bg         => '#CCCCCC',
      -fg         => 'black',
    );
     
    # Configuration des cellules ayant été modifiées
    $table->tagConfigure(
      'modified',
      -bg => '#FF6633',    # Couleur de fond orange
      -fg => 'black',      # Texte en noir
    );
     
    # Créons un évenement permettant de changer la couleur de fond de la cellule précédemment sélectionnée
    # si l'utilisateur l'avait modifié par rapport à l'originale.
    # N.B. Le traitement se fait donc sur la sélection précédente.
    # Mais il faut être capable de connaitre le contenu de la cellule à l'origine dont il faudra stocker les valeurs originale dans un hash.
    # Pour éviter de stocker tout le tableau en double (car je doute que l'utilisateur modifie tout le tableau), on stockera les valeurs originale
    # que si nécessaire.
     
    $table->configure(
      -browsecmd => sub {
        my ( $previous_index, $current_index ) = @_;
     
        # Valeur de la case selectionnée
        my $value_current_cell = $table->get($current_index);
     
    # A chaque fois que l'utilisateur sélectionne une cellule, on stocke la valeur originale si ce n'était pas fait
        if ( not exists $tableau_origine{$current_index} ) {
          $tableau_origine{$current_index} = $value_current_cell;
        }
     
        # Si une case avait déjà était sélectionnée
        if ($previous_index) {
     
          # Valeur de la case précedemment selectionnee
          my $value_previous_cell = $table->get($previous_index);
     
          # Affectons un tag à la cellule si cette dernière est différente de l'originale
          if ( $value_previous_cell ne $tableau_origine{$previous_index} ) {
            $table->tagCell( 'modified', $previous_index );
          }
        }
      },
    );
     
    # Affichage du widget dans la fenêtre
    $table->pack( -expand => 1, -fill => 'both' );
     
    MainLoop;

  6. #6
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Merci Djibril, nickel ! J'ai juste remplacé $tableau_origine{$index} par $tableau_origine->{$index}. Je placerai le code complet avec les différentes solutions si ça peut servir la FAQ.

    PS: Au passage, ça me permet de m'apercevoir de la stupide boulette que j'avais faite dans mes essais avec bind et vcmd: j'avais placé le table->configure après le $table->pack...

  7. #7
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    J'ai ajouté une autre solution avec bind sur la touche <entree>.

    Voila les 3 solutions testées et récapitulées ici, sachant que la solution 1 fonctionne mais n'est pas des plus élégantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    #!/usr/bin/perl -w
     
    # ########
    # Doc
    # ########
    # http://docstore.milk.ua/orelly/perl3/tk/index.htm
    # http://www.hisel.com/perl/TkTutorial/
    # http://perl.developpez.com/faq/tk/
    # http://articles.mongueurs.net/magazines/linuxmag62.html
    # http://search.cpan.org/dist/Tk-TableMatrix/pod/TableMatrix.pod
    # http://perso.tls.cena.fr/jestin/Ptk/ptk.html
    # http://docstore.mik.ua/orelly/perl3/tk/ch15_02.htm
     
    # PRODUCTION
    use strict;
    use warnings;
    use Tk; # require installation
    use utf8;
     
    # These are all the modules that we are using in this script.
    use Tk::Frame;
    use Tk::Scrollbar;
    use Tk::StatusBar; # require installation
    use Tk::DialogBox;
    use Tk::Balloon; # require installation
    use Tk::TableMatrix::SpreadsheetHideRows; # require installation
     
     
    # DEVELOPPMENT
    use Data::Dumper;
     
    use constant {
    	true => 0,
    	false =>0,
    };
     
     
    sub open_frame {
     
    	my ($dbh, $db_table, $db_fields, $window_title, $array_of_hashes) = @_ ;
     
    	my ($nb_col, $nb_row) = (0, 0);
     
    	my $minheight=370;
    	my $minwidth=700;
    	my $col_width_small = 10;
    	my $col_width_big = 5 * $col_width_small;
    	my $padx=10;
    	my $activecell_bgcolor="yellow";
     
    	# ###########################
    	# Build the spreadsheet hash
    	# ###########################
    	my $count_row=0;
    	my $count_col=0;
     
    	# keep initial data stored in a hash
    	my $spreadsheet_initial= {};
    	my $spreadsheet_current= {};
     
    	foreach my $row (@$array_of_hashes) {
    		while ( my ($k,$v) = each (%$row) ) {
    			$spreadsheet_initial->{"$count_row,$count_col"} = $k if ($count_row == 0) ; # title row from hash
    			$spreadsheet_initial->{"$count_row,$count_col"} = $v if ($count_row > 0) ; # data rows
    			$spreadsheet_current->{"$count_row,$count_col"} = $spreadsheet_initial->{"$count_row,$count_col"};
    			$count_col++;
    		}
    		$nb_col = ($count_col > $nb_col)? $count_col : $nb_col ;
    		$count_col=0;
    		$count_row++;
    	}
     
    	$nb_row = $count_row;
     
    	# ###########################
    	#  Création du TopLevel
    	# ###########################
    	my $top = MainWindow->new;
    	$top->minsize( $minwidth, $minheight );
    	$top->title($window_title);
     
    	# Status bar
    	my $status_bar = add_status_bar($top) ; 
     
    	#  Création des cadres (Widget Frame)
    	# la zone de données
    	my $frame1 = $top->Frame()->pack(-fill => 'x'); # "x" =>remplir tte la largeur du widget parent
     
    	# la zone des boutons
    	my $frame2 = $top->Frame()->pack(-fill => 'x');
     
    	# Frame 1                    
    	my $table = $frame1->Scrolled('SpreadsheetHideRows',
    						-rows => $nb_row,
    						-cols => $nb_col,
    				   -width => 0, #Specifies the desired width for the window, in columns. If zero or less, then the desired width for the window is made just large enough to hold all the columns in the table.
    				   -height => 0,
    					  -titlerows => 1,	# Titre des colonnes = Number of rows to use as a title area. Defaults to 0.
    					  -titlecols => 0,	# Titres des lignes = Number of cols to use as a title area. Defaults to 0.
    					  -variable => $spreadsheet_current,
    					  -selectmode => 'extended', #Specifies one of several styles for manipulating the selection. The value of the option may be arbitrary, but the default bindings expect it to be either single , browse , multiple , or extended ; the default value is browse . 
    					  -resizeborders => 'both', #Specifies what kind of interactive border resizing to allow, must be one of row, col, both (default) or none.
    					  -selectorCol => 0,
    					  -scrollbars => 'ose' # o: show only if necessary at positions s=south, e=east
    						);
     
    	# Set spreadsheet columns width
    	my $count=0;
    	my $width;
    	my @col_width = ( $col_width_small, $col_width_small, $col_width_small, $col_width_big);
    	foreach my $col (0..$nb_col){
    		$width = ($col_width[$count])? $col_width[$count] : 0 ;
    		$table->colWidth( $col, $width );
    		$count++;
    	}
     
    	# Frame 2: Création des widgets Button
    	my $B_save   = $frame2 -> Button (-background => 'green', -text => 'Save', -padx=>3*$padx, -command=> [
    		\&save_to_db, $dbh, $db_table, $db_fields, $spreadsheet_initial, $spreadsheet_current, $top ] );
     
    	my $B_refresh = $frame2 -> Button (-background => 'gray', -text => 'Refresh', -padx=>$padx , -command=> [ sub {
    		# close current window
    		$top->destroy;
    		# open a new window with the call parameters
    		open_frame($dbh, $db_table, $db_fields, $window_title, $array_of_hashes);
     
    		} ]);
    	my $B_reload  = $frame2 -> Button(-background => 'gray', -text => 'Reload',  -padx=>$padx);
    	my $B_close  = $frame2 -> Button(-background => 'gray', -text => 'Close',  -padx=>$padx, -command=> [ sub {$top->destroy;} ]);
    	my $B_exit   = $frame2 -> Button(-background => 'gray', -text => 'Exit Program',  -padx=>$padx, -command=> [ sub { exit 1;} ]);
     
     
    	# Show buttons
    	$B_save-> pack( -side=>'right');
    	$B_refresh-> pack( -side=>'right');
    	$B_reload-> pack( -side=>'right');
    	$B_close -> pack( -side=>'right');
    	$B_exit-> pack( -side=>'left');
     
    	# Creation des infosbulles sur les boutons
    	attach_balloon($top, $status_bar, $B_save, "Save the modified data", "This will save the modified data into db");
    	attach_balloon($top, $status_bar, $B_refresh, "Refresh to initial data", "This will refresh the client data to initial data (need to Save)");
    	attach_balloon($top, $status_bar, $B_reload, "NOT IMPLEMENTED YET", "This will reload the client data from database");
    	attach_balloon($top, $status_bar, $B_close, "Exit this window", "This will drive back to the program execution");
    	attach_balloon($top, $status_bar, $B_exit, "Exit the program", "This will stop completely the program run code");
     
    	# ###########################
    	# "Bind" de la zone de saisie
    	# ###########################
     
    	# Monitor and control entry data changes
    	$table->tagConfigure( 'modified', -bg =>'orange', -fg=>'black', -relief=>'sunken');
    	$table->tagConfigure('active', -bg=>$activecell_bgcolor);
    	$table->tagConfigure('default',  -bg =>'white', -fg=>'black', -relief=>'sunken');
     
    	# Solution 1: browse and compare both hashes :-(
    	#$table->configure (
    	#  -browsecmd => sub {
    	#   my ( $previous_index, $current_index ) = @_;
    	#	
    	#	my $new_value = $table->get($current_index) ;
    	#	my $previous_value = $table->get($previous_index) ; 
     
    		# Check if we did select a cell and not an entire row or a column
    	#   if ( $previous_index =~ m{^\d+,\d+$} ) {
     
    			# Store the updated cell into hash for later needs
    	#		$spreadsheet_current->{$current_index} = $new_value ; 
     
    			# Highlight all changes
    	#		while ( my ($k,$v) = each(%$spreadsheet_initial) ) {
    	#				$table->tagCell('modified', "$k" ) if ($spreadsheet_current->{$k} ne $spreadsheet_initial->{$k});
    	#		}
    	#	}
    	# },
     
    	#); 
     
    	# Solution 2 by Djibril
    	# See http://www.developpez.net/forums/d1074157/autres-langages/perl/interfaces-graphiques/tablematrix-monitorer-modification/#post5953572
    	#$table->configure(
    	#  -browsecmd => sub {
    	#    my ( $previous_index, $current_index ) = @_; 
     
    		# Valeur de la case selectionnée
    	#    my $value_current_cell = $table->get($current_index);
     
    	# A chaque fois que l'utilisateur sélectionne une cellule, on stocke la valeur originale si ce n'était pas fait
    	#    if ( not exists $spreadsheet_initial->{$current_index} ) {
    	#          $spreadsheet_initial->{$current_index} = $value_current_cell;
    	#    }
     
    		# Si une case avait déjà était sélectionnée
    	#    if ($previous_index) {
     
    		  # Valeur de la case précedemment selectionnee
    	#      my $value_previous_cell = $table->get($previous_index); 
     
    		  # Affectons un tag à la cellule si cette dernière est différente de l'originale
    	#      if ( $value_previous_cell ne $spreadsheet_initial->{$previous_index} ) {
    	#        $table->tagCell( 'modified', $previous_index );
    	#      } else {
    	#        $table->tagCell( 'default', $previous_index );
    	#		}
    	#    }
    	#  },
    	#);
     
     
    	# Solution 3: bind sur la touche ENTER
    	$table->bind(
    		'<Key-Return>' =>
    		sub {
    			my ($window) = @_;
     
    			# NOTE: Prevent defaut <Return> binded motion (move down), or decrement selection row by 1
     
    			# Get <entry> cell infos 
    			my $current_index  = $window->curselection(); # With no arguments, it returns the sorted indices of the currently selected cells. Otherwise it sets all the selected cells to the given value.
    			my ($row, $col) = split (',', @$current_index[0], 2) ;
     
    			$row-- if $row > 0 ;
    			$current_index = "$row,$col";
    			my $current_value  = $window->get($current_index);
     
    			# trace changes by comparing current cell value with initial data
    			my $not_matching = ($current_value ne $spreadsheet_initial->{"$current_index"})? true : false ;
     
    			# tag the current cell if entry is not matching the initial data
    			$table->tagCell( 'modified', $current_index ) if $not_matching;
     
    			# tag back the current cell if it has been modified back to the initial value
    			$table->tagCell( 'default', $current_index ) if ! $not_matching;
    		}
    	  ); 
     
    	# Solution 4: -vcmd
    	# to be done
     
    	# highlight the cell on mouse hover
    	$table->bind(
    		'<Motion>', 
    		sub {
    		  my $w  = shift;
    		  my $Ev = $w->XEvent;
    		  if ( $w->selectionIncludes( '@' . $Ev->x . "," . $Ev->y ) ) {#
    			Tk->break;
    		  } 
    		  $w->selectionClear('all');
    		  $w->selectionSet( '@' . $Ev->x . "," . $Ev->y );
    		  Tk->break;
    		  ## "break" prevents the call to TableMatrixCheckBorder
    		}
    	  ); 
     
    	# Centrer ma fenêtre
    	# center_widget($top );
     
    	# Affichage
    	$table->pack(-expand => 1, -fill => 'both');
     
     
    	Tk::MainLoop;
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recalculer une feuille Excel après une modif de style
    Par ThierryAIM dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/03/2007, 20h55
  2. Horodatage d'une modif dans un formulaire
    Par kluh dans le forum Access
    Réponses: 1
    Dernier message: 25/11/2005, 08h59
  3. Comment détecter une modification ?
    Par programaniac dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/11/2005, 13h25
  4. [PDE] Problème pour sauvegarder une modif dans un éditeur
    Par simsky dans le forum Eclipse Java
    Réponses: 11
    Dernier message: 11/08/2005, 15h05
  5. Enregistrer une modification dans un formulaire
    Par micheline dans le forum Access
    Réponses: 5
    Dernier message: 26/06/2005, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo