Dépassement de capacité
Fermé
Mathilde
-
3 sept. 2015 à 15:39
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 8 sept. 2015 à 14:18
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 8 sept. 2015 à 14:18
A voir également:
- Dépassement de capacité
- Créer un compte yahoo mail gratuit avec capacité de - Guide
- Yahoo Mail - Télécharger - Mail
- Test capacité pc - Guide
- Capacité disque dur externe - Guide
- Dépassement de capacité vba ✓ - Forum Excel
5 réponses
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
3 sept. 2015 à 15:50
3 sept. 2015 à 15:50
Bonjour,
1/ pour avoir la derniere cellule non vide d'une colonne, sans boucle infernale:
2/ Et ensuite j'ai : comment passez vous la variable c d'une procedure a l'autre et vous l'avez declare de quel type
1/ pour avoir la derniere cellule non vide d'une colonne, sans boucle infernale:
c= Range("A" & Rows.Count).End(xlUp).Row
2/ Et ensuite j'ai : comment passez vous la variable c d'une procedure a l'autre et vous l'avez declare de quel type
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
3 sept. 2015 à 15:54
3 sept. 2015 à 15:54
Bonjour
comme on ne connait pas la déclaration de tes variables b et c...
et comment implémente tu "c "
car tu dis
Ce bout de code est dans une autre ...
comme on ne connait pas la déclaration de tes variables b et c...
et comment implémente tu "c "
car tu dis
Ce bout de code est dans une autre ...
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
3 sept. 2015 à 15:58
3 sept. 2015 à 15:58
salut F89,
de toutes façons en traitant de cellules en cellules sur 49000 lignes, tu as largement le temps de faire une pétanque!
de toutes façons en traitant de cellules en cellules sur 49000 lignes, tu as largement le temps de faire une pétanque!
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 sept. 2015 à 16:02
3 sept. 2015 à 16:02
Bonjour,
C'est un passe-temps comme un autre
C'est un passe-temps comme un autre
Sub extraction()
' Récupérer la taille du tableau final après extraction
c = 0
While Range("A1").Offset(c, 0) <> ""
c = c + 1
Wend
' Appel des fonctions
Call ColonneCmdReel(c)
Call Date(c)
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ColonneCmdReel(c)
Set wb = ActiveWorkbook
ExtractDir = ActiveWorkbook.Path & "\YMMRPT011\"
Dim NomOngletInputs As String
NomOngletInputs = "Inputs011"
wb.Activate
wb.Worksheets(NomOngletInputs).Activate
' Opération sur colonne cmdé réel
For b = 2 To c + 1
If Cells(b, 8).Value = 0 Then
Cells(b, 14).Value = Cells(b, 7).Value
Else: Cells(b, 14).Value = Cells(b, 9).Value
End If
Next b
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Je sais pas si cela suffit.
J'ai essayé cette méthode :
For Each cel In Range(Range("A2"), Range("A65000").End(xlUp))
If cel.Offset(0, 7).Value = 0 Then
cel.Offset(0, 13).Value = cel.Offset(0, 6).Value
Else: cel.Offset(0, 13).Value = cel.Offset(0, 8).Value
End If
Next cel
Ca marche pour cette fonction mais par exemple pour une autre fonction j'avais ça :
Sub Date(c)
For b = 2 To c + 1
Cells(b, 15).Value = Format(Cells(b, 12).Value, "yyyy")
Next b
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
J'ai remplacé par :
For Each cel In Range(Range("A2"), Range("A65000").End(xlUp))
cel.Offset(0, 14).Value = Format(cel.Offset(0, 11).Value, "yyyy")
Next cel
Ca ne me met pas le bon format que je souhaite.....
' Récupérer la taille du tableau final après extraction
c = 0
While Range("A1").Offset(c, 0) <> ""
c = c + 1
Wend
' Appel des fonctions
Call ColonneCmdReel(c)
Call Date(c)
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ColonneCmdReel(c)
Set wb = ActiveWorkbook
ExtractDir = ActiveWorkbook.Path & "\YMMRPT011\"
Dim NomOngletInputs As String
NomOngletInputs = "Inputs011"
wb.Activate
wb.Worksheets(NomOngletInputs).Activate
' Opération sur colonne cmdé réel
For b = 2 To c + 1
If Cells(b, 8).Value = 0 Then
Cells(b, 14).Value = Cells(b, 7).Value
Else: Cells(b, 14).Value = Cells(b, 9).Value
End If
Next b
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Je sais pas si cela suffit.
J'ai essayé cette méthode :
For Each cel In Range(Range("A2"), Range("A65000").End(xlUp))
If cel.Offset(0, 7).Value = 0 Then
cel.Offset(0, 13).Value = cel.Offset(0, 6).Value
Else: cel.Offset(0, 13).Value = cel.Offset(0, 8).Value
End If
Next cel
Ca marche pour cette fonction mais par exemple pour une autre fonction j'avais ça :
Sub Date(c)
For b = 2 To c + 1
Cells(b, 15).Value = Format(Cells(b, 12).Value, "yyyy")
Next b
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
J'ai remplacé par :
For Each cel In Range(Range("A2"), Range("A65000").End(xlUp))
cel.Offset(0, 14).Value = Format(cel.Offset(0, 11).Value, "yyyy")
Next cel
Ca ne me met pas le bon format que je souhaite.....
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
3 sept. 2015 à 16:45
3 sept. 2015 à 16:45
Re,
essayez ceci:
essayez ceci:
Sub extraction() Dim NomOngletInputs As String, plage As Range, cel As Range, b As Long Application.ScreenUpdating = False Set wb = ActiveWorkbook ExtractDir = ActiveWorkbook.Path & "\YMMRPT011\" NomOngletInputs = "Inputs011" wb.Activate wb.Worksheets(NomOngletInputs).Activate ' Opération sur colonne cmdé réel Set plage = Range(Range("A2"), Range("A65000").End(xlUp)) For Each cel In plage If cel.Offset(0, 7).Value = 0 Then cel.Offset(0, 13).Value = cel.Offset(0, 6).Value Else cel.Offset(0, 13).Value = cel.Offset(0, 8).Value End If 'format date annee b = cel.Row Cells(b, 15).Value = Format(Cells(b, 12).Value, "yyyy") Next cel Application.ScreenUpdating = True End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
Modifié par f894009 le 4/09/2015 à 11:16
Modifié par f894009 le 4/09/2015 à 11:16
Bonjour,
un peu plus rapide (65000 ligne en 0.9 s au lieu de 4s)
un peu plus rapide (65000 ligne en 0.9 s au lieu de 4s)
Option Base 1 Sub extraction() Dim NomOngletInputs As String, plageA As Range, cel As Range, b As Long Dim Tcol13, Tcol15, c temps = Timer Application.ScreenUpdating = False Set wb = ActiveWorkbook ExtractDir = ActiveWorkbook.Path & "\YMMRPT011\" NomOngletInputs = "Inputs011" wb.Activate wb.Worksheets(NomOngletInputs).Activate ' Opération sur colonne cmdé réel derlig = Range("A65536").End(xlUp).Row 'redefini les tableaux fonction fin cellule non vide ReDim Tcol13(derlig - 1), Tcol15(derlig - 1) 'mise en memoire colonne A Set plageA = Range("A2:A" & derlig) 'boucle colonne A pour mise en tableaux des valeurs For Each cel In plageA b = cel.Row: c = b - 1 If cel.Offset(0, 7).Value = 0 Then Tcol13(c) = cel.Offset(0, 6).Value Else Tcol13(c) = cel.Offset(0, 8).Value End If Tcol15(c) = Year(Cells(b, 12)) Next cel 'restitution des valeurs With wb.Worksheets(NomOngletInputs) .Range("N2:N" & derlig) = Application.Transpose(Tcol13) .Range("O2:O" & derlig) = Application.Transpose(Tcol15) End With Application.ScreenUpdating = True MsgBox "temps: " & Timer - temps End Sub
Bonjour,
Merci beaucou pour toutes ces réponses. Et pour la rapidité à laquelle vous m'avez répondu! Ca va beaucoup m'aider parce que mon Reporting doit faire énormement de calculs sur toutes ses lignes. Et quand je mets ma macro en route elle mets 30 min à tout faire et pourtant j'ai vraiment optimiser toutes mes macros et fais en sorte que ça aille le plus vite possible. Mais le fichier est très lourd et très conséquent en terme de calculs et de mise en place de tableaux et graphiques (pour cet exemple j'ai environs 40 graphiques et 80 tableaux qui se font automatiquement). Je vais tester votre macro.
Encore merci pour votre aide!
Bonne journée
Merci beaucou pour toutes ces réponses. Et pour la rapidité à laquelle vous m'avez répondu! Ca va beaucoup m'aider parce que mon Reporting doit faire énormement de calculs sur toutes ses lignes. Et quand je mets ma macro en route elle mets 30 min à tout faire et pourtant j'ai vraiment optimiser toutes mes macros et fais en sorte que ça aille le plus vite possible. Mais le fichier est très lourd et très conséquent en terme de calculs et de mise en place de tableaux et graphiques (pour cet exemple j'ai environs 40 graphiques et 80 tableaux qui se font automatiquement). Je vais tester votre macro.
Encore merci pour votre aide!
Bonne journée
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
>
Mathilde
4 sept. 2015 à 14:49
4 sept. 2015 à 14:49
Re,
il aurait fallu preciser des le debut votre contexte (calculs, graphes)
pour optimiser au max, ajoutez ces lignes au bon endroit pour le depart et evidement a la fin pour terminer en remettant les chose a l'initial
il aurait fallu preciser des le debut votre contexte (calculs, graphes)
pour optimiser au max, ajoutez ces lignes au bon endroit pour le depart et evidement a la fin pour terminer en remettant les chose a l'initial
'début du programme 'augmente la vitesse de calcul Application.DisplayAlerts = False Application.EnableEvents = False Application.ScreenUpdating = False Application.Calculation = xlManual 'a la fin du programme 'redonne la main au calcul automatique d'excel Application.DisplayAlerts = True Application.EnableEvents = True Application.ScreenUpdating = True Application.Calculation = xlAutomatic
Bonjou,
Merci beaucoup our toutes ces informations.
Oui j'utilise déjà ceci pour améliorer un max les calculs. ça fonctionne déjà mieux avec ce que vous m'avez déjà donné.
J'ai une question: je sais que j'utilise : Set plage = Range(Range("A2"), Range("A65000").End(xlUp)). Pour l'instant, le plus gros fichier que j'ai eu est 49 000. Néanmoins, on vient de m'informer qu'il était possible que je rencontre des fichiers de plus de 100 000 lignes. Comment je dois procéder si je tombe sur un fichier dépassant les 65 000 lignes?
Cordialement
Merci beaucoup our toutes ces informations.
Oui j'utilise déjà ceci pour améliorer un max les calculs. ça fonctionne déjà mieux avec ce que vous m'avez déjà donné.
J'ai une question: je sais que j'utilise : Set plage = Range(Range("A2"), Range("A65000").End(xlUp)). Pour l'instant, le plus gros fichier que j'ai eu est 49 000. Néanmoins, on vient de m'informer qu'il était possible que je rencontre des fichiers de plus de 100 000 lignes. Comment je dois procéder si je tombe sur un fichier dépassant les 65 000 lignes?
Cordialement
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
>
Mathilde
Modifié par f894009 le 8/09/2015 à 14:06
Modifié par f894009 le 8/09/2015 à 14:06
Bonjour,
en restant sur de l'excel:
Reponse facile, changez d'excel en passant a 2007 et plus
Reponse un peu moins facile, recuperer les fichiers en les decoupant par tranches de 65000 lignes sur x onglets, ceci pouvant remettre en cause votre importation de fichiers et compliquer la lisibilite des resultats
en restant sur de l'excel:
Reponse facile, changez d'excel en passant a 2007 et plus
Reponse un peu moins facile, recuperer les fichiers en les decoupant par tranches de 65000 lignes sur x onglets, ceci pouvant remettre en cause votre importation de fichiers et compliquer la lisibilite des resultats