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é

Bonsoir,

Vous confondez tableau et collection

Dim matrice_dhk0_tot() 

est un tableau dynamique

Dim matrice_dhk0_tot As Collection

est une collection

Si vous utilisez une collection, vous devez créer l'objet correspondant

soit

Dim matrice_dhk0_tot As New Collection

ou

Dim matrice_dhk0_tot As Collection
Set matrice_dhk0_tot = New  Collection

Bonjour,

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
    Next

Une idée de la source potentielle de ce problème ? Après pas mal de lecture je sèche !

Merci,

Laurane

Bonsoir,

Si vous avez un dépassement de capacité sur i, changez la définition de votre variable

Dim i as Long

Bonjour,

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 i

En 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_exp

Il 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

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
Rechercher des sujets similaires à "erreur qualificateur incorrect"