Erreur d'exécution '9': L'indice n'appartient pas à la sélection Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
D
D_NL
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 15 août 2018
Version d'Excel : 2013 FR

Message par D_NL » 15 août 2018, 00:36

Bonjour tout le monde,
Je travaille sur un projet Excel dans lequel je dois utiliser des macro, seulement je suis débutante et j'aimerai avoir votre aide

Contexte: Pour avoir plus facile dans mon projet, j'ai copié les infos de ma feuille dans un array --> Arr_DataSource() et pour accéder aux données, il suffit de faire Arr_DataSource(i, j) où i= N° ligne et j= N° colonne.
Je souhaiterai avoir le nombre d'occurrence d'un chiffre dans la colonne "J" de mon array. Voici le code que j'ai écrit
MonthRuns = 0
    
    For i = 2 To LineCount  'LineCount est le numéro de la dernière ligne du tableau
        If Arr_DataSource(i, 10) Like Arr_DataSource(2, 10) Then
        MonthRuns = MonthRuns + 1
        End If
    Next

Mon problème est que lors de l'exécution, j'ai une Erreur d'exécution '9': L'indice n'appartient pas à la sélection

Pouvez-vous m'aider ? Merci d'avance
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'885
Appréciations reçues : 875
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 15 août 2018, 02:42

Bonjour,

Comment as-tu défini Arr_DataSource ? et comment Arr_DataSource est-il alimenté par les données du tableau ?

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 15 août 2018, 07:58

Bonjour,

Pour savoir le nombre d'occurrences, tu peux utiliser la fonction CountIf sur une plage plutôt qu'une boucle, la fonction étant compilée, elle est très rapide. Dans l'exemple ci-dessous, c'est le chiffre 1 qui est recherché dans la colonne J :
Sub Test()
    
    Dim Plage As Range
    
    With Worksheets("Feuil1"): Set Plage = .Range(.Cells(1, 10), .Cells(.Rows.Count, 10).End(xlUp)): End With
    MsgBox Application.CountIf(Plage, 1)
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
D
D_NL
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 15 août 2018
Version d'Excel : 2013 FR

Message par D_NL » 15 août 2018, 12:28

Steelson a écrit :
15 août 2018, 02:42
Bonjour,

Comment as-tu défini Arr_DataSource ? et comment Arr_DataSource est-il alimenté par les données du tableau ?
Bonjour Steelson,
j'ai un problème au niveau de la dernière partie de ce code
Sub Scripts()
'
' Scripts Macro
'

'Variables & Definitions:
    Dim LineCount As Integer 'to count the amount of lines
    Dim CellContent As String 'to make test if countent is empty
    Dim Selection As String
    Dim Arr_DataSource(), DsLine As Long, DsCol As Integer
    Dim Period As Integer
    Dim Domain As String
    Dim TRuns As Integer
    Dim MonthRuns As Integer
    Dim TCompleted As Integer
    Dim TFailed As Integer
    Dim Taboarded As Integer
    
   

'Transfort the date format from 01/01/2018 to 201801
    Sheets("Data").Select
    Range("J2:J" & Range("A" & Cells.Rows.Count).End(xlUp).Row).FormulaR1C1 = _
    "=(YEAR(RC[-9])*100)+MONTH(RC[-9])"
    'MsgBox (Range("J2"))
   
'initiation
    LineCount = 2
    Selection = "A" & LineCount
    Sheets("Data").Select
   ' MsgBox ("Selection " + Selection)
    Range(Selection).Select
    CellContent = Range(Selection)
    'MsgBox ("CellContent " + CellContent)
' Selection is at 1st Selection of the array
' Loop starts to count the amount of records in the array

    Do While CellContent <> ""
        LineCount = LineCount + 1
        Selection = "A" & LineCount
        Range(Selection).Select
        CellContent = Range(Selection)
    Loop
    'MsgBox ("Selection " + Selection)
    'MsgBox ("CellContent " + CellContent)
    
'The array starts at A2 and ends at LineCount -1
    LineCount = LineCount - 1
    Selection = "A2:K" & LineCount
    'MsgBox ("Array Sellection " + Selection)
    Arr_DataSource = Range(Selection)
    'MsgBox (Arr_DataSource(758, 10)) 'test if the period is ok in the array
    
' Rechercher le nombre d'occurrence de la date contenu dans Arr_DataSource(2, 10)
    
    MonthRuns = 0
    
    
    For i = 2 To LineCount
        If Arr_DataSource(i, 10) Like Arr_DataSource(2, 10) Then
        MonthRuns = MonthRuns + 1
        End If
    Next
    MsgBox (TRuns)

  End Sub
D
D_NL
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 15 août 2018
Version d'Excel : 2013 FR

Message par D_NL » 15 août 2018, 12:30

Theze a écrit :
15 août 2018, 07:58
Bonjour,

Pour savoir le nombre d'occurrences, tu peux utiliser la fonction CountIf sur une plage plutôt qu'une boucle, la fonction étant compilée, elle est très rapide. Dans l'exemple ci-dessous, c'est le chiffre 1 qui est recherché dans la colonne J :
Sub Test()
    
    Dim Plage As Range
    
    With Worksheets("Feuil1"): Set Plage = .Range(.Cells(1, 10), .Cells(.Rows.Count, 10).End(xlUp)): End With
    MsgBox Application.CountIf(Plage, 1)
    
End Sub
Bonjour Theze,
Merci pour ta réponse, seulement je ne travaille par sur une feuille mais un tableau :(
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'885
Appréciations reçues : 875
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 15 août 2018, 12:56

Si tu fais ceci :
Selection = "A2:K" & LineCount
tu affectes la valeur A2:Kx aux cellules sélectionnées !!

Change le terme Selection qui est "réservé" par excel !

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'885
Appréciations reçues : 875
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 15 août 2018, 13:01

Attention aussi aux indices x et y !!
Voici un outil simple ...
Arr_DataSource.xlsm
(14.65 Kio) Téléchargé 3 fois

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
D
D_NL
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 15 août 2018
Version d'Excel : 2013 FR

Message par D_NL » 15 août 2018, 14:59

Steelson a écrit :
15 août 2018, 12:56
Si tu fais ceci :
Selection = "A2:K" & LineCount
tu affectes la valeur A2:Kx aux cellules sélectionnées !!

Change le terme Selection qui est "réservé" par excel !
Merci pour ta remarque, tu as raison, je vais modifier le terme Selection
Par ailleurs j'ai résolu le problème; C'était la limite supérieure de ma boucle for qui était plus grande que la taille du tableau ::)
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message