Excel 2003 macro

abyssus Messages postés 29 Statut Membre -  
abyssus Messages postés 29 Statut Membre -
bjr,
ma question : j'ai 5 cellules sur une feuille excel. comment faire pour qu'en changeant le contenu d'une des 5 cellules les 4 autres soient mises à jour automatiquement svp ? j'ai utilisé une macro avec <Private Sub Worksheet_Change(ByVal Target As Range)> mais ça ne marche que pour 3 cellules.
merci
Configuration: Windows XP
Firefox 2.0.0.5

3 réponses

  1. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Bonjour,

    Si ça marche pour trois, pourquoi ça ne marchait pas pour quatre ?.. ;))

    Il faudrait que tu nous donnes le code.

    m@rina
    0
    1. abyssus Messages postés 29 Statut Membre 1
       
      voici le code pour 3. je pense qu'il existe un code bcp + compressé
      merci d'avance


      Private Sub Worksheet_Change(ByVal Target As Range)
      x = Range("O4").Value
      y = Range("V3").Value
      z = Range("V32").Value
      If x = y And y = z Then Exit Sub
      If Target.Address = "$O$4" Then
      Range("V3") = Target
      Range("V32") = Target
      ElseIf Target.Address = "$V$3" Then
      Range("O4") = Target
      Range("V32") = Target
      ElseIf Target.Address = "$V$32" Then
      Range("O4") = Target
      Range("V3") = Target
      End If
      0
  2. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    Rebonjour,

    Je t'ai écrit une autre macro, plus légère. Les imbrications de IF ne servent à rien.

    Pour plus de facilité, j'ai utilisé les cellules A1, B1 et C1. A toi de modifier par les tiennes. Tu peux utiliser autant de cellules que tu veux.

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    x = Range("A1").Value
    y = Range("B1").Value
    z = Range("C1").Value
    If x = y And y = z Then Exit Sub
    
    If Target.Address = "$A$1" Then Range("B1", "C1") = x
    If Target.Address = "$B$1" Then Range("A1", "C1") = y
    If Target.Address = "$C$1" Then Range("A1", "B1") = z
    
    End Sub


    m@rina
    0
    1. abyssus Messages postés 29 Statut Membre 1
       
      merci pour la réponse, j'ai essayé et ça ne marche que pour un bloc. j'ai plusieurs blocs pareils, je pense que ç'est à cause de "Exit Sub" parce que chaque bloc a un "Exit Sub" alors cmt faire ?
      0
  3. m@rina Messages postés 27633 Date d'inscription   Statut Modérateur Dernière intervention   11 564
     
    En fait, il me semble que la ligne
    If x = y And y = z Then Exit Sub
    ne sert à rien

    puisque, automatiquement, les cellules changent en fonction d'une qui est modifiée... Donc, elles seront forcément identiques...
    A moins que tu ne m'aies pas tout dit ! ;)

    m@rina
    0
    1. abyssus Messages postés 29 Statut Membre 1
       
      parce que sans cette condition, le pgm tourne indéfiniment !!!!
      et justement j'ai essayé ton pgm avec 4 cells et ça ne marche pas parce que Range() ne prend que 2 arguments : If Target.Address = "$A$1" Then Range("B1", "C1") = x
      si je fais Union(Range(), Range(),...), ça sélection une plage et non des cellules !!!
      0
    2. abyssus Messages postés 29 Statut Membre 1
       
      excuses-moi, je pose le pb autrement :
      comment mettre à jour des cellules d'une colonne "ok/nok" en fonction des col_A et col_C ?
      càd si je mets "ok" sur la cellule à droite de nom2, la macro cherche toutes les cellules "nom2" et mets ok sur les cellules correspondantes, comme sur l'exemple ci-dessous.

      merci pour ta réponse

      col_A ok/nok col_C ok/nok
      nom1 nom2 ok
      nom2 ok nom5
      nom3 nom2 ok
      nom4 nom3
      nom4 nom4
      0