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 :

Insertion formes automatiques [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Insertion formes automatiques
    Bonjour à tous ou à toutes,

    je souhaite savoir s'il est possible insérer dans un tableau des formes automatiques dans une colonne en les sélectionnants dans une liste déroulante ou bien par VBA suivant un critère.
    Mon but est de signaler le caractère d'urgence d'une action à mener par un symbole (forme auto.) de différentes couleurs
    1. VERT = PAS DE CARACTÈRE D'URGENCE
    2. ORANGE = URGENCE NORMALE
    3. ROUGE = URGENT
    4. NOIR = TRÈS URGENT

    La forme automatique sélectionnée se positionne dans la cellule elle détermine:
    • soit un besoin de soins par un CROIX
    • soit un besoin d'alimentation par un CAMEMBERT
    • soit un besoin de couchage par un CARRE
    • etc ...


    Ces formes peuvent être stockées dans une feuille nommée "PARAMETRE" du classeur par exemple.

    merci pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    J'ai écrit ce code avec XL2010. Je ne sais pas s'il fonctionnera avec XL2003. A mettre dans le module de la feuille. Les besooins sont en colonne C et les urgences en colonne E; les icônes en colonne G :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column <> 3 And Target.Column <> 5 Then Exit Sub
        If Cells(Target.Row, 3) <> "" And Cells(Target.Row, 5) <> "" Then
            Forme Target.Row
        End If
    End Sub
     
    Sub Forme(Ligne)
        Dim Forme As MsoShapeType, Couleur, H As Single
        Dim G As Single, T As Single, Shp As Shape
        H = Cells(Ligne, 7).Height
        G = Cells(Ligne, 7).Left
        T = Cells(Ligne, 7).Top
        On Error Resume Next
        ActiveSheet.Shapes("Forme" & Ligne).Delete
        On Error GoTo 0
        If Cells(Ligne, 5) = "pas urgent" Then
            Couleur = Array(0, 176, 80)
        ElseIf Cells(Ligne, 5) = "assez urgent" Then
            Couleur = Array(255, 192, 0)
        ElseIf Cells(Ligne, 5) = "urgent" Then
            Couleur = Array(255, 0, 0)
        ElseIf Cells(Ligne, 5) = "très urgent" Then
            Couleur = Array(255, 255, 255)
        End If
        Select Case Cells(Ligne, 3).Value
            Case "soins"
                Forme = msoShapeCross
            Case "alimentation"
                Forme = msoShapeOval
            Case "couchage"
                Forme = msoShapeRectangle
        End Select
        Set Shp = ActiveSheet.Shapes.AddShape(Forme, G, T, H, H)
        With Shp
            .Fill.ForeColor.RGB = RGB(Couleur(0), Couleur(1), Couleur(2))
            .Line.Visible = msoFalse
            .Name = "Forme" & Ligne
        End With
    End Sub
    Regarde le classeur joint.
    Fichiers attachés Fichiers attachés
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Insertion formes automatiques
    Bonjour,

    Merci pour ton aide

    j'ai essayé ton fichier et malheureusement cela ne fonctionne pas; dommage.

    voici en PJ le fichier PROJET_CHOIX_LOGOS que je souhaite réaliser.
    Puis deux fichiers exemples mais que je n'arrive pas à transposer pour faire fonctionner mon fichier PROJET_CHOIX_LOGOS, et cela je ne comprend pas ou est l'erreur.

    merci encore
    Fichiers attachés Fichiers attachés

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Insertion formes automatiques
    Je vous souhaite à tous mes meilleurs V B A 2013.
    V oeux de
    B onne
    A nnée
    2013

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu as déjà un problème dans ta feuille SUIVI du classeur PROJET_CHOIX_LOGOS.xls.
    La Validation de données - Liste est bloquée colonne I. Cette liste fait manifestement référence à un autre classeur nommé Classeur_INSERT IMAGE.xlsm
    Quant aux autres colonnes tu n'as mis aucune validation de données.

    Bonjour,
    Dans le gestionnaire des noms List2 doit faire référence à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Logos!$A$2;;;NBVAL(Logos!$A:$A)-1)
    ET de plus tu as fait un copier/coller d'un fichier que tu as téléchargé sur le site de Jacques Boisgontier sans en comprendre le code
    Dans son classeur la liste est dans la 2ème colonne, chez toi, une des liste est en 9ème colonne. Il y a dons lieu de changer ceci (Ce qui est en rouge)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If Target.Column = 9 And Target.Count = 1 Then
    Quand tu auras déjà fait ces deux modifications, tu verras déjà que pour la colonne I de la feuille SUIVI cela fonctionne.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour Daniel,
    Citation Envoyé par Daniel.C Voir le message
    Bonjour,
    J'ai écrit ce code avec XL2010. Je ne sais pas s'il fonctionnera avec XL2003. A mettre dans le module de la feuille. Les besooins sont en colonne C et les urgences en colonne E; les icônes en colonne G :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column <> 3 And Target.Column <> 5 Then Exit Sub
        If Cells(Target.Row, 3) <> "" And Cells(Target.Row, 5) <> "" Then
            Forme Target.Row
        End If
    End Sub
    Sub Forme(Ligne)
        Dim Forme As MsoShapeType, Couleur, H As Single
        Dim G As Single, T As Single, Shp As Shape
        H = Cells(Ligne, 7).Height
        G = Cells(Ligne, 7).Left
        T = Cells(Ligne, 7).Top
        On Error Resume Next
        ActiveSheet.Shapes("Forme" & Ligne).Delete
        On Error GoTo 0
        If Cells(Ligne, 5) = "pas urgent" Then
            Couleur = Array(0, 176, 80)
        ElseIf Cells(Ligne, 5) = "assez urgent" Then
            Couleur = Array(255, 192, 0)
        ElseIf Cells(Ligne, 5) = "urgent" Then
            Couleur = Array(255, 0, 0)
        ElseIf Cells(Ligne, 5) = "très urgent" Then
            Couleur = Array(255, 255, 255)
        End If
        Select Case Cells(Ligne, 3).Value
            Case "soins"
                Forme = msoShapeCross
            Case "alimentation"
                Forme = msoShapeOval
            Case "couchage"
                Forme = msoShapeRectangle
        End Select
        Set Shp = ActiveSheet.Shapes.AddShape(Forme, G, T, H, H)
        With Shp
            .Fill.ForeColor.RGB = RGB(Couleur(0), Couleur(1), Couleur(2))
            .Line.Visible = msoFalse
            .Name = "Forme" & Ligne
        End With
    End Sub
    Regarde le classeur joint.
    Bravo pour ce code.
    Je te confirme que cela fonctionne parfaitement sur la version 2003.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Insertion formes automatiques
    Milles excuses pour le fichier Tyndare36.xls de Daniel.C effectivement il fonctionne. Il est fort possible que dans mon énervement et mon ignorance à faire fonctionner le reste j’ai pu essayer de le faire fonctionner alors que tout était bloqué. Je vous prie Daniel.C d’accepter mes excuses.

    Philippe Tulliez il est vrai que dans mes innombrables essais j’ai commis des erreurs. Je viens de les corriger et là ma première colonne (la N°9) fonctionne mais pas les autres (N°11 ; 13 ; et 15) elles ne fonctionnent pas.
    Maintenant il est vrai que mon ignorance est grande en VBA et donc j’ai recopié le code pour chaque colonne les uns à la suite des autres (la fonction F8 ne me permet pas de faire du pas à pas).

    Si je sépare les lignes de code en plusieurs macros le résultat indique
    « Erreur compilation
    Nom ambigu détecté : Worksheet_change »


    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
    Private Sub Worksheet_Change(ByVal Target As Range)
      Set images = Sheets("logos")
     
      'LISTE2 =0=0=0=0=0=0=0=0=0=0=0=
     
      If Target.Column = 9 And Target.Count = 1 Then
        '-- suppression
        For Each s In ActiveSheet.Shapes
          If s.Type = 13 Then
            If s.TopLeftCell.Address = Target.Address Then s.Delete
          End If
        Next s
        If Target <> "" Then
          On Error Resume Next
          images.Shapes(Target).Copy
          If Err = 0 Then
            ActiveSheet.Paste
            Selection.OnAction = "ClicImage2"
            Selection.Name = "Image" & ActiveCell.Row
            largeurImage = images.Shapes(Target).Width
            HauteurImage = images.Shapes(Target).Height + 6
            Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 - largeurImage / 2
            Selection.ShapeRange.Top = ActiveCell.Top + 5
            Rows(Target.Row).RowHeight = HauteurImage + 10
            Target.Select
          End If
        End If
     
     'LISTE3 =0=0=0=0=0=0=0=0=0=0=0=
     
         If Target.Column = 11 And Target.Count = 1 Then
        '-- suppression
        For Each s In ActiveSheet.Shapes
          If s.Type = 13 Then
            If s.TopLeftCell.Address = Target.Address Then s.Delete
          End If
        Next s
        If Target <> "" Then
          On Error Resume Next
          images.Shapes(Target).Copy
          If Err = 0 Then
            ActiveSheet.Paste
            Selection.OnAction = "ClicImage2"
            Selection.Name = "Image" & ActiveCell.Row
            largeurImage = images.Shapes(Target).Width
            HauteurImage = images.Shapes(Target).Height + 6
            Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 - largeurImage / 2
            Selection.ShapeRange.Top = ActiveCell.Top + 5
            Rows(Target.Row).RowHeight = HauteurImage + 10
            Target.Select
          End If
        End If
     
     'LISTE4 =0=0=0=0=0=0=0=0=0=0=0=
     
     
         If Target.Column = 13 And Target.Count = 1 Then
        '-- suppression
        For Each s In ActiveSheet.Shapes
          If s.Type = 13 Then
            If s.TopLeftCell.Address = Target.Address Then s.Delete
          End If
        Next s
        If Target <> "" Then
          On Error Resume Next
          images.Shapes(Target).Copy
          If Err = 0 Then
            ActiveSheet.Paste
            Selection.OnAction = "ClicImage2"
            Selection.Name = "Image" & ActiveCell.Row
            largeurImage = images.Shapes(Target).Width
            HauteurImage = images.Shapes(Target).Height + 6
            Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 - largeurImage / 2
            Selection.ShapeRange.Top = ActiveCell.Top + 5
            Rows(Target.Row).RowHeight = HauteurImage + 10
            Target.Select
          End If
        End If
     
     
     'LISTE5 =0=0=0=0=0=0=0=0=0=0=0=
     
     
         If Target.Column = 15 And Target.Count = 1 Then
        '-- suppression
        For Each s In ActiveSheet.Shapes
          If s.Type = 13 Then
            If s.TopLeftCell.Address = Target.Address Then s.Delete
          End If
        Next s
        If Target <> "" Then
          On Error Resume Next
          images.Shapes(Target).Copy
          If Err = 0 Then
            ActiveSheet.Paste
            Selection.OnAction = "ClicImage2"
            Selection.Name = "Image" & ActiveCell.Row
            largeurImage = images.Shapes(Target).Width
            HauteurImage = images.Shapes(Target).Height + 6
            Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 - largeurImage / 2
            Selection.ShapeRange.Top = ActiveCell.Top + 5
            Rows(Target.Row).RowHeight = HauteurImage + 10
            Target.Select
          End If
           End If
     
          End If
     
         End If
     
        End If
     
       End If
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     'LISTE2 =0=0=0=0=0=0=0=0=0=0=0=
     
      If Target.Column = 9 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
     'LISTE3 =0=0=0=0=0=0=0=0=0=0=0=
     
          If Target.Column = 11 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
     'LISTE4 =0=0=0=0=0=0=0=0=0=0=0=
     
            If Target.Column = 13 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
     'LISTE5 =0=0=0=0=0=0=0=0=0=0=0=
     
            If Target.Column = 15 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
             End If
           End If
         End If
      End If
    End Sub

    Merci encore pour votre aide et BONNE ANNÉE 2013
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Milles excuses pour le fichier Tyndare36.xls de Daniel.C effectivement il fonctionne. Il est fort possible que dans mon énervement et mon ignorance à faire fonctionner le reste j’ai pu essayer de le faire fonctionner alors que tout était bloqué. Je vous prie Daniel.C d’accepter mes excuses.
    Il n'y a pas d'offense, tout le monde peut se tromper. Et bon courage, mais avec Philippe, tu m'as l'air bien parti.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par tyndare36 Voir le message
    Philippe Tulliez il est vrai que dans mes innombrables essais j’ai commis des erreurs. Je viens de les corriger et là ma première colonne (la N°9) fonctionne mais pas les autres (N°11 ; 13 ; et 15) elles ne fonctionnent pas.
    Maintenant il est vrai que mon ignorance est grande en VBA et donc j’ai recopié le code pour chaque colonne les uns à la suite des autres (la fonction F8 ne me permet pas de faire du pas à pas).
    Si je sépare les lignes de code en plusieurs macros le résultat indique
    « Erreur compilation
    Nom ambigu détecté : Worksheet_change »
    S'il y a plusieurs tests logiques, il faut utiliser une procédure décisionnelle, SELECT CASE, IF ou autres ou une opération booléenne avec AND ou OR.
    Je n'ai malheureusement pas le temps pour l'instant de regarder à cela.

    Bonjour,
    Voici un exemple de code pour vérifier si l'utilisateur à bien modifié la cellule des colonnes C, E, ou F ET qu'il s'agit bien d'une modification sur une seule cellule.
    Code se trouvant dans l'objet feuille où a lieu la modification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count = 1 Then ' Vérifie si le changement se fait sur une cellule
      Select Case Target.Column
       Case 3, 5, 7 ' Vérifie si c'est bien les colonnes 3, 5 et 7
           ' Ici le code    
           MsgBox "Oui ici le code"
      End Select
     End If
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Insertion formes automatiques
    Bonjour,

    J'ai essayé le code de Philippe mais j'ai un message d'erreur:

    "Erreur de Compilation:
    End sélect sans Select Case"

    J'ai un Select Case Target.Column en ligne N°3

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count = 1 Then ' Vérifie si le changement se fait sur une cellule
      Select Case Target.Column
       Case 9, 11, 13, 15 ' Vérifie si c'est bien les colonnes 3, 5 et 7
           ' Ici le code
     
           If Target <> "" Then
          On Error Resume Next
          images.Shapes(Target).Copy
          If Err = 0 Then
            ActiveSheet.Paste
            Selection.OnAction = "ClicImage2"
            Selection.Name = "Image" & ActiveCell.Row
            largeurImage = images.Shapes(Target).Width
            HauteurImage = images.Shapes(Target).Height + 6
            Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 - largeurImage / 2
            Selection.ShapeRange.Top = ActiveCell.Top + 5
            Rows(Target.Row).RowHeight = HauteurImage + 10
            Target.Select
           MsgBox "Oui ici le code"
      End Select
     End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     'LISTE2 =0=0=0=0=0=0=0=0=0=0=0=
     
      If Target.Column = 9 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
     'LISTE3 =0=0=0=0=0=0=0=0=0=0=0=
     
          If Target.Column = 11 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
     'LISTE4 =0=0=0=0=0=0=0=0=0=0=0=
     
            If Target.Column = 13 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
     'LISTE5 =0=0=0=0=0=0=0=0=0=0=0=
     
            If Target.Column = 15 And Target.Count = 1 Then
        If Not Intersect(Target, Cells.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
          SendKeys "%{down}"
        End If
     
             End If
           End If
         End If
      End If
    End Sub

    Je suis désolé mais je ne suis pas très doué

    Merci
    Fichiers attachés Fichiers attachés

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai essayé le code de Philippe mais j'ai un message d'erreur:
    Tu veux plutôt dire que tu as une erreur après avoir insérer le bout de code que j'ai publié dans le tien . Parce-que je teste toujours les codes avant publication
    Ton erreur vient du fait que tu as oublié de placer un END IF après ces deux lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Target.Select
    MsgBox "Oui ici le code"
    Un IF doit se terminer par un END IF et un SELECT par un END SELECT.
    Il faut indenter ton code pour mieux le visualiser.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Insertion formes automatiques
    Bonsoir

    Oui bien entendu j'ai essayé d'utiliser ton code pour arriver à mes fins.

    Mais même après l'ajout d'un End IF j'ai le même message d'erreur

  13. #13
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Euh il en manque un autre, à mon avis. Dans le code que tu as posté, il en manquait un pour :

    et un pour :

    Comme te l'a dit Philippe, indente ton code.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut
    Bonsoir Daniel
    J’ai rajouté un End IF et plus de message d’erreur. Mais cela ne fonctionne pas pour autant.
    Que signifie « indente »
    Comme te l'a dit Philippe, indente ton code.
    Merci pour vos aides.

  15. #15
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je n'ai pas étudié le code, je ne sais pas pourquoi il ne fonctionne pas. Indenter du code, c'est décaler logiquement "en dents" les lignes de code. Ainsi, tu peux contrôler plus facilement s'il manque quelque chose. Ci dessous la même macro, l'une avec du code indenté :
    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
    Sub ExemplePasIndenté()
    With Sheets("Feuil1")
    Select Case .[A1].Value
    Case 1
    If .[B1] = 2 Then
    MsgBox "toto"
    Else
    MsgBox "titi"
    End If
    Case 2
    If .[B1] = 2 Then
    MsgBox "tutu"
    Else
    MsgBox "tata"
    End If
    End Select
    End With
    End Sub
    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
    Sub ExempleIndentation()
        With Sheets("Feuil1")
            Select Case .[A1].Value
                Case 1
                    If .[B1] = 2 Then
                        MsgBox "toto"
                    Else
                        MsgBox "titi"
                    End If
                Case 2
                    If .[B1] = 2 Then
                        MsgBox "tutu"
                    Else
                        MsgBox "tata"
                    End If
            End Select
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ajouterais à l'intervention de Daniel que je salue au passage qu'il est aisé d'indenter un bloc d'instruction dans l'éditeur en sélectionnant les instructions à indenter et ensuite appuyer sur la touche TAB et Back Tab pour l'inverse. Cela a pour effet de faire avancer ou reculer les lignes sélectionnées d'un certain nombres de caractères.
    Ce nombre de caractères est par défaut à 8 je pense et peut être modifié en allant changer l'option largeur de la tabulation dans Outils/Options - [Editeur].
    Pour ma part, je la place à 1 ou à 2 selon les circonstances.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  17. #17
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour à tous
    Sur la même lancée que Philippe et Daniel, ici un Add-Ins à installer (au cas où tu as les droits). Un clique droit et tu pourra indenter tout ton projet
    http://www.developpez.net/forums/new...te=1&p=7056444
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. [PPT-2002] insertion forme automatique
    Par bubus31 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 28/09/2009, 15h53
  2. Réponses: 8
    Dernier message: 19/06/2006, 16h31
  3. Mise en forme automatique d'un tableau
    Par Gestion dans le forum Access
    Réponses: 2
    Dernier message: 24/03/2006, 22h19
  4. Atteindre NewRec dans sous form automatiquement !
    Par samlepiratepaddy dans le forum Access
    Réponses: 10
    Dernier message: 25/09/2005, 10h25
  5. mise en forme automatique du code a 80 colonnes ??
    Par benwa dans le forum JBuilder
    Réponses: 1
    Dernier message: 27/03/2005, 22h43

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