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 :

Retour sur 'On error'


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut Retour sur 'On error'
    Bonjour,

    J'ai essayer le code suivant, tiré de "La gestion des erreurs dans Excel" :

    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
    Sub laMacro()
        Dim Ws As Worksheet
     
        'Evite le message d'erreur si la feuille n'existe pas.
        On Error Resume Next
        Set Ws = ThisWorkbook.Worksheets("Feuil8")
        On Error GoTo 0
     
        '(Ws = Nothing quand l'objet attribué à la variable n'existe pas)
        If Not Ws Is Nothing Then
            MsgBox "La feuille existe dans le classeur."
            Else
            MsgBox "La feuille n'existe pas dans le classeur."
        End If
    End Sub
    et j'obtiens le message :

    Erreur 9
    L'indice n'appartient pas à la sélection.

    Je cherche à comprendre.
    Merci si vous pouvez m'aider.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Cette macro ne génère pas d'erreur sur mon poste.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Ce code est très simple et fonctionne exactement comme il a été prévu de fonctionner. "On Error Resume Next" demande au compilateur d'ignorer l'erreur et de passer à l'instruction suivante, "On Error GoTo 0" supprime le gestionnaire d'erreur (l'objet Err contenant toujours les propriétés de l'erreur levée) de façon à ce que s'il se produit à nouveau une erreur dans les lignes de code suivantes, elle ne soit pas ignorée.
    Tu peux aussi remplacer "If Not Ws Is Nothing Then" par "If Err.Number = 0 Then" pour obtenir le même résultat.

    Hervé.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    voir comment est paramétré ta gestion d'erreur dans excel .. : menu Outils/Option/Onglet général arrêt sur les erreurs non gérées

  5. #5
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Salut BBil,

    Sais tu où est ce paramètre sur Excel 2010?

  6. #6
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Bonjour

    Merci à vous tous, vous m'avez bien dépanné.

    J'ai l'option : Arrêt sur toutes les erreurs.


    Mon problème d'existence de controle concernait une routine de copie d'images d'une feuille à l'autre que voici :
    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
    Private Sub CommandButton1_Click()
    Dim i, xPi, xFe_A, xFe_B
    xFe_A = "Feuil1"
    xFe_B = "Feuil8"
        For i = 1 To 20
            Sheets(xFe_A).Select
            Sheets(xFe_A).Range("A1").Value = i
            xPi = "Picture " & i
        On Error Resume Next
            ActiveSheet.shapes(xPi).Select
        On Error GoTo 0
            If Err.Number = 0 Then
                Selection.Copy
                Sheets(xFe_B).Select
                Sheets(xFe_B).Range("A1").Offset(5, i).Select
                Sheets(xFe_B).Paste
            End If
        Next i
        Sheets(xFe_B).Range("A1").Select
    End Sub
    La copie se fait aussi pour les CommandButton.
    Comment l'empêcher ?

    Merci si vpous pouvez encore m'aider.
    Cordialement.

  7. #7
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Est ce que la feuil8 existe bien dans ton classeur?

    Penses a typer tes variables, sinon elles seront toutes de type Variant
    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
     
    Private Sub CommandButton1_Click()
    Dim i As Byte
    Dim xPi As String
    Dim xFe_A As String
    Dim xFe_B As String
     
    xFe_A = "Feuil1"
    xFe_B = "Feuil8"
     
    For i = 1 To 20
        Sheets(xFe_A).Select
        Sheets(xFe_A).Range("A1").Value = i
        xPi = "Picture " & i
     
        On Error Resume Next
        ActiveSheet.Shapes(xPi).Select
        On Error GoTo 0
     
        If Err.Number = 0 Then
            Selection.Copy
            Sheets(xFe_B).Select
            Sheets(xFe_B).Range("A1").Offset(5, i).Select
            Sheets(xFe_B).Paste
        End If
     
    Next i
     
    Sheets(xFe_B).Range("A1").Select

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    Salut BBil,

    Sais tu où est ce paramètre sur Excel 2010?
    Voir : http://office.microsoft.com/fr-fr/ex...in=HA010370218

    Onglet fichier puis Options.

  9. #9
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Merci pour ce lien

  10. #10
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Merci jfontaine

    La feuille existe bien.
    J'ai copié ta version.
    Tout se copie bien, mais je souhaiterais que 2 CommandButton qui sont sur la même feuille ne se copient pas.
    Je n'arrive pas à les empêcher de se copier avec les images qui sont des 'shapes'.

    Merci si tu me donnes la renseignement.

    Cordialement

    P.S. J'ai voté BIEN

  11. #11
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ci dessous une version qui utilise les objets shape et Worksheet
    Un test sur le type de shape pour ne copier que les images
    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
    Private Sub CommandButton1_Click()
    Dim i As Byte
     
    Dim xFe_A As Worksheet
    Dim xFe_B As Worksheet
     
    Dim MyShape As Shape
     
    i = 1
     
    Set xFe_A = ThisWorkbook.Sheets("Feuil1")
    Set xFe_B = ThisWorkbook.Sheets("Feuil8")
     
    For Each MyShape In xFe_A.Shapes
        If MyShape.Type = msoPicture Then
            MyShape.Copy
            xFe_B.Range("A1").Offset(5, i).PasteSpecial
            i = i + 1
        End If
    Next
     
    End Sub

  12. #12
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Bonjour Jérôme,

    La version essayée ne marche pas. Rien ne se copie.
    Il semble que " MyShape " n'est pas reconnu.
    Un point d'arrêt mis sur la ligne " MyShape.Copy " n'est pas lu.

    Avec cette routine, j'essayais de copier les images l'une après l'autre, car quand je copie la feuille entière, toutes les images sont déformées et allongées.
    Pour empêcher cela, il fallait qu'à chaque image (avant la copie) je modifie une propriété dans le positionnement de l'objet, en le faisant une à une, car je ne sais pas le faire par un code. L'enregistrement de Macro dans ce cas ne fonctionne pas.

    Merci si tu peux encore m'aider.

  13. #13
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Quel est le numéro de l'erreur et le descriptif.
    Post aussi ton code

  14. #14
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Je viens de trouver la solution :
    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
    Private Sub CommandButton1_Click()
    Dim i As Byte
     
    Dim xFe_A As Worksheet
    Dim xFe_B As Worksheet
     
    Dim MyShape As shape
     
    i = 1
     
    Set xFe_A = ThisWorkbook.Sheets("Feuil1")
    Set xFe_B = ThisWorkbook.Sheets("Feuil4")
     
    For Each MyShape In xFe_A.shapes
        If MyShape.Type = 11 Then
            MyShape.Copy
            xFe_B.Range("A1").Offset(5, i).PasteSpecial
            i = i + 1
        End If
    Next
     
    End Sub
    En mettant le numéro du type.

  15. #15
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    Encore un petit problème.
    La commande fonctionne bien à partir d'un ' commandbutton ".
    Si on utilise pour la lancer l'option " Ctl + s" la copie se fait, mais les images copiées sont toutes très allongées.
    J'aimerais en savoir la raison.

    Cordialement

  16. #16
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Si on utilise pour la lancer l'option " Ctl + s" la copie se fait, mais les images copiées sont toutes très allongées.
    Désolé, mais la, je ne vois pas pourquoi

  17. #17
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2002
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2002
    Messages : 391
    Par défaut
    On verra ça plus tard.
    Maintenant, ça marche, et c'est surtout grâce aux renseignements que tu m'as donnés.
    Encore un grand merci.
    Cordialement.
    Jacques

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

Discussions similaires

  1. Mode test et retour sur WinDev
    Par PapyCrouton dans le forum WinDev
    Réponses: 2
    Dernier message: 06/10/2006, 15h06
  2. Positionner un code retour sur un chargement d'APPLET ?
    Par Bighobbit dans le forum Applets
    Réponses: 2
    Dernier message: 29/09/2006, 12h02
  3. Réponses: 2
    Dernier message: 08/09/2006, 14h14

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