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

Macros et VBA Excel Discussion :

Symétriser une sélection [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut Symétriser une sélection
    Bonjour à toutes et à tous,

    J'ai la moitié inférieure d'une matrice, que je sais être symétrique. Je voudrais donc copier le contenu de chaque cellule non vide dans la cellule symétrique équivalente. Et je dois avouer que j'ai un peu de mal à gérer les adresses, et à voir comment trouver l'adresse de la cellule symétrique à celle sélectionnée..

    Une idée s'il vous plait ?
    Merci d'avance !

  2. #2
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    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
    Sub TraceSymetrie()
    '---------------------------------------------------------------------------------------
    ' Procédure : TraceSymetrie
    ' Auteur    : Maxence HUBICHE (maxence_hubiche@1formaxion.com - http://www.1formaXion.com)
    ' Date      : 08/01/2011
    ' Objet     : Comment tracer la symétrie par rapport à une ligne d'une matrice.
    '               La symétrie sera reproduite au-dessus de la sélection en cours
    '---------------------------------------------------------------------------------------
    '
        Dim lNumRow As Long     'Compteur pour le nombre de lignes à traiter
        Dim lNumCol As Long     'Compteur pour le nombre de colonnes à traiter
     
        'Pour chaque ligne de la sélection
        For lNumRow = 1 To Selection.Rows.Count
            'Pour chaque colonne de la sélection
            For lNumCol = 1 To Selection.Rows.Count
                'Si la cellule concernée n'est pas vide
                If Not IsEmpty(Selection.Cells(lNumRow, lNumCol)) Then
                    'Ecrire sa valeur dans sa symétrie
                    Selection.Range("A1").Offset(-lNumRow, lNumCol - 1).Value = Selection.Cells(lNumRow, lNumCol).Value
                'Sinon
                Else
                    'la cellule est vide : rien à faire
                End If
            'colonne suivante
            Next
        'ligne suivante
        Next
    'Fin du process
    End Sub

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Une autre approche, en utilisant un tableau. On est bien d'accord :
    • une matrice symétrique est carrée
    • la diagonale va de haut-gauche à bas-droit.
    • tu veux recopier le triangle du bas.

    SI ok, je te propose, en utilisant un nom pour désigner la plage contenant la matrice. Je ne fais pas de distinction entre une cellule vide et une renseignée car dans tous les cas il faut conserver la symétrie.
    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
    Sub subCompleteMatriceSymetrique()
    Dim v As Variant, x As Integer, y As Integer
     
    v = ThisWorkbook.Names("nmMatrSym").RefersToRange.Value
     
    If UBound(v, 1) <> UBound(v, 2) Then GoTo lblErr1
     
    For x = 2 To UBound(v, 1)
        For y = 1 To x
            v(y, x) = v(x, y)
        Next y
    Next x
     
    ThisWorkbook.Names("nmMatrSym").RefersToRange.Value = v
     
    lblSortie:
        v = Empty
        Exit Sub
     
    lblErr1:
        MsgBox "la matrice n'est pas carrée!"
        GoTo lblSortie
     
    End Sub
    Cordialement,

    PGZ

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Et une autre approche
    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
    Sub Test()
    Symetrisation Range("A1:E5"), Range("A7:E11")
    End Sub
     
    Sub Symetrisation(RngSrce As Range, RngDest As Range)
    Dim M As String
     
    If RngSrce.Rows.Count = RngSrce.Columns.Count Then
       If RngSrce.Rows.Count = RngDest.Rows.Count And RngSrce.Columns.Count = RngDest.Columns.Count Then
          M = RngSrce.Address(0, 0)
          With RngDest
             .FormulaArray = "=IF(" & M & "<>TRANSPOSE(" & M & ")," & M & "+TRANSPOSE(" & M & ")," & M & ")"
             .Value = .Value
          End With
       End If
    End If
    End Sub

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonsoir

    à essayer
    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
     
    Sub Sym()
      Dim d1 As Long 'nombre de lignes
      Dim L1 As Long, C1 As Long 'références première cellule du tableau
      Dim L As Long, C As Long 'variables de boucles
      Dim t 'tableau des valeurs symétriques, diagonale comprise
      d1 = Selection.Rows.Count
      If d1 = 1 Or Selection.Columns.Count = 1 Then Exit Sub 'rien si 1 ligne ou 1 colonne
      t = Application.Transpose(Selection)
      L1 = Selection.Row: C1 = Selection.Column
      For L = L1 To L1 + d1 - 1
        For C = C1 To C1 + d1 - 1
          If t(L - L1 + 1, C - C1 + 1) <> "" Then
            Cells(L, C) = t(L - L1 + 1, C - C1 + 1)
            Cells(L, C).Interior.ColorIndex = 3 'pour visualiser les ajouts
          End If
        Next
      Next
    End Sub

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    Merci !

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

Discussions similaires

  1. Faire une sélection sur une image?
    Par sybilla dans le forum MFC
    Réponses: 3
    Dernier message: 29/08/2005, 13h34
  2. Récupérer une sélection
    Par Poussera dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/04/2005, 11h16
  3. Besoin d'un conseil pour une sélection Access/fichier
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/03/2005, 19h10
  4. Redirection automatique lors d'une sélection dans un Select
    Par MiJack dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2004, 18h09
  5. Fonction de zoom à partir d'une sélection souris
    Par mick74 dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/08/2004, 21h41

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