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 :

Instances de worksheet [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Par défaut Instances de worksheet
    Je vous livre un bout de code qui me fait un peu criser

    Objectif :
    A partir d'un fichier existant et ouvert, la fonction Sub btnImport_Click() ouvre un second fichier, me charge une COMBO avec la liste des onglets
    La fonction btnImportOnglet_Click() me fait des copier du fichier qui vient d'être ouvert vers le fichier d'origine

    J'ai le code d'erreur suivant,
    Erreur d'exécution 1004, La méthode Range de l'objet worksheet à échoué
    pointant sur la ligne 62 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shImport.Range(Cells(inImportDeb, 1), Cells(inImportFin, 1)).EntireRow.Copy
    Je dois me fourvoyer dans mes instances de WorkSheet, mais ou ? Merci pour votre aide.

    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
    59
    60
    61
    62
    63
    64
    65
    Private Const BDX_COL_INFO = 1
    Public wbFicImport As Workbook
    Public shSource As Worksheet
    Public shImport As Worksheet
     
    Private Sub btnImport_Click()
    Dim obFdOpen As FileDialog
    Dim szFicNom As String
    Dim inNbOnglets As Integer
     
    'Ouverture du fichier à importer
    Set obFdOpen = Application.FileDialog(msoFileDialogOpen)
    obFdOpen.Title = "Ouvrir un fichier sur lequel importer des onglets"
    If obFdOpen.Show = -1 Then
        szFicNom = obFdOpen.SelectedItems(1)
    Else
        Exit Sub
    End If
     
    Set wbFicImport = Workbooks.Open(szFicNom)
     
    Me.FrameImporter.Visible = True
    Me.ioLabel.Visible = True
    Me.cbOnglets.Visible = True
    Me.btnImportOnglet.Visible = True
     
    For Each shImport In wbFicImport.Sheets
        Me.cbOnglets.AddItem shImport.Name
    Next shImport
     
    ThisWorkbook.Activate
     
    End Sub
     
     
    Private Sub btnImportOnglet_Click()
    Dim inBcl As Integer
    Dim inSourceDeb As Integer
    Dim inSourceFin As Integer
    Dim inImportDeb As Integer
    Dim inImportFin As Integer
     
    'On cherche début et fin de la zone bordereau source
    Set shSource = ThisWorkbook.Sheets(Me.cbOnglets.Value)
    inBcl = 1
    While shSource.Cells(inBcl, BDX_COL_INFO).Value <> "F"
        If shSource.Cells(inBcl, BDX_COL_INFO).Value = "D" Then inSourceDeb = inBcl + 1
        inBcl = inBcl + 1
    Wend
    inSourceFin = inBcl - 1
    'On cherche début et fin de la zone bordereau à importer
    Set shImport = wbFicImport.Sheets(Me.cbOnglets.Value)
    inBcl = 1
    While shImport.Cells(inBcl, BDX_COL_INFO).Value <> "F"
        If shImport.Cells(inBcl, BDX_COL_INFO).Value = "D" Then inImportDeb = inBcl + 1
        inBcl = inBcl + 1
    Wend
    inImportFin = inBcl - 1
     
    'Suppression des lignes et copier coller
    shSource.Range(Cells(inSourceDeb, 1), Cells(inSourceFin, 1)).EntireRow.Delete Shift:=xlUp
    shImport.Range(Cells(inImportDeb, 1), Cells(inImportFin, 1)).EntireRow.Copy
    shSource.Range(Cells(inSourceFin, 1), Cells(inSourceFin, 1)).Insert Shift:=xlDown
     
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par sfourre Voir le message
    Erreur d'exécution 1004, La méthode Range de l'objet worksheet à échoué
    pointant sur la ligne 62 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shImport.Range(Cells(inImportDeb, 1), Cells(inImportFin, 1)).EntireRow.Copy
    Ce que tu as écrit là correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shImport.Range(ActiveSheet.Cells(inImportDeb, 1), ActiveSheet.Cells(inImportFin, 1)).EntireRow.Copy
    Si shImport n'est pas la feuille active, ça équivaut à demander de mettre dans une zone de shImport des cellules d'une autre feuille, ce que Excel n'acceptera pas.

    Bref, il faut que tu reformules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shImport.Range(shImport.Cells(inImportDeb, 1), shImport.Cells(inImportFin, 1)).EntireRow.Copy
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With shImport
       .Range(.Cells(inImportDeb, 1), .Cells(inImportFin, 1)).EntireRow.Copy
    End With
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shImport.Range("A" & inImportDeb & ":A" & inImportFin).EntireRow.Copy
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shImport.Rows(inImportDeb & ":" & inImportFin).Copy
    ou bien une bonne demi-douzaine d'autres formes.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/03/2019, 03h37
  2. Communiquer entre plusieurs instances d'applications
    Par bourinator dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/09/2003, 11h24
  3. [VB6] [DLL] DLL à instance unique
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 19/09/2003, 08h07
  4. [VB6]Passer le focus à une instance précedente
    Par Jeremiah dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 16/09/2003, 10h01
  5. [] plusieurs instances de form avec leur contexte ?
    Par Seb-31 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/04/2003, 13h56

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