Comment récupérer tous les indices dans un Array?

Bonjour,

J'ai un petit tableau avec en colonne A une liste de dates, et lorsque l'une de ces dates est égale à une des dates contenues dans un Array de mon code, on affiche "VRAI" dans une autre colonne (colonne E dans le code), sur la même ligne.

Le problème c'est que dans mon "if", je souhaiterais comparer mon Range à toutes les valeurs déclarées dans l'Array....

Or comment indiquer dans le "if" tous les indices du tableau?

J'ai essayé TabDate (1 to 3) ou (1...3) ou ([1]...[3])...mais sans succès...j'ai essayé d'inclure dans le code une boucle for avec Ubound...pas mieux...

Quelqu'un pourrait m'éclairer sur ce point?

Voici mon code:

Sub boucleAvecIf5()

Dim TabDate(1 To 3) As String

TabDate(1) = "06/01/2019"
TabDate(2) = "07/01/2019"
TabDate(3) = "08/01/2019"

Dim i As Integer

i = 2

Do While Cells(i, 1).Value <> ""

If Range("A" & i) = TabDate(1) Then 'ne prend que l'indice 1 du tableau
Range("E" & i) = "VRAI"
Else: Range("E" & i) = "FAUX"
End If

i = i + 1

Loop

End Sub

Merci d'avance!

Slt AxelleGreen,

essaie comme ca

Sub boucleAvecIf5()
Dim TabDate(1 To 3) As String
Dim i As Integer, j As Integer

TabDate(1) = "06/01/2019"
TabDate(2) = "07/01/2019"
TabDate(3) = "08/01/2019"

Dim i As Integer

i = 2

Do While ActiveWorkbook.Sheets("Tabelle4").Cells(i, 1).Value <> ""

For j = 1 To 3
    If Range("A" & i) = TabDate(j) Then 'ne prend que l'indice 1 du tableau
        Range("E" & i) = "VRAI"
        Else: Range("E" & i) = "FAUX"
    End If
 Next j

i = i + 1

Loop

End Sub

Bonjour,

à tester,

Sub boucleAvecIf5()
Dim TabDate(1 To 3) As String
Dim i As Integer

TabDate(1) = #6/1/2019#  ' -->  1 juin 2019
TabDate(2) = #7/1/2019#
TabDate(3) = #8/1/2019#

For i = LBound(TabDate) To UBound(TabDate)
If Range("A" & i) = TabDate(i) Then Range("E" & i) = "VRAI" Else: Range("E" & i) = "FAUX"
Next i
End Sub

Bonjour à tous,

une solution sans boucle (pour un petit tableau) :

If Range("A" & i) = TabDate(1) Or Range("A" & i) = TabDate(2) Or Range("A" & i) = TabDate(3) Then 
.../...

avec une boucle:

dim OK as boolean
......
For j = 1 To 3
         If Range("A" & i) = TabDate(j) Then     
             OK=true
             Exit For
         End If
Next j

'soit :
If OK then
     Range("E" & i) = "VRAI" 
Else
   Range("E" & i) = "FAUX"
End If

'Soit
Range("E" & i)=OK

@ i20100

Attention, avec ce code

For i = LBound(TabDate) To UBound(TabDate)

If Range("A" & i) = TabDate(i) Then Range("E" & i) = "VRAI" Else: Range("E" & i) = "FAUX"

Next i

Si en A la date correspond à la première ou deuxième date du tableau mais pas à la dernière en E on va écrire faux alors que c'est vrai .

A+

re,

Si en A la date correspond à la première ou deuxième date du tableau mais pas à la dernière en E on va écrire faux alors que c'est vrai .

je ne comprend pas ce que tu veux dire ?

info dans cellule A1, A2 et A3

tableau est renseigné de 1 à 3

ou est le problème ?

Heu... !! mille excuses !!

j'étais resté sur le code de AxelleGreen qui balaye la colonne A et pour chaque A veut tester le tableau.

Merci beaucoup pour votre aide,

En m'inspirant du code de i20100, j'ai un code qui fonctionne à peu près bien, sauf que je n'arrive pas à faire apparaître "FAUX" quand la date de la colonne A ne correspond pas à une des dates de l'Array.

Dans le if, j'ai pourtant essayé avec le

 Else: Range("E" & i) = "FAUX"

mais cela positionne un "FAUX" là où il ne faut pas...

Voici le code qui place le vrai là où il faut mais pas le faux...:

Sub boucleAvecIf12()
'--> fonctionne mais je n'ai que VRAI

Dim TabDate(1 To 3) As String

TabDate(1) = "06/01/2019"
TabDate(2) = "07/01/2019"
TabDate(3) = "08/01/2019"

Dim i As Integer
Dim j As Integer

i = 2

Do While Cells(i, 1).Value <> ""
    For j = LBound(TabDate) To UBound(TabDate)

        If Range("A" & i) = TabDate(j) Then
        Range("E" & i) = "VRAI"
        End If

    Next j

i = i + 1

Loop

End Sub

si jamais quelqu'un a une idée pour m'aider à résoudre ce problème....

Merci

Bonjour,

j'ai une idée oui : enlève l'erreur que tu as ajoutée et ne touche pas à ce qui fonctionne

eric

What?

Justement, je trouve ce code mieux que le premier que j'ai codé car il me permet d'afficher "vrai" lorsque le ou les indices de l'Array correspondent à l'une ou les dates affichées en colonne A...mais je n'arrive pas à faire afficher "faux" lorsque ce n'est pas le cas...

Puis-je avoir un (ou des ) indices supplémentaires?

Merci encore

re,

pourquoi avoir mit une boucle dans une autre boucle ?

Pour parcourir la colonne A et ensuite pour parcourir toutes les valeurs de l'Array, cela, afin de comparer les 2 ensembles puisque comme je le disais au départ, faire:

Sub boucleAvecIf5()

Dim TabDate(1 To 3) As String

TabDate(1) = "06/01/2019"
TabDate(2) = "07/01/2019"
TabDate(3) = "08/01/2019"

Dim i As Integer

i = 2

Do While Cells(i, 1).Value <> ""

If Range("A" & i) = TabDate Then 
Range("E" & i) = "VRAI"
Else: Range("E" & i) = "FAUX"
End If

i = i + 1

Loop

End Sub

...ne fonctionne pas , ou alors il faudrait que je reécrive dans le if chacune des valeurs contenues dans l'Array, je me disais qu'il y a peut-être plus simple...

Regarde la proposition d'Algoplus avec le Exit For

Dès que la date est trouvée tu sors de la boucle. Un FAUX suivant ne viendra pas écraser ton VRAI.

eric

re,

à tester,

Sub boucleAvecIf5()
Dim TabDate(1 To 3) As Double
Dim i As Integer

TabDate(1) = #6/1/2019#  ' -->  1 juin 2019
TabDate(2) = #7/1/2019#
TabDate(3) = #9/1/2019#

For i = 2 To Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
    n = Application.Match(Sheets("Feuil1").Range("A" & i), TabDate, 0)
    If Not IsError(n) Then Range("E" & i) = "VRAI" Else Range("E" & i) = "FAUX"
Next i
End Sub

Wouaw i20100!! Bravo et Merci !!:ppg:

Juste qq petites questions sur ton code, pourquoi est-ce que tu mets les dates en format américain et entre des dièses?

Est-ce que c'est parce que c'est mieux de travailler avec des dates comme cela?

Aussi, pourquoi est-ce que l'Array est typé en tant que Double?

@ Eric, merci beaucoup à toi aussi....

Effectivement je suis passée à côté de l' "exit for"... mais oui, ça change tout et avec ce code cela fonctionne aussi:

Sub boucleAvecIf14()
'--> code fonctionnel

Dim TabDate(1 To 3) As String

TabDate(1) = "06/01/2019"
TabDate(2) = "07/01/2019"
TabDate(3) = "08/01/2019"
Dim i As Integer
Dim j As Integer
Dim OK As Boolean

i = 2

Do While Cells(i, 1).Value <> ""
OK = False

    For j = LBound(TabDate) To UBound(TabDate)
            If Range("A" & i) = TabDate(j) Then
                OK = True
                Exit For
            End If
    Next j

If OK Then
     Range("E" & i) = "VRAI"
Else
   Range("E" & i) = "FAUX"
End If

i = i + 1

Loop

End Sub

Merci!! Vous êtes en or!!

Bonne nuitée

Juste qq petites questions sur ton code, pourquoi est-ce que tu mets les dates en format américain et entre des dièses?

j'ai pris les dates comme tu les avais marquées dans ton premier post, les # c'est pour que vba les reconnaissent en tant que Date.

Est-ce que c'est parce que c'est mieux de travailler avec des dates comme cela?

c'est mieux pour que la date soit reconnu par vba comme étant une date.

Aussi, pourquoi est-ce que l'Array est typé en tant que Double?

en réalité une date est un nombre, si tu ajoutes à la date, les heures et minutes,

c'est un nombre avec décimal

et le nombre avec décimal est reconnu internationalement

peut importe sur quel pc le fichier sera ouvert,

et peu importe comment la date a été définie au panneaux de configuration du pc.

J'ajouterai qu'avec des dates en chaine tu laisses excel interpréter la date.

Et VBA qui est plutôt anglo-saxon à tendance à te transformer un 4 janvier en poisson de 1er avril s'il veut lire mm/dd/yy et non dd/mm/yy.

Donc #mm/dd/yy# si tu les écris direct, ou CDATE(ta_chaine) si tu l'obtiens d'un Textbox par exemple c'est mieux, voire indispensable.

eric

Super, merci pour ce complément d'information!

Merci pour ce retour, au plaisir!

si le problème est résolu, pour clôture le fil il faut faire un clic sur le bouton (indiquer par la flèche verte)

resolu

Merci!

Rechercher des sujets similaires à "comment recuperer tous indices array"