Erreur "qualificateur incorrect"
Bonjour à tous,
Je suis toute nouvelle en utilisation de langage VBA et je fais mon tout premier programme !
Le but est de rechercher dans un tableau une ligne en regardant les unes après les autres les valeurs des différentes colonnes du tableau.
Dans la première partie de mon code, je veux mettre dans une nouvelle table les lignes du tableau qui contiennent une valeur dhk0 dans la première colonne. Seulement j'ai une erreur "qualificateur incorrect" sur la ligne qui ajoute les lignes de l'abaque dans cette nouvelle matrice matrice_dhk0_tot. Je ne comprends pas, car il me semble l'avoir défini comme un objet de type tableau flexible ? Où est mon erreur ? Le code en question :
Sub Cherche_Antho()
Dim abaque As Range
Dim dhk0_abaque As Range
Dim dhk0_exp As Range
Dim compter_dhk0 As Byte
compter_dhk0 = 0 'variable de comptage de lignes qui contiennent la valeur dhk0 mesurée
Set abaque = Sheets("Anthophyllite").Range("A2:I1418")
Set dhk0_abaque = Sheets("Anthophyllite").Range("A2:A1418") 'colonne de recherche du dhk0 pour l'anthophyllite
Set dhk0_exp = Sheets("Anthophyllite").Cells("O3") 'localisation du dhk0 mesuré
Dim matrice_dhk0_tot() As Collection
Dim i As Byte
'création de la matrice qui contiendra les lignes qui ont dhk0 proches de la valeur exp
' Boucle for qui fixe la dimension de la matrice dhk0
For i = 1 To dhk0_abaque.Rows.Count
If dhk0_abaque(i) = dhk0_exp Then compter_dhk0 = compter_dhk0 + 1
End
Next
'Permet de remplir la matrice avec les lignes d'intérêt ou d'indiquer que l'on n'a pas d'anthophyllite si aucun dhk0 ne correspond
If compter_dhk0 = 0 Then MsgBox ("Ce n'est pas de l'anthophyllite")
End
If compter_dhk0 <> 0 Then
For i = 1 To dhk0_abaque.Rows.Count
If dhk0_abaque(i) = dhk0_exp Then matrice_dhk0_tot.Add (abaque.Rows(i))
End
Next
End
Merci d'avance pour vos conseils !
Laurane
Hello,
2 choses avant de commencer :
1 C'est mieux de mettre le code dans la fenetre prévu pour (bouton avec les balises)
2 C'est mieux avec un fichier d'exemple.
Ceci dit la première chose qui me saute au yeux :
Set dhk0_exp = Sheets("Anthophyllite").Cells("O3") 'localisation du dhk0 mesuréPlutot comme ceci :
Set dhk0_exp = Sheets("Anthophyllite").Cells(3,15) 'localisation du dhk0 mesuréOu
Set dhk0_exp = Sheets("Anthophyllite").Range("O3") 'localisation du dhk0 mesuréA tester déjà comme ça, le reste je n'ai pas étudié
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Vous confondez tableau et collection
Dim matrice_dhk0_tot() est un tableau dynamique
Dim matrice_dhk0_tot As Collectionest une collection
Si vous utilisez une collection, vous devez créer l'objet correspondant
soit
Dim matrice_dhk0_tot As New Collectionou
Dim matrice_dhk0_tot As Collection
Set matrice_dhk0_tot = New CollectionBonjour,
Merci pour vos réponses. En fait je suis un peu perdue maintenant, j'ai modifié le code comme suggéré mais maintenant il a du mal avec ma variable i : j'obtiens le message d'erreur "dépassement de capacité" alors que mon tableau fait 1418 lignes. Le début de mon programme est le suivant :
Sub Cherche_Antho()
Dim abaque As Range
Dim dhk0_abaque As Range
Dim dhk0_exp As Range
Dim compter_dhk0 As Byte
compter_dhk0 = 0 'variable de comptage de lignes qui contiennent la valeur dhk0 mesurée
Set abaque = Sheets("Anthophyllite").Range("A2:I1418")
Set dhk0_abaque = Sheets("Anthophyllite").Range("A:A") 'colonne de recherche du dhk0 pour l'anthophyllite
Set dhk0_exp = Sheets("Anthophyllite").Range("O3") 'localisation du dhk0 mesure
Dim matrice_dhk0_tot()
Dim i As Integer
'création de la matrice qui contiendra les lignes qui ont dhk0 proches de la valeur exp
' Boucle for qui fixe la dimension de la matrice dhk0
For i = 1 To dhk0_abaque.Rows.Count
If dhk0_abaque(i) = dhk0_exp Then compter_dhk0 = compter_dhk0 + 1
End
NextUne idée de la source potentielle de ce problème ? Après pas mal de lecture je sèche !
Merci,
Laurane
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Si vous avez un dépassement de capacité sur i, changez la définition de votre variable
Dim i as LongBonjour,
Merci pour votre réponse. Effectivement ça fonctionne mieux comme cela ! Seulement maintenant j'ai un autre souci dans le bout de code suivant :
Dim matrice_dhk0_tot()
Dim nbre_lignes_dhk0 As Integer
nbre_lignes_dhk0 = Val(dhk0_abaque.Rows.Count) 'la variable dhk0_abaque est la colonne du tableau dans laquelle on trouve les valeurs de dhk0
Dim i As Integer
Dim j As Integer
j = -1
For i = 1 To nbre_lignes_dhk0
If dhk0_abaque(i) = dhk0_exp Then
ReDim Preserve matrice_dhk0_tot(compter_dhk0 + 1, 9)
matrice_dhk0_tot(j + 1, 1) = abaque(i, 1)
matrice_dhk0_tot(j + 1, 2) = abaque(i, 2)
matrice_dhk0_tot(j + 1, 3) = abaque(i, 3)
matrice_dhk0_tot(j + 1, 4) = abaque(i, 4)
matrice_dhk0_tot(j + 1, 5) = abaque(i, 5)
matrice_dhk0_tot(j + 1, 6) = abaque(i, 6)
matrice_dhk0_tot(j + 1, 7) = abaque(i, 7)
matrice_dhk0_tot(j + 1, 8) = abaque(i, 8)
matrice_dhk0_tot(j + 1, 9) = abaque(i, 9)
array2ddebug (matrice_dhk0_tot)
End If
Next iEn fait j'aimerais ajouter les lignes de la matrice abaque dans la nouvelle matrice matrice_dhk0_tot dans la condition suivante :
dhk0_abaque(i) = dhk0_expIl s'agit d'une valeur contenue dans une colonne du tableau.
Sauf que matrice_dhk0_tot conserve 2 lignes après toutes ces itérations. Je ne comprends pas car la variable qui change le nombre de dimensions de la matrice est itérative, mais je me demandais si l'utiliser était possible comme elle n'est pas fixée ? Je crois que je me suis perdue et que des choses se contredisent dans mes variables etc mais je n'arrive pas à trouver la source du problème.
Auriez-vous une idée de ce qui bloque ?
Merci d'avance,
Laurane
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Vous ne pouvez redimensionner que la dernière dimension du tableau. Ce code serait plus adapté
For i = 1 To nbre_lignes_dhk0
If dhk0_abaque(i) = dhk0_exp Then
ReDim Preserve matrice_dhk0_tot(9, compter_dhk0 + 1)
matrice_dhk0_tot(1, j + 1) = abaque(i, 1)
matrice_dhk0_tot(2, j + 1) = abaque(i, 2)
matrice_dhk0_tot(3, j + 1) = abaque(i, 3)
matrice_dhk0_tot(4, j + 1) = abaque(i, 4)
matrice_dhk0_tot(5, j + 1) = abaque(i, 5)
matrice_dhk0_tot(6, j + 1) = abaque(i, 6)
matrice_dhk0_tot(7, j + 1) = abaque(i, 7)
matrice_dhk0_tot(8, j + 1) = abaque(i, 8)
matrice_dhk0_tot(9, j + 1) = abaque(i, 9)
array2ddebug (matrice_dhk0_tot)
End If
Next i