Lire les données dans un autre classeur excel

Snoopa-star -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, Je suis débutante en VBA et le peu que je connaisse c'est grâce au forum !!

Voilà mon soucis je souhaite créer un programme qui lise les données dans un autre classeur excel fermé (qui contient les même données que dans mon classeur actif) et effacer dans le classeur fermé les cellules dont le contenu est semblable aux cellules de mon classeur ouvert.
- Je ne maîtrise pas très bien les boucles (donc je préfère détailler)
- J'ai un message d'erreur " Erreur d'xecution 1004, erreur définie par l'application ou l'objet"

voici mon programme :

Sub choix_table_gnl()

Dim appxl As Excel.Application
Dim fichier As Window
Dim feuille As Worksheet
Set appxl = CreateObject("Excel.application")
Dim read As Variant

With appxl
.Workbooks.Open "C:\Documents and Settings\N0762215\My Documents\SEMINAIRE 2012\Test_classeur\Liste_diner.xls"
.Visible = False
End With

Set fichier = appxl.Windows("Liste_diner.xls")
fichier.Activate
Set feuille = appxl.Sheets("Liste_diner_1")

For i = 2 To 539
feuille.Range("D" & i).Select

For j = 8 To 18
If Activesheet.Range("D" & j) = Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i) Then
Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete
Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete
Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete

appxl.Workbooks("Liste_diner.xls").Save
appxl.Workbooks("Liste_diner.xld").Close

End If
Next
Next

End Sub

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    If Activesheet.Range("D" & j) quel classeur??

    Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i) Then
    Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete
    Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete
    Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete

    Lorsque que vous voulez utiliser Workbooks("Liste_diner"), il faut toujours mettre devant appxl. puisque vous avez cree :

    Set appxl = CreateObject("Excel.application")

    Pour les boucles, je n'ai rien compris de ce que vous voulez faire
    1
    1. snoopa-star
       
      Bonjour Monsieur pour votre réponse,


      "If Activesheet.Range("D" & j) quel classeur?? "
      =>> Cela correspond à la feuille active de mon classeur ouvert

      J'utilise l'instruction FOR pour faire référence à mes lignes.
      L'instruction que je souhaite faire executer est la suivante :


      "Si la cellule X de la feuille A mon classeur ouvert est identique à la cellule X de la feuille B mon classeur fermé,

      alors il faut suprimer le contenu de la cellule X de la feuille B de mon classeur fermé"


      Je ne sais pas comment je pourrai écrire ça plus rapidement donc j'ai utilisé cette méthode qui marche.
      Mon soucis est dans la lecture des données dans un classeur fermé.

      Donc je compte sur votre connaissance pour m'éclairer la dessus!

      Merci
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Mon soucis est dans la lecture des données dans un classeur fermé.


      Lorsque que vous voulez utiliser Workbooks("Liste_diner"), il faut toujours mettre devant appxl. puisque vous avez cree :

      Set appxl = CreateObject("Excel.application")

      Donc:

      Sub choix_table_gnl()

      Dim appxl As Excel.Application
      Dim fichier As Window
      Dim feuille As Worksheet
      Set appxl = CreateObject("Excel.application")
      Dim read As Variant

      With appxl
      .Workbooks.Open "C:\Documents and Settings\N0762215\My Documents\SEMINAIRE 2012\Test_classeur\Liste_diner.xls"
      .Visible = False
      End With


      Set fichier = appxl.Windows("Liste_diner.xls")
      fichier.Activate
      Set feuille = appxl.Sheets("Liste_diner_1")

      For i = 2 To 539
      feuille.Range("D" & i).Select

      For j = 8 To 18
      If Activesheet.Range("D" & j) =appxl. Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i) Then
      appxl.Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete
      appxl.Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete
      appxl.Workbooks("Liste_diner").Sheets("Liste_diner_1").Range("D" & i).Delete


      appxl.Workbooks("Liste_diner.xls").Save
      appxl.Workbooks("Liste_diner.xld").Close

      End If
      Next j
      Next i

      End Sub


      Avec un exemple de vos fichiers, il serait possible de mieux vous aider. C'est vous qui voyez.

      Bonne suite
      0