Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Erreur d'exécution 9 ou 13 que je n'arrive pas à résoudre.

massol

XLDnaute Junior
Bonjour,

Que fait ma procédure ?

Avec la première boucle je mets en mémoire à l'aide d'un tableau (Tab_data) la totalité de la base de données (50 colonnes et presque 400 000 lignes contenues dans le fichier "schema.xml_temporary.xlsx") et avec la deuxième boucle je n'extrais que les lignes qui m'intéressent (celles qui contiennent "report" dans les cellules situées à une certaine colonne... ) et enfin je les récupère dans ma feuille EXCEL.

A l'exécution de ma procédure j'ai le message suivant :



Voici ma procédure complète :

VB:
Sub macro()
'
Dim derniere_ligne As Long
Dim i As Long
Dim Dossier_racine As String
'
'Saisie du dossier racine (valeur par défaut "P:\EXPORT"
Dossier_racine = InputBox("Select the folder where the database is located", "Data base folder", "P:\EXPORT")
'
'------ ON OUVRE LE FICHIER "schema.xml_temporary.xlsx" ET ON VA DANS L'ONGLET "schema.xml_temporary" ------
'
Workbooks.Open Filename:=Dossier_racine & "\" & "schema.xml_temporary.xlsx"
Sheets("schema.xml_temporary").Activate
'
'Recherche du numéro de la dernière ligne
'
derniere_ligne = Range("A1").End(xlDown).Row
'
'MsgBox ("Dernière ligne = ") & derniere_ligne
'
MsgBox ("The storage of the database will begin")
'
Tab_data = Range(Cells(1, 1), Cells(derniere_ligne - 2, 50)).Value
'
'
'Enregistrement des valeurs dans le tableau
    For i = 0 To derniere_ligne - 2
 
        Tab_data(i, 0) = Range("A" & i + 2)
        Tab_data(i, 1) = Range("B" & i + 2)
        Tab_data(i, 2) = Range("C" & i + 2)
        Tab_data(i, 3) = Range("D" & i + 2)
        Tab_data(i, 4) = Range("E" & i + 2)
        Tab_data(i, 5) = Range("F" & i + 2)
        Tab_data(i, 6) = Range("G" & i + 2)
        Tab_data(i, 7) = Range("H" & i + 2)
        Tab_data(i, 8) = Range("I" & i + 2)
        Tab_data(i, 9) = Range("J" & i + 2)
        Tab_data(i, 10) = Range("K" & i + 2)
        Tab_data(i, 11) = Range("L" & i + 2)
        Tab_data(i, 12) = Range("M" & i + 2)
        Tab_data(i, 13) = Range("N" & i + 2)
        Tab_data(i, 14) = Range("O" & i + 2)
        Tab_data(i, 15) = Range("P" & i + 2)
        Tab_data(i, 16) = Range("Q" & i + 2)
        Tab_data(i, 17) = Range("R" & i + 2)
        Tab_data(i, 18) = Range("S" & i + 2)
        Tab_data(i, 19) = Range("T" & i + 2)
        Tab_data(i, 20) = Range("U" & i + 2)
        Tab_data(i, 21) = Range("V" & i + 2)
        Tab_data(i, 22) = Range("W" & i + 2)
        Tab_data(i, 23) = Range("X" & i + 2)
        Tab_data(i, 24) = Range("Y" & i + 2)
        Tab_data(i, 25) = Range("Z" & i + 2)
        Tab_data(i, 26) = Range("AA" & i + 2)
        Tab_data(i, 27) = Range("AB" & i + 2)
        Tab_data(i, 28) = Range("AC" & i + 2)
        Tab_data(i, 29) = Range("AD" & i + 2)
        Tab_data(i, 30) = Range("AE" & i + 2)
        Tab_data(i, 31) = Range("AF" & i + 2)
        Tab_data(i, 32) = Range("AG" & i + 2)
        Tab_data(i, 33) = Range("AH" & i + 2)
        Tab_data(i, 34) = Range("AI" & i + 2)
        Tab_data(i, 35) = Range("AJ" & i + 2)
        Tab_data(i, 36) = Range("AK" & i + 2)
        Tab_data(i, 37) = Range("AL" & i + 2)
        Tab_data(i, 38) = Range("AM" & i + 2)
        Tab_data(i, 39) = Range("AN" & i + 2)
        Tab_data(i, 40) = Range("AO" & i + 2)
        Tab_data(i, 41) = Range("AP" & i + 2)
        Tab_data(i, 42) = Range("AQ" & i + 2)
        Tab_data(i, 43) = Range("AR" & i + 2)
        Tab_data(i, 44) = Range("AS" & i + 2)
        Tab_data(i, 45) = Range("AT" & i + 2)
        Tab_data(i, 46) = Range("AU" & i + 2)
        Tab_data(i, 47) = Range("AV" & i + 2)
        Tab_data(i, 48) = Range("AW" & i + 2)
        Tab_data(i, 49) = Range("AX" & i + 2)
        Tab_data(i, 50) = Range("AY" & i + 2)
    Next
'
'Fin de mise en mémoire
'
'Fermeture du fichier "schema.xml_temporary.xlsx" sans sauvegarder
'
Workbooks("schema.xml_temporary.xlsx").Close False
'
MsgBox ("Data extraction will begin")
'
'Extraction des lignes
'
For i = 0 To derniere_ligne - 2
'
If Tab_data(i, 21) Like "*report*" Then
'
    Cells(i + 2, 1) = Tab_data(i, 0)
    Cells(i + 2, 2) = Tab_data(i, 1)
    Cells(i + 2, 3) = Tab_data(i, 2)
    Cells(i + 2, 4) = Tab_data(i, 3)
    Cells(i + 2, 5) = Tab_data(i, 4)
    Cells(i + 2, 6) = Tab_data(i, 5)
    Cells(i + 2, 7) = Tab_data(i, 6)
    Cells(i + 2, 8) = Tab_data(i, 7)
    Cells(i + 2, 9) = Tab_data(i, 8)
    Cells(i + 2, 10) = Tab_data(i, 9)
    Cells(i + 2, 11) = Tab_data(i, 10)
    Cells(i + 2, 12) = Tab_data(i, 11)
    Cells(i + 2, 13) = Tab_data(i, 12)
    Cells(i + 2, 14) = Tab_data(i, 13)
    Cells(i + 2, 15) = Tab_data(i, 14)
    Cells(i + 2, 16) = Tab_data(i, 15)
    Cells(i + 2, 17) = Tab_data(i, 16)
    Cells(i + 2, 18) = Tab_data(i, 17)
    Cells(i + 2, 19) = Tab_data(i, 18)
    Cells(i + 2, 20) = Tab_data(i, 19)
    Cells(i + 2, 21) = Tab_data(i, 20)
    Cells(i + 2, 22) = Tab_data(i, 21)
    Cells(i + 2, 23) = Tab_data(i, 22)
    Cells(i + 2, 24) = Tab_data(i, 23)
    Cells(i + 2, 25) = Tab_data(i, 24)
    Cells(i + 2, 26) = Tab_data(i, 25)
    Cells(i + 2, 27) = Tab_data(i, 26)
    Cells(i + 2, 28) = Tab_data(i, 27)
    Cells(i + 2, 29) = Tab_data(i, 28)
    Cells(i + 2, 30) = Tab_data(i, 29)
    Cells(i + 2, 31) = Tab_data(i, 30)
    Cells(i + 2, 32) = Tab_data(i, 31)
    Cells(i + 2, 33) = Tab_data(i, 32)
    Cells(i + 2, 34) = Tab_data(i, 33)
    Cells(i + 2, 35) = Tab_data(i, 34)
    Cells(i + 2, 36) = Tab_data(i, 35)
    Cells(i + 2, 37) = Tab_data(i, 36)
    Cells(i + 2, 38) = Tab_data(i, 37)
    Cells(i + 2, 39) = Tab_data(i, 38)
    Cells(i + 2, 40) = Tab_data(i, 39)
    Cells(i + 2, 41) = Tab_data(i, 40)
    Cells(i + 2, 42) = Tab_data(i, 41)
    Cells(i + 2, 43) = Tab_data(i, 42)
    Cells(i + 2, 44) = Tab_data(i, 43)
    Cells(i + 2, 45) = Tab_data(i, 44)
    Cells(i + 2, 46) = Tab_data(i, 45)
    Cells(i + 2, 47) = Tab_data(i, 46)
    Cells(i + 2, 48) = Tab_data(i, 47)
    Cells(i + 2, 49) = Tab_data(i, 48)
    Cells(i + 2, 50) = Tab_data(i, 49)
    Cells(i + 2, 51) = Tab_data(i, 50)
'
  Else
'
End If
'
Next
'
Range("A1").Select
'
MsgBox ("Data extraction completed")
'
End Sub

Je précise que j'ai ce message depuis que j'ai remplacé :

VB:
Dim Tab_ECM()
ReDim Tab_ECM(derniere_ligne - 2, 50)

par

VB:
derniere_ligne = Range("A1").End(xlDown).Row
Tab_ECM = Range(Cells(1, 1), Cells(derniere_ligne - 2, 50)).Value

Dans la première version de mon code (celle avec les commandes dim et Redim) j'avais à l’exécution le message suivant :



Dans ce cas le pb viendrait de la ligne suivante :

VB:
If Tab_data(i, 21) Like "*report*" Then
Je patauge depuis un moment sur ce sujet..... Des suggestions ? Merci par avance.

Cdlt.
Jérôme
 

vgendron

XLDnaute Barbatruc
Bonjour

Sans ton fichier en guise d'exemple, difficile de comprendre
mais voici quelques éléments

1) il faut bien déclarer le tableau
VB:
Dim Tab_Data() as variant

'Recherche du numéro de la dernière ligne ===> je préfère toujours partir du bas.. sinon.. en cas de tableau vide, tu vas te retrouver avec une dernièr ligne tout en bas
'
VB:
derniere_ligne = Range("A" &rows.count).End(xlup).Row
'
'MsgBox ("Dernière ligne = ") & derniere_ligne
'
MsgBox ("The storage of the database will begin")
'
Tab_data = Range("A1").resize(derniere_ligne - 2, 50).Value '===> cette ligne suffit a elle seule pour remplir le tableau
donc ta boucle
VB:
Enregistrement des valeurs dans le tableau
    For i = 0 To derniere_ligne - 2

        Tab_data(i, 0) = Range("A" & i + 2)
est totalement inutile .. à moins que tu ne fasses quelques d'autre sur les données..?

d'ailleurs.. la ligne
VB:
ab_data = Range("A1").resize(derniere_ligne - 2, 50).Value
remplit un tableau de 50 colonnes

et ta boucle travaille sur 51 colonnes===> erreur 9
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Massol, bonjour le forum,

Peut-être comme ça :

VB:
Sub macro()
Dim OE As Worksheet
Dim Dossier_racine As String
Dim OS As Worksheet
Dim derniere_ligne As Long
Dim Tab_data As Variant
Dim DEST As Range

Set OE = ActiveSheet '(ou Set OE = Worksheets("Ton_Onglet") à adapter à ton cas)
Dossier_racine = InputBox("Select the folder where the database is located", "Data base folder", "P:\EXPORT")
Workbooks.Open Filename:=Dossier_racine & "\" & "schema.xml_temporary.xlsx"
Set OS = ActiveWorkbook.Sheets("schema.xml_temporary")
derniere_ligne = OS.Range("A1").End(xlDown).Row
MsgBox ("The storage of the database will begin")
Tab_data = OS.Range(OS.Cells(1, 1), OS.Cells(derniere_ligne - 2, 50))
Workbooks("schema.xml_temporary.xlsx").Close False
MsgBox ("Data extraction will begin")
For I = 1 To UBound(Tab_data, 1)
    If Tab_data(I, 21) Like "*report*" Then
        Set DEST = OE.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
        DEST.Resize(1, UBound(Tab_data, 2)).Value = Application.Index(Tab_data, I)
    End If
Next I
OE.Range("A1").Select
MsgBox ("Data extraction completed")
End Sub
 

massol

XLDnaute Junior
J'ai essayé de joindre un tout petit morceau du fichier ""schema.xml_temporary.xlsx " mais celui-ci est trop volumineux. Après suppression de pratiquement toutes les lignes Il fait environ 6,5 Mo. Comment le transmettre ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Il est clair que l'on ne va pas m'amuser à recréer tes données. Si tu faisais l'effort d'extraire, de ton énorme fichier d'origine, quelques centaines de lignes et de nous proposer les deux fichiers on pourrait y voir plus clair et te proposer une solution mieux adaptée...
 

massol

XLDnaute Junior
Bonjour,

Ci-joint une copie d'écran d'une toute petite partie du fichier "schema.xml_temporary.xlsx ". Je vous montre notamment la colonne V c'est à dire la 22ème colonne. Du fait de la confidentialité de ce fichier je ne peux pas faire mieux. J'ai par ailleurs modifié les données apparaissant dans cette copie d'écran.



Ci-dessous la version modifiée de la procédure tenant compte de vos commentaires :

VB:
Sub macro()
'
Dim derniere_ligne As Long
Dim i As Long
Dim statusBarInitial As Long
Dim Dossier_racine As String
'Dim Tab_data() As Variant
'
'Saisie du dossier racine (valeur par défaut "P:\EXPORT"
Dossier_racine = InputBox("Select the folder where the database is located", "Data base folder", "P:\EXPORT")
'
'------ ON OUVRE LE FICHIER "schema.xml_temporary.xlsx" ET ON VA DANS L'ONGLET "schema.xml_temporary" ------
'
Workbooks.Open Filename:=Dossier_racine & "\" & "schema.xml_temporary.xlsx"
Sheets("schema.xml_temporary").Activate
'
'Recherche du numéro de la dernière ligne
'
derniere_ligne = Range("A" & Rows.Count).End(xlUp).Row
'
MsgBox ("Dernière ligne = ") & derniere_ligne
'
MsgBox ("The storage of the database will begin")
'
'Cette ligne suffit à elle seule pour remplir le tableau !!
'La zone mise en mémoire part de la 2ème ligne --> Range("A2") et "derniere_ligne - 1"
'Le tableau contient 51 colonnes
'
Tab_data = Range("A2").Resize(derniere_ligne - 1, 51).Value
'
'Fin de mise en mémoire
'
'Fermeture du fichier "schema.xml_temporary.xlsx" sans sauvegarder
'
Workbooks("schema.xml_temporary.xlsx").Close False
'
MsgBox ("Data extraction will begin")
'
'
'Extraction des lignes pour lesquelles "*Report*" apparait en 22ème colonne
'
For i = 1 To derniere_ligne - 1
'
'
If Tab_data(i, 22) Like "*Report*" Then
'
    Cells(i + 2, 1) = Tab_data(i, 1)
    Cells(i + 2, 2) = Tab_data(i, 2)
    Cells(i + 2, 3) = Tab_data(i, 3)
    Cells(i + 2, 4) = Tab_data(i, 4)
    Cells(i + 2, 5) = Tab_data(i, 5)
    Cells(i + 2, 6) = Tab_data(i, 6)
    Cells(i + 2, 7) = Tab_data(i, 7)
    Cells(i + 2, 8) = Tab_data(i, 8)
    Cells(i + 2, 9) = Tab_data(i, 9)
    Cells(i + 2, 10) = Tab_data(i, 10)
    Cells(i + 2, 11) = Tab_data(i, 11)
    Cells(i + 2, 12) = Tab_data(i, 12)
    Cells(i + 2, 13) = Tab_data(i, 13)
    Cells(i + 2, 14) = Tab_data(i, 14)
    Cells(i + 2, 15) = Tab_data(i, 15)
    Cells(i + 2, 16) = Tab_data(i, 16)
    Cells(i + 2, 17) = Tab_data(i, 17)
    Cells(i + 2, 18) = Tab_data(i, 18)
    Cells(i + 2, 19) = Tab_data(i, 19)
    Cells(i + 2, 20) = Tab_data(i, 20)
    Cells(i + 2, 21) = Tab_data(i, 21)
    Cells(i + 2, 22) = Tab_data(i, 22)
    Cells(i + 2, 23) = Tab_data(i, 23)
    Cells(i + 2, 24) = Tab_data(i, 24)
    Cells(i + 2, 25) = Tab_data(i, 25)
    Cells(i + 2, 26) = Tab_data(i, 26)
    Cells(i + 2, 27) = Tab_data(i, 27)
    Cells(i + 2, 28) = Tab_data(i, 28)
    Cells(i + 2, 29) = Tab_data(i, 29)
    Cells(i + 2, 30) = Tab_data(i, 30)
    Cells(i + 2, 31) = Tab_data(i, 31)
    Cells(i + 2, 32) = Tab_data(i, 32)
    Cells(i + 2, 33) = Tab_data(i, 33)
    Cells(i + 2, 34) = Tab_data(i, 34)
    Cells(i + 2, 35) = Tab_data(i, 35)
    Cells(i + 2, 36) = Tab_data(i, 36)
    Cells(i + 2, 37) = Tab_data(i, 37)
    Cells(i + 2, 38) = Tab_data(i, 38)
    Cells(i + 2, 39) = Tab_data(i, 39)
    Cells(i + 2, 40) = Tab_data(i, 40)
    Cells(i + 2, 41) = Tab_data(i, 41)
    Cells(i + 2, 42) = Tab_data(i, 42)
    Cells(i + 2, 43) = Tab_data(i, 43)
    Cells(i + 2, 44) = Tab_data(i, 44)
    Cells(i + 2, 45) = Tab_data(i, 45)
    Cells(i + 2, 46) = Tab_data(i, 46)
    Cells(i + 2, 47) = Tab_data(i, 47)
    Cells(i + 2, 48) = Tab_data(i, 48)
    Cells(i + 2, 49) = Tab_data(i, 49)
    Cells(i + 2, 50) = Tab_data(i, 50)
    Cells(i + 2, 51) = Tab_data(i, 51)
'
  Else
'
End If
'
Next
'
Range("A1").Select
'
MsgBox ("Data extraction completed")
'
End Sub

A l'éxécution j'ai un message d'erreur :



Merci par avance.

Cdlt.
Jérôme
 
C

Compte Supprimé 979

Guest
Re,

Bon pour ma part, je te laisse te débrouiller

Si tu ne veux pas faire un petit effort d'anonymiser 2 ou 3 lignes de 50 colonnes... comment dire

Ah oui, je ne ferais pas non plus l'effort de trouver une solution pour toi
 

Staple1600

XLDnaute Barbatruc
Bonsoir

[massol]
Pour info
XLD accepte les *.zip en PJ
et comme dit par BrunoM45, un fichier de quelques lignes (une vingtaine peut suffire), sans fioritures inutiles
(images, bordures, couleurs etc) devrait largement pouvoir être joint à ta discussion.

PS: J'oubliais, évidemment canoniser les données contenues dans le fichier avant de le joindre.
 

Staple1600

XLDnaute Barbatruc
Bonjour ma pomme

C'est un prêté pour un rendu (un C pour un N )
Et y a même pas l'ombre d'une contrepèterie dans la coquille!

Je laisse tel quel (en supputant que massol aura compris de quoi je cause)

PS: si j'avais écrit canonner les données, au moins là les données elles seraient plus qu'anonymes
 

massol

XLDnaute Junior
Bigre. Que de réactions ai je déclenché ...Bon, je crois que je vais devoir m y mettre et "anonymiser" mon fichier avant de le transmettre. Faut simplement que je me libère un peu de temps pour le faire. Un tout petit peu de patience... Quoi qu il en soit un grand merci par avance pour vos commentaires, suggestions, support, ....
Cdlt.
Jérôme
 

Staple1600

XLDnaute Barbatruc
1 - Conformité RGPD
Tout message ou fichier déposé sur ce site ne doit pas comporter de données à caractère personnel (DCP).
Il convient d’anonymiser toutes les données permettant d’identifier directement ou indirectement une personne.
XLD ne saurait être tenu responsable au cas où un visiteur du site posterait des données non conformes à la législation en vigueur.
Si vous détectez une non conformité, merci d'alerter le webmaster de ce site : webmaster@excel-downloads.com, nous supprimerons les données dans les plus brefs délais.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…