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 :

Y a t il plus simple. [XL-2010]


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
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut Y a t il plus simple.
    Bonjour à tous.
    Pour une fois c'est à mon tour de poser une question.

    J'ai créer une fonction de suppression qui supprime une feuille et une ligne dans lui faisant référence dans la première feuille du classeur.
    Dans la première ligne de référence j'ai un bouton qui me permet d'aller directement a cette feuille que je dois donc également supprimer.
    Je ne connais pas le nom du bouton puisque lui même est généré par code vba.

    J'ai réussi a faire un code qui me permet bien de supprimer le bouton puis la ligne. Et qui fonctionne mais je me demande si il n'y as pas plus facile de pointer le bon bouton a supprimer.

    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
    Private Sub BnSupprimer_Click()
    Sheets(CBPostes.Value).Visible = True
    Sheets(CBPostes.Value).Unprotect
    Sheets(CBPostes.Value).Delete
    Dim derniereLigne As Integer
    derniereLigne = Sheets(NomFeuillePrincipale).Range("A" & Rows.Count).End(xlUp).Row
    Dim X As Integer
    Dim Dico
    Set Dico = CreateObject("Scripting.Dictionary")
    For X = 5 To derniereLigne
        If Sheets(NomFeuillePrincipale).Range("A" & X).Value = CBPostes.Value Then
            Sheets(NomFeuillePrincipale).Unprotect
                Dim shp As Variant
                    For Each shp In ActiveWorkbook.Sheets(NomFeuillePrincipale).Shapes
                        If Not Dico.exist(shp.TopLeftCell.Row) Then
                            Dico.Add shp.TopLeftCell.Row, shp.Name
                        End If
                    Next
            Sheets(NomFeuillePrincipale).Shapes(Dico.Item(X)).Delete
            Sheets(NomFeuillePrincipale).Rows(X).Delete
            Sheets(NomFeuillePrincipale).Protect
            Exit For
        End If
     
    Next
     
    End Sub
    C'est juste histoire d'optimiser.

  2. #2
    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
    Quand tu crée les boutons par code, donne leur un nom significatif et unique.
    A la suppression, tu ira directement vers le bouton en question.

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Oui aprés c'est clair que le plus simple est de supprimer un shape en connaissant son nom. Mais je me demander si il y avait un moyen de supprimer sans connaitre le nom en pointant par son range ou autre car cela est connu...
    Mais je pense que c'est le meilleur moyen sinon ...

  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
    Il faudra passer par une boucle

    Exemple: On supprime les Shapes et lignes dont la cellule de la colonne A contient la valeur X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
    Dim Shp As Shape
     
    With Worksheets("Feuil1")
        For Each Shp In .Shapes
            If .Range("A" & Shp.TopLeftCell.Row) = "X" Then
                Shp.TopLeftCell.EntireRow.Delete
                Shp.Delete
                Exit For
            End If
        Next Shp
    End With
    End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Ok j'ai modifié selon ton idée ca fonctionne trés bien ca me fait le dico en moins pour recup les noms des shapes a generé

    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
    Private Sub BnSupprimer_Click()
    Sheets(CBPostes.Value).Visible = True
    Sheets(CBPostes.Value).Unprotect
    Sheets(CBPostes.Value).Delete
    Dim derniereLigne As Integer
    derniereLigne = Sheets(NomFeuillePrincipale).Range("A" & Rows.Count).End(xlUp).Row
    Dim X As Integer
    For X = 5 To derniereLigne
        If Sheets(NomFeuillePrincipale).Range("A" & X).Value = CBPostes.Value Then
            Sheets(NomFeuillePrincipale).Unprotect
                Dim shp As Shape
                    For Each shp In ActiveWorkbook.Sheets(NomFeuillePrincipale).Shapes
                        If shp.TopLeftCell.Row = X Then
                            shp.Delete
                            Exit For
                        End If
                    Next
     
            Sheets(NomFeuillePrincipale).Rows(X).Delete
            Sheets(NomFeuillePrincipale).Protect
            Exit For
        End If
    Next
     
    End Sub
    Je mets en resolu

  6. #6
    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
    Non,; tu n'as pas compris le code. 1 seule boucle suffit et personnellement je ferai comme ceci
    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
    Private Sub BnSupprimer_Click()
    Dim CBP As String
    Dim Shp As Shape
     
    Application.ScreenUpdating = False
    If CBPostes.Value <> "" Then
     
        CBP = CBPostes.Value
        Application.DisplayAlerts = False
        On Error Resume Next
        Worksheets(CBP).Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
     
        With Worksheets(NomFeuillePrincipale)
            For Each Shp In .Shapes
                If .Range("A" & Shp.TopLeftCell.Row) = CBP Then
                    Shp.TopLeftCell.EntireRow.Delete
                    On Error Resume Next
                    Shp.Delete
                    On Error GoTo 0
                    Exit For
                End If
            Next Shp
        End With
    End If
    End Sub

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

Discussions similaires

  1. [layout]il existe pas des layout plus simple et plus rapide?
    Par soad dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 28/11/2005, 11h03
  2. Comment faire plus simple
    Par mobscene dans le forum Langage
    Réponses: 5
    Dernier message: 26/07/2005, 04h12
  3. Réponses: 10
    Dernier message: 24/05/2005, 14h09
  4. Pipes => pas plus simple ?
    Par Jorus dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 17h53
  5. Format date : y'a forcément plus simple...
    Par ZERS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/12/2004, 15h28

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