Manipuler les array

kraquotte Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 9 juillet 2010 - 7 juil. 2010 à 22:19
kraquotte Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 9 juillet 2010 - 9 juil. 2010 à 09:42
bonjour !
je débute en programmation et je souhaite faire une macro qui fasse les choses suivantes :
1-demander l'utilisateur de sélectionner une plage de cellule
2- assigner les valeurs de cellules sélectionnées à une array
jusque là ca va, mais après je patauge
3- regarder si les valeur de la plage de cellule donc mon array existent dans le reste du tableau et si oui griser les cellules où les valeurs sont trouvées.
Là je bloque car j'ai du mal à comprendre comment manipuler les array
j'ai aussi du mal à utiliser les objet range correctement. Je me rends compte que j'ai souvent des bugs parce que je ne sais pas passer de la cellule à l'adresse de la cellule ou passer à la valeur de la cellule.
Des conseils ? des exemples de programmes simples avec array ?
par avance merci pour votre aide

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juil. 2010 à 10:58
Salut
Premier conseil :
Pourquoi veux-tu charger en mémoire (array) des données qui sont déjà à ta disposition et accessibles facilement ?

Deuxième conseil :
Regarder dans l'aide comment fonctionne Range.
Exemple de mémorisation d'un Range :
Dim monRange As Range
Set monRange = Range("A1:B13")

Exemple d'énumération des cellules composant un Range :
    Dim maCellule As Range
    For Each maCellule In Range("A1:B13")
        MsgBox maCellule.Value & vbCrLf & _
               maCellule.Address
    Next

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
kraquotte Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 9 juillet 2010
8 juil. 2010 à 22:32
Merci Jack
J'ai fait un test sur un fichier bateau a mais il me semble que je bloque toujours avec la manipulation des objet range

J'ai du mal à savoir ce que renvoie plage et comment y accéder.
et dans tous les programmes que j'essaie de faire il me semble que je butte sur le même type de problème...




Sub doublon()

Sub doublon()

plage = Application.InputBox("selectionne la zone", Type:=8)

autrecellule = Range("B2")
Dim macellule As Range
For Each macellule In plage
' range(plage) range(plage.address)....
If macellule.Value = autrecellule.Value Then
MsgBox ("trouvé")
Else
MsgBox ("pas trouve")
End If
Next


End Sub
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juil. 2010 à 23:54
Le premier réflexe est de regarder dans l'aide.

Prends aussi l'habitude de dimensionner tes variables : cela te permettra d'activer l'"intellisence", c'est à dire la liste des propriétés valides pour cet objet quand tu tapes le point juste derrière.

On ne fait pas
maPlage = Range(...
mais
Set maPlage = Range(...
C'est un objet, pas une vulgaire variable.

Dans le problème qui t'amène ici, tu veux rechercher les cellules qui correspondent à un Range de cellules.
De quel genre est le Range de cellules que tu recherches ?
Est-ce que Range à rechercher est composé de plusieurs cellules ?
Est-ce qu'il s'agit d'une ligne entière ?
Parmi quelle étendue de recherche ? Un Range qui a la même largeur ?
Un exemple serait le bienvenu, car plusieurs techniques peuvent exister.

S'il ne s'agit que de trouver une seule cellule parmi d'autres, oui, ton dernier code fonctionne.
Que lui reproches-tu ?
Une fois que tu as établi l'égalité du contenu de ces deux cellules, maCellule représentera l'objet cible : Suffit de lui demander tout ce que tu veux, par exemple
If macellule.Value = autrecellule.Value Then
    MsgBox "Contenu de " & autrecellule.Address & " trouvé en " & macellule.Address
    MsgBox "C'est à dire, ligne " & macellule.Row & " et colonne " & macellule.Column
    MsgBox "Le contenu de la cellule à sa droite est " & macellule.Offset(0, 1).Value
Else
    ' Pas de Else, la boucle n'est pas terminée
End If
0
kraquotte Messages postés 11 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 9 juillet 2010
9 juil. 2010 à 09:42
Merci merci merci !!!

Figure toi que je découvre qu'il faut déclarer les objets avec set...

Je me suis mise à VBA, il y a quelques mois avec un bouquin et je n'y connaissais absolument rien en programmation. Ca devait faire un peu trop à assimiler d'un coup donc j'ai dû zapper pas mal de chose. Une relecture s'impose surement

C'est vrai que je n'ai pas assez le reflexe de l'aide.
Pour la déclaration des variables : j'avais trouvé une fausse solution de facilité => quand je déclare, ça plante alors ne déclare pas et je croise les doigt pour que VBA soit plus intelligent que moi

Je vais reprendre mon code avec set

et essayer envoyer un fichier exemple
sinon je cherche à comparer un range de taille et d'emplacement variable à un autre range.

En fait j'ai une sorte de base de donnée avec des références dans une colonne. Les recherches que je fais se font donc toujours par rapport à s cette colonne. Je veux que l'utilisateur puisse sélectionner une serie de référence ( x cellules contigues dans cette fameuse colonne) pour voir si ces références existent déjà dans le tableau et dans ce cas mettre par exemple de la couleur dans les cellules ou la réf est trouvée.
Il faudra donc que j'exclue la zone séléctionnée par l'utilisateur de la zone de comparaison, non ?
0
Rejoignez-nous