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 :

PB d'enregistrement dans feuille excel.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 74
    Par défaut PB d'enregistrement dans feuille excel.
    Bonjour,

    Voila, j'ai créer un script sous VBA excel.
    Celui ci est sencé ouvrir un page excel ( ou la créer si elle n'existe pas ) et enregistrer un tableau a l'intérieur de cette page, puis la fermer.

    Et j'ai une erreur dans mon code au moment d'entrer mes données dans cette page.

    Pouvez vous m'aider ?

    Bien cordialement



    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
     
     
     
    Private Sub CommandButton1_Click()
     
     
        On Error GoTo Err_XLWrite
     
        Dim myXl As Excel.Application
        Dim mySheet As Excel.Workbook
     
       'Creation de l'objet an excel
       Set myXl = CreateObject("Excel.Application")
     
       'Ouverture du fichier excel
       Set mySheet = myXl.Workbooks.Open("D:\Documents and  Settings\Invité\Mes documents\Justin\test\toto.xls")
     
        Dim x As Integer, y As Integer
        Dim i As Integer, j As Integer
        Dim NomTableau() As String
     
        'Redéfinit la taille du tableau
        x = 10
        y = 5
        ReDim NomTableau(1 To x, 1 To y)
     
        'Alimente les éléments du tableau
        For i = 1 To x
            For j = 1 To y
                NomTableau(i, j) = i & "-" & j
            Next j
        Next i
     
        'Transfère les éléments du tableau dans la feuille de calcul ----> message d'erreur sur la ligne suivante mais je ne sais pas pourquoi
        myXl.Range(Cells(1, 1), Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau 
     
     
       'Sauvegarde du fichier
       mySheet.Save
     
       'Fermeture du fichier
       mySheet.Close
     
       'On quitte excel
       myXl.Quit
     
       'Libération des objets
       Set myChart = Nothing
       Set mySheet = Nothing
       Set myXl = Nothing
     
    Exit_XLWrite:
    Exit Sub
     
    Err_XLWrite:
    MsgBox Error$
    Resume Exit_XLWrite
    End Sub

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Y aurait-il moyen d'avoir le classeur excel à recopier?
    Je pense savoir d'où vient le problème, mais je compte vérifier;

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je n'ai pas regardé ou analysé tout votre code mais une remarque peut-être :

    -je ne vois pas dans votre code : Option Base 1

    et dans ce cas l'index par défaut commence à 0

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par jacques_jean Voir le message
    Bonjour,

    Je n'ai pas regardé ou analysé tout votre code mais une remarque peut-être :

    -je ne vois pas dans votre code : Option Base 1

    et dans ce cas l'index par défaut commence à 0
    Ca il n'y en a pas besoin puisqu'il fait de l'allocation dynamique où il déclare explicitement le début de son tableau comme étant l'indice 1.

    Tiré de l'aide de VBA:
    subscripts Dimensions d'une variable tableau. Vous pouvez déclarer jusqu'à 60 dimensions. La syntaxe de l'argument subscripts est la suivante :
    [lower To] upper [,[lower To] upper] . . .

    La limite inférieure d'un tableau qui n'est pas explicitement fixée dans l'argument lower est déterminée par l'instruction Option Base. Cette limite a la valeur zéro en l'absence d'instruction Option Base.

    Ton Userform, il se trouve où? Dans Excel ou dans un exécutable VB? parce qu'au vu de ton code je me demande si c'est bien du VBA que t'es en train de faire...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 74
    Par défaut
    Mon userForm se trouve dans excel ( visual basic editor )

    Par exemple si je fait le meme code en changant cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myXl.Range(Cells(1, 1), Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau
    Par celle la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range(Cells(1, 1), Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau
    Ca va bien créer mon tableau mais dans la page excel ouverte par defaut et pas dans ma page souhaité, c'est a dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    D:\Documents and  Settings\Invité\Mes documents\Justin\test\toto.xls
    Merci de vos aides

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Ca je l'avais compris.

    Mais puisque tu travailles donc déjà dans Excel, quel est pour toi l'intérêt de faire ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim myXl As Excel.Application
        Dim mySheet As Excel.Workbook
     
       'Creation de l'objet an excel
       Set myXl = CreateObject("Excel.Application")
    Tu n'as pas besoin de faire ça.
    Pour désigner tes classeurs, il te suffit juste de taper "Workbooks("Classeur1.xls")" ou "Workbooks("Classeur1")" s'il n'est pas encore enregistré.
    Pour désigner tes plages, tu devras juste faire "Range("A1")", mais d'abord activer le classeur désiré ou alors tu le référence avant la plage.

    Après, pour ton problème, c'est que tu dois renseigner tes cells complètement tout comme tu l'as fait pour range. Ce problème m'est déjà arrivé à plusieurs reprises.

    Si tu veux rester dans ton cas compliqué, tu dois taper ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myXl.Range(myXl.Cells(1, 1), myXl.Cells(UBound(NomTableau, 1), UBound(NomTableau, 2))) = NomTableau
    J'ai essayé, et je te confirme que ça marche.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 74
    Par défaut re
    Bonjour,

    Je ne comprends ce que tu veux par

    Y aurait-il moyen d'avoir le classeur excel à recopier?
    Si ce sont les valeur a recopier c'est le tableau qui est dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    'Redéfinit la taille du tableau
        x = 10
        y = 5
        ReDim NomTableau(1 To x, 1 To y)
     
        'Alimente les éléments du tableau
        For i = 1 To x
            For j = 1 To y
                NomTableau(i, j) = i & "-" & j
            Next j
        Next i

    Si c'est le nom de mon classeur Excel c'est Classeur1.xls et j'ai créé un UserForm avec un simple bouton CommandButton1



    Merci de ton aide

    Bien cordialement

  8. #8
    Membre éprouvé Avatar de zebulon2212
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    Je ne comprend pas ta ligne
    Et j'ai une erreur dans mon code au moment d'entrer mes données dans cette page.
    est-ce pendant l'exécution de ton code ou lorsque tu veux l'éditer ?
    As-tu testé ton code en mode débugguage ?

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 74
    Par défaut re
    Voila le message d'erreur lors de l'execution

    La méthode Range de l'objet _Application a échoué


    Je ne l'ai pas testé en mode debugage

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

Discussions similaires

  1. [Débutant] Enregistrer dans feuilles excel
    Par kariboubou dans le forum MATLAB
    Réponses: 9
    Dernier message: 16/06/2009, 12h18
  2. vba excel : insertion d image gif dans feuille excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/01/2007, 13h16
  3. Recherche d'enregistrement dans table Excel
    Par SlySylvain dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/12/2006, 15h47
  4. Ecrire dans feuille excel
    Par Matmal11 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/09/2006, 08h49
  5. [VBA] problème choix de cellule dans feuille excel
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/02/2006, 10h48

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