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 :

Complément qui ne s'exécute pas


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    TECHNICIEN AGRONOME
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : TECHNICIEN AGRONOME
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Complément qui ne s'exécute pas
    Bonjour,

    Alors je préviens de suite, je suis débutant en programmation vba.
    J'ai tapé qques lignes de code dans un fichier excel. Ce fichier est une exctraction excel d'un autre logicile.
    Pour appliquer ces lignes de code à toute autre extraction de ce logiciel, j'ai enregistré ces lignes sous la forme d'un complément (xlam).
    Ce code avait pour intention de localiser La case dans la colonne B contenant le numero 101, puis de copier coller les cases environnantes dans un autre fichier.

    Voici le code:


    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
    Public Sub rename()
     
    ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\gwanael_kergresse\Desktop\Selction auto\temp.xlsm", FileFormat:= _
            xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
     
    'settings pour saisie randomisation'
     
    Dim numero As Integer
    numero = 101
     
     
    Set wbk2 = Application.Workbooks.Open("C:\Users\gwanael_kergresse\Desktop\Selction auto\Dossier 2015.xlsm")
     
        Workbooks("temp.xlsm").Activate
        Set Rando1 = Range("B1:B300").Find(numero, lookat:=xlWhole)
     
            If Rando1 Is Nothing Then 'si la rando n'est pas renseignée'
                MsgBox ("randomisation non définie")
            Else 'si elle l'est'
                Rando1.Select 'Copie des n° de PE dans le proto'
                Range(ActiveCell, ActiveCell.End(xlDown)).Select
                Selection.Copy
                wbk2.Activate
                Worksheets("proto").Range("J17").Select
                ActiveCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                    xlNone, SkipBlanks:=False, Transpose:=False
                Workbooks("temp.xlsm").Activate
                Rando1.Select 'Copie des n° de modas dans le proto'
                Rando1.Offset(0, -1).Select
                Range(ActiveCell, ActiveCell.End(xlDown)).Select
                Selection.Copy
                wbk2.Activate
                Worksheets("proto").Range("I17").Select
                ActiveCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                    xlNone, SkipBlanks:=False, Transpose:=False
     
            End If
     
    Workbooks("temp.xlsm").Close
    End Sub

    Quand j'execute la macro du fichier excel dans lequel je l'ai écrit, pas de probleme.
    Quand j'execute la macro du complément, ça foire.

    J'ai fait des "exécutions jusqu'au curseur", ça foire à partir de "If rando1 is nothing...."

    L'erreur renvoyée est "la methode select de la classe range a échouée".

    Si qqun voit une soluce, n'hésitez pas je patine à mort

    Merci à tous

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il faut peut être expliciter chaque objet
    par exemple, ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks("temp.xlsm").Activate
    Set Rando1 = Range("B1:B300").Find(numero, lookat:=xlWhole)
    tu actives un classeur, et ensuite tu lances ta recherche sur la feuille qui est active, sans forcément que ce soit la bonne
    tu n'es pas obligé d'activer un classeur ou de sélectionner des cellules, tu peux effectuer des opérations directement avec leurs coordonnées, de préférence complètes, ça te garantis qu'il n'y aura pas de quiproquo pour ta macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Classeur.Feuille.Plage.Copy Classeur.Feuille.Plage
    Après, tu peux en supplément "mettre" tes objets dans des variables, la lisibilité est encore meilleur

    Et surtout ! Met ton code en relief ("indenter" le code). Tu as un meilleur visuel sur la structure de ton code


    je t'invite à tester ce code, je ne l'ai pas testé donc dis-nous si c'est bon
    j'ai mis quelques commentaires et tu dois mettre le nom de la feuille où tu cherches 101

    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
     
    Public Sub rename()
     
    Dim WbTemp As Workbook
    Dim WbDest As Workbook
    Dim ShTemp As Worksheet
    Dim ShDest As Worksheet
    Dim Numero As Integer
    Dim i As Integer
    Dim Rando1 As Range
     
        'settings pour saisie randomisation'
        Numero = 101
     
        ' ***si tu le peux, nomme directement le classeur***
        '       ***ça évite de mauvaises surprises***
        Set WbTemp = ActiveWorkbook
     
        ' ici tu mets le nom de la feuille où tu cherches 101
        Set ShTemp = WbTemp.Worksheets("Nom de ta feuille")
     
        WbTemp.SaveAs Filename:= _
        "C:\Users\gwanael_kergresse\Desktop\Selction auto\temp.xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
     
     
        Set Rando1 = ShTemp.Range("B1:B300").Find(Numero, lookat:=xlWhole)
     
        If Rando1 Is Nothing Then 'si la rando n'est pas renseignée'
            MsgBox ("randomisation non définie")
        Else 'si elle l'est'
     
            Set WbDest = Application.Workbooks.Open("C:\Users\gwanael_kergresse\Desktop\Selction auto\Dossier 2015.xlsm")
            Set ShDest = WbDest.Worksheets("proto")
     
            ' écriture des deux colonnes dans la feuille proto
            For i = 0 To 1
                'Feuille ||
                With ShTemp
                              '|| Rando1 et rando1.offset(0,-1)    ||  Dernière cellule sous Rando1 et Rando1.offset(0,-1)        J17 et I17
                    .Range(.Cells(Rando1.Row, Rando1.Column - i), .Cells(Rando1.Rows.End(xlUp), Rando1.Column - i)).Copy ShDest.Cells(17, 10 - i)
                End With
            Next i
        End If
     
        WbTemp.Close
        Set ShTemp = Nothing
        Set ShDest = Nothing
        Set WbTemp = Nothing
        Set WbDest = Nothing
     
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    TECHNICIEN AGRONOME
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : TECHNICIEN AGRONOME
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir joe,

    Tout d'abord, merci pour la réponse.

    Alors j'ai essayé en copiant le code que tu as rédigé, j'ai mis le nom de la feuille où je cherche 101.
    J'ai le message d'erreur suivant: erreur d'execution 13: Incompatibilité de type.
    Etant donné que ton code est pour moi du charabia, tu aurais une solution?

    Sinon, j'avais essayé en nommant le classeur, la feuille, puis la plage de cellule, ça n'a pas marché non plus...

    A+

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'avais pas les yeux en face des trous on dirait, y'avait un mauvais positionnement des sélections.

    remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            ' écriture des deux colonnes dans la feuille proto
            For i = 0 To 1
                'Feuille ||
                With ShTemp
                              '|| Rando1 et rando1.offset(0,-1)    ||  Dernière cellule sous Rando1 et Rando1.offset(0,-1)        J17 et I17
                    .Range(.Cells(Rando1.Row, Rando1.Column - i), .Cells(Rando1.Rows.End(xlUp), Rando1.Column - i)).Copy ShDest.Cells(17, 10 - i)
                End With
           Next i

    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            With ShTemp
                .Range(.Cells(Rando1.Row, Rando1.Column), .Cells(Rando1.Rows.End(xlDown).Row, Rando1.Column)).Copy ShDest.Cells(17, 10)
                Set Rando1 = Rando1.Offset(0, -1)
                .Range(.Cells(Rando1.Row, Rando1.Column), .Cells(Rando1.Rows.End(xlDown).Row, Rando1.Column)).Copy ShDest.Cells(17, 9)
            End With

    ça ne règle pas ton problème à mon avis, je n'ai pas réussi à reproduire de cas où ça plante ... mais on sait jamais

Discussions similaires

  1. ms sql server 2000 : ".exe" qui ne s'exécute pas
    Par nyko_kliko dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/08/2006, 16h15
  2. Fichier exécutable qui ne s'exécute pas ?!
    Par bnadem35 dans le forum Linux
    Réponses: 4
    Dernier message: 12/07/2006, 11h35
  3. Réponses: 8
    Dernier message: 08/05/2006, 20h40
  4. probleme de requete mysql qui ne s'exécute pas
    Par anto48_4 dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2006, 10h51
  5. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 09h12

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