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 :

Simplification / correction de code VBA svp


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juin 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Simplification / correction de code VBA svp
    Bonjour.

    Je ne suis pas du tout un pro en programmation. Je comprends la base... J'avais besoin de générer 2 QR-codes et qu'ils soient placés en P37 et N50. Dans l'ordre, le code doit :
    - supprimer les 2 QR-codes (images) présents en P37 et N50 s'ils existent,
    - créer et place les 2 nouveaux QR-codes.

    En cherchant beaucoup et par essai/erreur, j'ai concocté ce code :


    Sub qrcodedevis()
    Dim sd As Shape, rng As Range
    Set rng = Range("N50")
    For Each s In ActiveSheet.Shapes
    If Intersect(rng, s.TopLeftCell) Is Nothing Then
    Else
    s.Delete
    End If
    Next s
    Dim x As String
    x = Sheets("Devis HP").Range("U34")
    Range("U34").Select
    Selection.Copy
    Range("N50").Select
    ActiveSheet.Pictures.Insert(x).Select
    Dim t As Shape, rngg As Range
    Set rngg = Range("P37")
    For Each t In ActiveSheet.Shapes
    If Intersect(rngg, t.TopLeftCell) Is Nothing Then
    Else
    t.Delete
    End If
    Next t
    Dim y As String
    y = Sheets("Devis HP").Range("U36")
    Range("U36").Select
    Selection.Copy
    Range("P37").Select
    ActiveSheet.Pictures.Insert(y).Select
    Application.CutCopyMode = False
    Range("U9").Select
    End Sub


    De manière générale, le code fonctionne mais 2 soucis...
    1) De temps en temps, le code bugue et me propose le débogage de la ligne suivante :

    If Intersect(rng, s.TopLeftCell) Is Nothing Then

    Si je rentre dans le débogage, ne change absolument rien et enregistre le code VBA, lorsque je relance la macro, elle fonctionne. Bizare car je n'ai rien changé.


    2) Le code duquel je me suis inspiré devait supprimer plusieurs QR-codes se trouvant dans une range. Dès lors, le code utilise la boucle "For each...". Cependant, ne sachant pas comment coder mais comprenant un peu ce qu'il se passe, j'ai supprimé la range concernée par la case qui m'intéressait (P37) et ensuite copié le code pour relancer l'opération pour N50. Il me parait logique que le code n'est pas optimal puisqu'il utilise 2 boucles et que chacune ne traite qu'un seul élément.


    En bref, j'aimerais qu'une bonne âme simplifie mon code et fasse en sorte que je n'ai plus de bug intempestif afin que je puisse l'utiliser sans soucis.


    Je compte sur votre générosité.

    Merci.

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    836
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 836
    Points : 1 320
    Points
    1 320
    Par défaut
    Salut, teste 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
    28
    29
    30
    Sub qrcodedevis()
        Dim sd As Shape
        Dim rng1 As Range, rng2 As Range
        Dim x As String, y As String
     
     
        Set rng1 = Range("P37")
        Set rng2 = Range("N50")
     
        ' Parcourir toutes les formes sur la feuille active
        For Each sd In ActiveSheet.Shapes
            ' Vérifier si la forme est située en P37 ou N50 et la supprimer si c'est le cas
            If Not Intersect(rng1, sd.TopLeftCell) Is Nothing Or Not Intersect(rng2, sd.TopLeftCell) Is Nothing Then
                sd.Delete
            End If
        Next sd
     
        x = Sheets("Devis HP").Range("U34").Value
        y = Sheets("Devis HP").Range("U36").Value
     
        ' Insérer les nouvelles images des QR-codes en P37 et N50
        ActiveSheet.Pictures.Insert(x).ShapeRange.TopLeftCell = rng1
        ActiveSheet.Pictures.Insert(y).ShapeRange.TopLeftCell = rng2
     
        Application.CutCopyMode = False
     
        ' Sélectionner la cellule U9 (peut être retirée si non nécessaire)
        Range("U9").Select
     
    End Sub

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Juin 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juin 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut J'ai trouvé, merci pour l'aide.
    La solution proposée par Franc fonctionne partiellement. Elle supprime les images existantes s'il y en a mais ensuite ça bugue. Une image est insérée dans la colonne AA et je reçois un message d'erreur. J'ai solutionné le problème en fusionnant une partie de mon code avec celui proposé. Voici donc la version qui fonctionne...

    Sub qrcodedevis()
    Dim sd As Shape
    Dim rng1 As Range, rng2 As Range
    Dim x As String, y As String


    Set rng1 = Range("P37")
    Set rng2 = Range("N50")

    ' Parcourir toutes les formes sur la feuille active
    For Each sd In activeSheet.Shapes
    ' Vérifier si la forme est située en P37 ou N50 et la supprimer si c'est le cas
    If Not Intersect(rng1, sd.TopLeftCell) Is Nothing Or Not Intersect(rng2, sd.TopLeftCell) Is Nothing Then
    sd.Delete
    End If
    Next sd

    x = Sheets("Devis HP").Range("U34")
    y = Sheets("Devis HP").Range("U36")

    ' Insérer les nouveaux QR-codes depuis U34 en N50 et depuis U36 en P37
    Range("U34").Select
    Selection.Copy
    Range("N50").Select
    activeSheet.Pictures.Insert(x).Select

    Range("U36").Select
    Selection.Copy
    Range("P37").Select
    activeSheet.Pictures.Insert(y).Select


    Application.CutCopyMode = False

    ' Sélectionner la cellule U9 (peut être retirée si non nécessaire)
    Range("U9").Select

    End Sub


    Encore un grand merci pour l'aide. Je suis épaté par la rapidité et l'énergie déployés.
    Merciiiiiii

Discussions similaires

  1. [AC-2010] Help : dde correction formulaire avec code Vba/Sql
    Par anopaname dans le forum Access
    Réponses: 0
    Dernier message: 24/03/2014, 13h14
  2. [XL-2007] Correction code VBA
    Par bigokou dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/09/2012, 15h12
  3. [XL-2007] Comment simplifier mon code VBA SVP?
    Par anthooooony dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2012, 10h59
  4. Explication code VBA svp
    Par Guns Of The Patriots dans le forum VBA Access
    Réponses: 6
    Dernier message: 10/06/2008, 12h33
  5. Correction de mon code vba svp
    Par njinkeu.mbakob dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/04/2008, 12h21

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