[Catégorie encore modifiée VB6 -> VBA] recherche dans tableau

Résolu
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 - 7 févr. 2011 à 12:44
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 7 févr. 2011 à 23:56
bonjour
je suis sur excel 2007. j¡ai un tableau de 31 colonnes sur 65 lignes.
je souhaiterais faire une macro, qui cherche ligne par ligne.
si il y a une case de couleur jaune que s'affiche dans la case rouge a gauche 25%
s'il y 2 case jaune = 50%
3 = 75% et 4 case 100%
et que la macro descende d'une ligne dans le tableau , fais la meme recherche que ci dessus et note la valeur dans la case bleu.
et ainsi de suite jusqu'a la 65 eme ligne.
je joint ci dessous une capture d'ecran de mon fichier.
j'ai essayer plusieurs macro sans resultat, ca marche que sur la 1 ligne
merci

http://imagik.fr/view/362524

9 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
7 févr. 2011 à 23:56
Ajoute une remise à zéro
Range("B9").Offset(i, 0) = 0
entre ton For et ton premier If
car actuellement, si la condition sur C9 n'est pas vraie, Range("B9").Offset(i, 0) contient n'importe quoi, pas forcement 0
3
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
7 févr. 2011 à 14:59
Salut

Jaune, rouge, bleue : Voilà bien des détails qui ne nous apportent rien.

Exemple de boucle qu'on trouve partout, à condition d'avoir fait une recherche :
Dim maCell As Range
For Each maCell In Range("A1:N65")
    maCell.Value =  maCell.Row & ":" & maCell.Column
Next


Voir aussi la propriété Offset qui est TRES pratique pour désigner un cellule aux alentours (sans avoir à préciser ses coordonnées strictes)

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
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
7 févr. 2011 à 15:02
PS : Dans une feuille vierge, ce code renvoi un affichage au format date, par défaut.
L'affichage n'est donc pas réellement représentatif de ce que le code fait (ne tient pas compte de ":00" à la fin de chaque champ).

Où alors, dans le code, remplace
& ":" &
par
& "-" &

Désolé
0
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
7 févr. 2011 à 16:23
je n'est pas bien compris. desole.
je ne vois pas comment attribuer les valeurs 25. 50 ....
peux tu m'en dire plus
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
7 févr. 2011 à 17:31
On va pas faire le code à ta place.
Une fois que tu auras compris comment fonctionne une boucle, tu utilises maCell pour connaitre son contenu, sa couleur, sa police, tout ce que tu veux bien et tu fais des If-Then-Else-EndIf pour faire tes actions.

Pour trouver les bonnes syntaxes, pense à enregistrer une macro pendant que tu colorise une cellule par exemple : Tu auras les propriétés et les valeurs à tester.
0
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
7 févr. 2011 à 17:39
bonsoir
je ne te demande pas de faire le code a ma place, je trouve ta formule pas tres encourageante, cela fait plusieurs jours que je cherche a faire cette macro j'ai biensur fait des essais non concluant.
si tu ne souhaites pas parfaire ou ammeliore les connaissante d'autrui, ne reponds pas.
je te joints ci apres ce que j'ai fait, mais cela bloque.

Private Sub CommandButton1_Click()
If Controls("Textbox1") = "" Then
MsgBox "Vous devez ABSOLUMENT indiquer Un Nom !", vbExclamation, _
"ERREUR ... Entrez un Nom SVP !"
Controls("Textbox1").SetFocus
Exit Sub
End If

With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Selection.Merge
Selection = UserForm1.Textbox1
Unload UserForm1
With Selection.Interior
.Color = 65535
End With
With Selection.Font
.ColorIndex = xlAutomatic
Selection.Font.Bold = True
End With

For i = 0 To 64
If Range("C9").Offset(i, 0).Interior.Color 65535 Then Range("B9").Offset(i, 0) 0.25
If Range("K9").Offset(i, 0).Interior.Color 65535 Then Range("B9").Offset(i, 0) Range("B9").Offset(i, 0) + 0.25
If Range("R9").Offset(i, 0).Interior.Color 65535 Then Range("B9").Offset(i, 0) Range("B9").Offset(i, 0) + 0.25
If Range("Y9").Offset(i, 0).Interior.Color 65535 Then Range("B9").Offset(i, 0) Range("B9").Offset(i, 0) + 0.25
Next


Range("A1").Select
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
7 févr. 2011 à 20:51
Quand tu colles du code, utilise la colaration syntaxique = 3ème icone à droite = plus facile à lire et conserve l'indentation.

Si ça bloque, faudrait dire ce qui se passe.
Utilise le débogage pour suivre ce que fait le programme :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

.Color = 65535
Audacieux
Quelle couleur penses-tu que cela représente ?

Si tu regardes dans l'aide, tu verras qu'il vaut mieux utiliser la fonction RGB pour définir .Color
ou utiliser .ColorIndex
0
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 1
7 févr. 2011 à 21:03
bonsoir
je vois que tu est un pro dans le domaine des macros, excuse moi, je suis un peu novice.
tu parle de : colaration syntaxique 3ème icone à droite plus facile à lire et conserve l'indentation.
je ne sais ce que tu veux dire.
quand je voulais ca bloque, simplement la macro fonction sur la 1 ligne, mais car je continue a selectionne d'autre zone dans les lignes inferieures, les valeurs que j'attends ne sont pas bonnes, il y a des cummuls.
ex. si dans la 1 case de resultat j'ai 50%, dans la deuxieme j'ai 25%, des que je vais sur la 3 lignes et que je choisi une autre zone j'obtient dans la case de la ligne resultat au dessus 75%.
quand a la .Color = 65535 c'est le jaune.
je ne connais pas les autres fonctions que tu me site a la fin.
merci quand meme pr tes infos. je sais j'ai des progres a faire, mais c'est en faisant et ecoutant les conseils des autres que l'on progresse.
merci
christian
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
7 févr. 2011 à 23:52
Coloration syntaxique : Les icones en haut de la fenêtre de saisie du texte, ici ^^
Ah, j'ai écrit colaration, excuses.

On n'a pas ton tableau de couleur sous les yeux et, perso, je n'ai pas le temps de me pencher sur le pourquoi de ces manips.
Commence par un seul test ET utilise le débogage : vérifie le chemin que prend le programme et pourquoi il ne va pas où tu veux.

Bah c'est le code que tu as écrit : Tu ajoutes 0.25 à la cellule de la ligne 9+i, colonne B.
Profite du débogage pour vérifier ce qu'il y a dans ta cellule avant puis après l'exécution de ta ligne de programme et/ou vérifier que tu y passes ou pas.
0
Rejoignez-nous