Probleme d'affichage vba

Résolu
ametudiante Messages postés 16 Date d'inscription jeudi 22 décembre 2016 Statut Membre Dernière intervention 2 janvier 2017 - 30 déc. 2016 à 12:01
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 3 janv. 2017 à 02:20
Bonjour,

svp, dans un code vba si on demande à l'utilisateur d'entrer un nombre de lignes et de colonnes .
supposons que nb de ligne =3 et colonnes = 2
On fixe la 1 ere ligne (a) ,apres on compare chacune de ces cellules avec celles qui la suivent : càd la cellule contenant 3 avec celle contenant 2 et 4 ...(tab1)
apres on fixe la 2 eme ligne (b) et on la compare avec celles qui la suivent et celles qui la précédent .
De meme ,la cellule contanant 7 avec celle contenant 1 et 5.
on a trouvé que : la valeur de a(=3) >= la valeur de b (=2).
donc on met dans tab2 ,specifiquement dans la cellule de l'intersection de (a , b ) la valeur 1 ( 1 indique le numero de la colonne dans laquelle on fait la comparaison si la valeur de a>= b. si on effectue la comparaison dans la colonne 2, on mettra dans tab 2 la valeur 2 )
et ainsi de suite pour les autres ligne et les autres colonnes .
l'exemple (voir image) indique les donnees et la reponse espérée , j espere que c'est clair maintenant.
PS. la diagonale du tab 2 ne contient rien ,car on ne compare aucune cellule avec elle meme.
voicile code que j'ai deja fait ! il donne quelques cases juste mais des cellules ne sont pas correctes !

For k = 0 To nbc - 1 'nbr de colonne entré par l utilisateur
For j = 0 To nbl - 1 'nbl : nbr de lignes ici on fixe la ligne
compt = 1
For i = 0 To nbl - 1'on parcour le reste de lignes




If i > j Then 'partie superieur du tableau

If Feuil2.Cells(i + 3, k + 3) <= Feuil2.Cells(j + 3, k + 3) Then

While j + 1 + compt <= nbl

If IsEmpty(Feuil3.Cells(j + 3, j + 3 + compt)) Then


Feuil3.Cells(j + 3, j + 3 + compt) = "{" & k + 1


Else

Feuil3.Cells(j + 3, j + 3 + compt) = Feuil3.Cells(j + 3, j + 3 + compt) & "," & k + 1


End If

Feuil3.Cells(j + 3, j + 3 + compt) = Feuil3.Cells(j + 3, j + 3 + compt) & "}"

compt = compt + 1

Wend
End If
End If


If i < j Then

If Feuil2.Cells(i + 3, k + 3) <= Feuil2.Cells(j + 3, k + 3) Then



If IsEmpty(Feuil3.Cells(j + 3, j + 3 - compt)) Then

Feuil3.Cells(j + 3, j + 3 - compt) = "{" & k + 1


Else

Feuil3.Cells(j + 3, j + 3 - compt) = Feuil3.Cells(j + 3, j + 3 - compt) & "," & k + 1


End If

Feuil3.Cells(j + 3, j + 3 - compt) = Feuil3.Cells(j + 3, j + 3 - compt) & "}"

compt = compt + 1


End If

End If




Next i
Next j
Next k

11 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
30 déc. 2016 à 14:06
Merci de faire des efforts dans la rédaction de tes questions .

Déjà .. on ne comprend pas ce que tu veux faire ....
i on demande à l'utilisateur d'entrer un nombre de lignes et de colonnes .

- A quel endroit tu "demandes" ?? comment ça se matérialise dans ton code ??

- le reste du texte est un tel brouillon qu'on ne comprend pas ce que tu veux essayer de réliser .. merci de reformuler !

Ensuite... ton code est illisible !
Merci d'y mettre de l'indentation... (histoire qu'on puisse voir distinctement comment sont structuré tes différents blocs de IF ...)


bref.. remet de l'ordre dans tes idées (et dans tes explications + ton code...) et reviens nous voir après.

PS: j'ai déplacé ta question dans le forum VBA ... tu l'avais mis dans le forum VB.NET... Merci de faire attention à l'avenir
2
ametudiante Messages postés 16 Date d'inscription jeudi 22 décembre 2016 Statut Membre Dernière intervention 2 janvier 2017
Modifié par ametudiante le 30/12/2016 à 15:45
bon je vais encore essayer de vous expliquer! j ai donné un exemple pour faciliter la comprehension ! car il s'agit d implémenter toute une methode (dans une matiere de specialité) et c est pas facile de vous l expliquer ! cette etape ce n'est qu une petiite partiee d un travail enchainé c est pour cela j ai dis pour l'utilisateur il doit saisir des valeur dans une interface ! cette valeur moi je l'utilise comme nombre de ligne ou de colonne ( vous la considerer comme donnée! )
explication :

au debut ,j ai une matrice des evaluations (f_k(a_i)) saisi dans une autre interface par l'utilisateur (avec a_i sont a,b,c dans l exemple et k c'est colonne 1 ,colonne 2 :(tab1 ))
soient:

F+(a_i,a_j)= {k ϵ F/ f_k(a_i)> f_k(a_j) }
F=(a_i,a_j)= {k ϵ F/ f_k(a_i)= f_k(a_j) }
F-(a_i,a_j)= {k ϵ F/ f_k(a_i)< f_k(a_j) }

le but c'est de construire la matrice citée dans le tab 2 : qui represente l'ensemble F+(a_i,a_j) ∪ F=(a_i,a_j)

je pense que c'est plus clair maintenant avec l'exemple et aveec les notations mathématiques! deja c'est pas facile de vous expliquer ça ! mais j espere que c est clair!!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 31/12/2016 à 08:23
Bonjour,
1) Lis très attentivement le texte de ma signature et comprends-en tout le sens.
2) je ne vais pas faire à ta place ton petit exercice. L'étudiante, c'est toi. Je vais me contenter d'appeler ton attention sur l'existence du membre CountIf de l'objet WorksheetFunction (ouvre l'aide VBA à la rubrique WorksheetFunction.CountIf, méthode et lis).
Cette méthode te permettra de savoir, pour une colonne N, combien d'éléments de cette colonne sont d'une valeur inférieure à une valeur spécifiée (j'espère que tu vois laquelle, hein ...)
Le reste est trop simple pour que je m'en mêle plus. A toi de jouer.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 janv. 2017 à 07:48
il Compte le nombre de cellules à l'intérieur d'une plage qui répondent aux critères donnés. alors moi j'aipas besoin de les compter!!

C'est qu'alors tu n'a rien compris, ni même à ce que tu veux faire et a exposé dans ton tout premier message.
Bonne année et bonne chance.

1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 1/01/2017 à 12:56
personne n'est né savant! je suis débutante et je suis la pour apprendre

Certes, mais là, ce que tu as à apprendre d'abord n'a pas grand chose à voir avec le développement, mais plutôt tout avec la logique, le raisonnement, la détermination et exposé d'un mécanisme de pensée et la compréhension de ce que tu fais.
Tiens ! je vais te le prouver :
écris-nous donc en langage NATUREL (rien à voir avec le développement informatique, hein ...) le "déroulement" de tes opérations, telles que tu le "vois" ... (une espèce d'algorithme, quoi ...). Et on verra alors à quel point le membre que je t'ai indiqué de la fonction que je t'ai indiquée est utile, notamment en raison de ce qu'il te retourne (et qui est le résultat d'un comptage) !
Si tu n'y parviens pas non plus, relis encore, encore et encore le texte de ma signature.
Bonne année et meilleurs voeux de sagesse.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
1

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 janv. 2017 à 13:08
Pour que tu comprennes bien mes réactions, ametudiante :
- ce genre de traitements analytiques (pas uniquement celui que tu as à traiter) a, à son origine, un Monsieur qui s'appelait Frasnay.
- ce Monsieur n'était pas seulement mathématicien. Il était également un enseignant
- il se trouve que j'ai eu l'énorme chance de l'avoir comme tel (enseignant) et d'apprécier ainsi ce que pouvait être les traitements analytiques sur la base de ce qu'il aimait baptiser, en son temps et le mien, comme "calculs par les déterminants et matrices".
Je VEUX maintenant voir l'étudiante s'y mettre réellement.
Amitiés.
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 2/01/2017 à 06:50
Houla ... Ce n'est pas vraiment plus clair.
On va s'y prendre autrement ==>>
Reprenons tes images de départ :

et examinons la grille "tabl 2"
1) on y voit à l'intersection b,a : "1;2" . je comprends que "1" y est le n° de la colonne de la grille "tab1 1" répondant au critère b<=a.
Mais je ne "vois" pas si le "2" y est :
- la valeur de b inférieure ou égale à a (qui est 2)
ou
- le numéro de la ligne dans laquelle cette valeur b est trouvée (qui est également 2)
2) dans la 1ère hypothèse comme dans la seconde, je ne comprends alors plus ce que l'on voit ("1;2") à l'intersection b, c de la grille "tabl 2"
3) je ne comprends pas le "1" que l'on voit à l'intersection a,c , ni le "2" que l'on voit à l'intersection c,a
Peux-tu nous exploser clairement et concisément (pour chacun) ce qu'ils sont et comment ils sont obtenus

Je dis plus haut que l' exemple de données que tu as choisies se prête mal à une tentative de détermination de la raison du fait que (hasard) certaines valeurs sont égales à leur n° de ligne ...
Montre-nous ce que deviendrait la grille "tabl 2" si la grille "tabl 1" était celle qui suit :



________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
1
ametudiante Messages postés 16 Date d'inscription jeudi 22 décembre 2016 Statut Membre Dernière intervention 2 janvier 2017
31 déc. 2016 à 23:36
merci d'avoir repondu :)
mais apres une recherche sur ce membre ,il Compte le nombre de cellules à l'intérieur d'une plage qui répondent aux critères donnés. alors moi j'aipas besoin de les compter!!
et j ai deja essayé avec le code ci_dessus peut etre que vous pouvez detecter la cause de l'erreur d'affichage!!
j ai beaucoup essayé avec ce code! j'aimerais bien avoir un aide :)
0
ametudiante Messages postés 16 Date d'inscription jeudi 22 décembre 2016 Statut Membre Dernière intervention 2 janvier 2017
1 janv. 2017 à 12:27
personne n'est né savant! je suis débutante et je suis la pour apprendre :) l'important c est que j'ai essayé ! et je cherche toujours a resoudre mon probleme :) bienvenu a tout encouragement egalement a tout aide :)
0
ametudiante Messages postés 16 Date d'inscription jeudi 22 décembre 2016 Statut Membre Dernière intervention 2 janvier 2017
Modifié par ametudiante le 1/01/2017 à 21:49
je vais faire le truc manuellement comme si j avais pas une application :(en appliquant l exemple inital)
je vais prendre ma matrice initiale (des evaluations) je fixe la1ere colonne , puis je fixe la 1ere valeur de ma 1ere ligne(a1) ,et je vais parcourir toutes les autres lignes suivant toujours cette colonne ! pour toute valeur tq f(a1=a)>f(a_j) je vais alors me deplacer vers tab2 et ecrire lenumero de cette colonne càd dans cell(a,b)={1,}(car je suis sur colonne 1) pour cell(a,c) je vaispas mentionner le1 car 3<4.. ==>fin
je passe maintenant pour fixer la 2eme valeur toujours par rapport a la 1ere colonne qui est deja fixée! cette fois dans tab 2, rien a remplir car le 2(maintenant fixée) est ineferieur à touts les autres valeur 2<3 et 2<4 ..==> fin
je passe pour fixer la 3eme valeur 4 (evaluation de c % à colonne1) meme procedure je note dans cell(c,a)={1,} et cell(c,b) ={1,}

iteration 2 : pour la 2eme colonne je la fiixe et je fais la meme chose que pour la 1ere colonne !


j'avoue que j'ai bien compris la procédure et ce n'est que question des outils pour faire marcher lecode en dessus! j attend votre aide car j ai passé un temps enorme dans cette partie qui est primordiale pour continuer les autres etapes :(
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
2 janv. 2017 à 12:46
Bonjour à ametudiante et à ucfoutu !
tous mes voeux tout d'abord


Maintenant expliquons
-Dans la première colonne du tableau 2 j'ai des valeurs entières a, b, c , etc..... si il y a lieu
-Les entêtes des colonnes suivantes du tableau 2 reprennent le nom de ces valeurs a, b, c
- à l'intersection d'une colonne et d'une ligne avec la même variable la cellule est toujours vide ( nous comprendrons pourquoi ensuite
- maintenant comment interpréter le 1;2 de la cellule Ligne a Colonne b : La variable a ( en lisant le nom de cette variable sur la seconde ligne ligne du tableau 2 à la première colonne ) est supérieure à b ( colonne b du tableau 2) pour les colonnes 1 et 2 du tableau 1 soit a < b dans les colonnes 1 et 2 pour interpréter la cellule contenant 1;2
- de même a > c dans la colonne 2 pour la cellule (ligne a colonne c)
- on comprend que a n'est jamais > a d'où le fait que la cellule (ligne a colonne a) est vide

VBA n'est pas ma tasse de thé mais je cogite une solution avec des tableaux a(), b() dimensionnés selon le nombre de variables

0
ametudiante Messages postés 16 Date d'inscription jeudi 22 décembre 2016 Statut Membre Dernière intervention 2 janvier 2017
2 janv. 2017 à 14:33
peut etre que vous n'avez pas compris la procedure :( on aura exactement le meme tableau ! le 2 va apparaitre dans la 2eme iteration ça represente le numero de la 2 eme colonne!

j'ai reglé le probleme avec le meme code initial ,!!j devais faire quelque modifications au niveau de stockage de cell!
merci tout de meme! c pas du tout facile cette procedure !
merci bcccp
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
3 janv. 2017 à 02:20
bonjour
si le sujet est résolu mets le comme tel en cliquant sur "Marquer comme Résolu"
Merci
0
Rejoignez-nous