XL 2010 code Vba fin de ligne

Yli

XLDnaute Nouveau
1665818829288.png

Bonjour J'ai ce code BVA ci dessus qui va chercher des données dans une base qui compte environ 3900 lignes mais dès que j'ajoute des lignes supplémentaires il me souligne
1665818914814.png

Pourriez-vous m'aider svp ? merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Yli,
Auriez vous un petit fichier test, ce serait plus simple.
S'il donne une erreur sur cette ligne, il y a de fortes chances pour qu'il trouve PosLiFin_Source-1 négatif donc inférieur au début qui est fixé à 0, donc peut être que PosLiFin_Source=0.
Reste à savoir pourquoi, seul un fichier test pourrait aider à comprendre.
 

Staple1600

XLDnaute Barbatruc
Bonjour @ChTi160 , @sylvanu

En attendant le fichier, voici un petit test pour remplir un Array
VB:
Sub Pour_Test()
Range("A1:E1") = Split("ITEM1/ITEM2/ITEM3/ITEM4/ITEM5", "/")
Range("A2:E20").FormulaR1C1 = "=ROW()-1&""|""&COLUMN()"
Cells(1).CurrentRegion = Cells(1).CurrentRegion.Value
End Sub
Sub Tableaux()
Dim Table_Base
Table_Base = Cells(1).CurrentRegion.Value
X = UBound(Table_Base, 1)
Y = UBound(Table_Base, 2)
MsgBox Table_Base(X, Y)
MsgBox Table_Base(10, 3)
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@Yli
Pour info
On ne joint jamais le fichier original dans son jus
Mais un fichier exemple simplifié créé pour illustrer la question

Car là déjà, ca va coincer pour nous répondeurs
Enrichi (BBcode):
'On paramètre le lien vers le fichier de base RNI
Chemin_Base = Chemin_Input & "\Base.xlsm"

'On ouvre la base
Workbooks.Open Chemin_Base, False
Set Wb_Base = Workbooks("Base.xlsm")
Set Ws_Source = Wb_Base.Worksheets("BASE")

NB: Tu as essayé mon exemple ? (sur un classeur vierge)
Qui illustre un moyen plus simple de mettre des données dans un Array
 

Yli

XLDnaute Nouveau
Re

@Yli
Pour info
On ne joint jamais le fichier original dans son jus
Mais un fichier exemple simplifié créé pour illustrer la question

Car là déjà, ca va coincer pour nous répondeurs
Enrichi (BBcode):
'On paramètre le lien vers le fichier de base RNI
Chemin_Base = Chemin_Input & "\Base.xlsm"

'On ouvre la base
Workbooks.Open Chemin_Base, False
Set Wb_Base = Workbooks("Base.xlsm")
Set Ws_Source = Wb_Base.Worksheets("BASE")

NB: Tu as essayé mon exemple ? (sur un classeur vierge)
Qui illustre un moyen plus simple de mettre des données dans un Array
je débute et je reprends juste un code que j'essaye de comprendre, :-( c'est donc difficile pour moi de comprendre ce qu'on peut ou ne peut pas faire voire mettre en pièce ou pas. merci de vos conseils en attendant
 

Yli

XLDnaute Nouveau
Re
Le fichier demande d'avoir un autre Fichier donc pas evident de tester sous cette Forme
Mais j'avais comme JM Fait ce test :
VB:
Sub test()
'On déclare les Variables
Dim Ws_Source As Worksheet
Dim Lgn As Integer
Dim Col As Byte
Dim Table_Base()
Dim PosLiFin_Source As Integer
Dim PosCoFin_Source As Integer
Set Ws_Source = Worksheets("Feuil1") 'on définit la feuille Source
PosLiFin_Source = Ws_Source.Cells(1, 1).End(xlDown).Row 'On détermine la dernière Ligne Non vide du tableau en partant du Haut
PosCoFin_Source = Ws_Source.Cells(1, 1).End(xlToRight).Column ''On détermine la dernière colonne Non vide du tableau en partant de la Gauche
ReDim Table_Base(1 To PosLiFin_Source, 1 To PosCoFin_Source) 'On dimensionne le tableau
For Lgn = 1 To PosLiFin_Source 'pour chaque ligne de la plage
  For Col = 1 To PosCoFin_Source 'pour chaque Colonne de la plage
      Table_Base(Lgn, Col) = Ws_Source.Cells(Lgn, Col) 'On colle les données de la cellule ainsi définie
  Next
Next
'pour le test on colle les données du tableau
Worksheets("Feuil1").Cells(1, 6).Resize(UBound(Table_Base), UBound(Table_Base, 2)) = Table_Base
End Sub
Bonne journée
Jean marie
oui en effet il y a un fichiers source qui comprend 3900 ligne et 52 col et c'est ce fichier source ou si j'ajoute des lignes et que je fais tourner la macro cette dernière m'indique le message d'erreur cité en jaune plus haut
 

Yli

XLDnaute Nouveau
Re
Le fichier demande d'avoir un autre Fichier donc pas evident de tester sous cette Forme
Mais j'avais comme JM Fait ce test :
VB:
Sub test()
'On déclare les Variables
Dim Ws_Source As Worksheet
Dim Lgn As Integer
Dim Col As Byte
Dim Table_Base()
Dim PosLiFin_Source As Integer
Dim PosCoFin_Source As Integer
Set Ws_Source = Worksheets("Feuil1") 'on définit la feuille Source
PosLiFin_Source = Ws_Source.Cells(1, 1).End(xlDown).Row 'On détermine la dernière Ligne Non vide du tableau en partant du Haut
PosCoFin_Source = Ws_Source.Cells(1, 1).End(xlToRight).Column ''On détermine la dernière colonne Non vide du tableau en partant de la Gauche
ReDim Table_Base(1 To PosLiFin_Source, 1 To PosCoFin_Source) 'On dimensionne le tableau
For Lgn = 1 To PosLiFin_Source 'pour chaque ligne de la plage
  For Col = 1 To PosCoFin_Source 'pour chaque Colonne de la plage
      Table_Base(Lgn, Col) = Ws_Source.Cells(Lgn, Col) 'On colle les données de la cellule ainsi définie
  Next
Next
'pour le test on colle les données du tableau
Worksheets("Feuil1").Cells(1, 6).Resize(UBound(Table_Base), UBound(Table_Base, 2)) = Table_Base
End Sub
Bonne journée
Jean marie
Merci je vais y regarder rapidement
 

Staple1600

XLDnaute Barbatruc
RE

@ChTi160
Pourquoi tu boucles pour remplir ton Array?

@Yli
Mon bout de code est très simple (et à une vocation illustrative)
Il permet de remplir un tableau (Array) sans passer par une boucle
Et j'ai mis une macro qui créé les données pour le test
1) Dans un classeur vierge, tu lances la macro : Pour_Test
2) Puis tu lances la macro Tableaux
(qui sert à montrer que Table_Base contient les données sans être passé par une boucle
 

Discussions similaires

Réponses
2
Affichages
182
Réponses
7
Affichages
370
Réponses
21
Affichages
422

Statistiques des forums

Discussions
312 321
Messages
2 087 239
Membres
103 497
dernier inscrit
JP9231