kraquotte
Messages postés11Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention 9 juillet 2010
-
7 juil. 2010 à 22:19
kraquotte
Messages postés11Date d'inscriptionjeudi 9 mars 2006StatutMembreDerniè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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
kraquotte
Messages postés11Date d'inscriptionjeudi 9 mars 2006StatutMembreDerniè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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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
kraquotte
Messages postés11Date d'inscriptionjeudi 9 mars 2006StatutMembreDerniè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 ?