Recherche dans un tableau

Signaler
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012
-
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012
-
ce tableau est un extrait d'une norme pour trouver la section d'un câble électrique en fonction de l'intensité admissible et les modes de poses

Les lettres B et C sont des méthodes de reférences
PVC2 ou PVC3 correspondent au type d'isolant PVC avec 2 conducteur ou 3 conducteurs


B PVC3 PVC2
C vide PVC3
Cuivre
1.5 15 17
2.5 21 24
4 28 32
Aluminium
1.5 15 17
2.5 21 24
4 28 32


Je pose le problème, le câble d'ame cuivre (choisi par optionbutton),en methode de référence B (choisi dans une combobox) de type PVC2 (choisi dans une combobox) est parcouru par une intensité de 20A.
Dans la ligne B, colonne PVC2, valeur immédiatement supérieure à 20, c'est 24, ce qui nous donne une section en cuivre de 2.5mm2
J'ai mis en gras le chemin pour trouver la solution

Merci d'avance

15 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,
Je pose le problème, le câble d'ame cuivre (choisi par optionbutton),en methode de référence B (choisi dans une combobox) de type PVC2 (choisi dans une combobox) est parcouru par une intensité de 20A.

Aucune réponse raisonnable tant que tu ne nous auras pas dit comment du détermine le nombre souligné dans la citation de ce que tu as écrit !

A moins que ta question ne soit finalement (et on oublie alors tout le préambule) : comment trouver, dans un tableau de valeurs, la valeur immédiatement supérieure à un nombre spécifié !
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

La valeur 20A sera mise dans une text.box pour simplifier

J'avais oublié aussi de faire un aperçu pour voir le chemin à suivre pour trouver la solution

B PVC3 PVC2
C vide PVC3
Cuivre
1.5 15 17
2.5 21 24
4 28 32
Aluminium
1.5 15 17
2.5 21 24
4 28 32
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
On oublie alors tout le préambule !
Au bout du compte, si je comprends bien, tu sais (et es seul à le savoir) quel est le nombre (20 dans ton cas) dont tu recherches celui immédiatement supérieur dans un tableau que tu connais (le tableau cuivre, dans ton cas) et, après avoir trouvé ce nombre (24 dans ton cas), extraire le nombre figurant dans la première colonne de la même ligne du tableau (cuivre dans ton cas) examiné ...
C'est çà ?
Confirme avant que je ne m'y mettes, s'il te plait !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

On oublie le préambule ! oui je suis le seul à connaître le chiffre 20 car je vais le saisir dans une textbox !

Ce qui est important c'est bien de respecter la requête par exemple:
Le câble d'ame cuivre (choisi par optionbutton),en methode de référence B (choisi dans une combobox) de type PVC2 (choisi dans une combobox) est parcouru par une intensité de 20A.
Dans la ligne B, colonne PVC2, valeur immédiatement supérieure à 20 pour du cuivre, c'est 24, ce qui nous donne une section en cuivre de 2.5mm2

B PVC3 PVC2
C vide PVC3
Cuivre
1.5 15 17
2.5 21 24
4 28 32
Aluminium
1.5 15 17
2.5 21 24
4 28 32
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
je ne sais pas si tu te rends compte de ce que tu dis là est très loin d'être clair !
Je me fiche de ta ligne B (elle ne veut rien dire dans le contexte !)
PVC2 ne veut pour moi rien dire du tout non plus , mis à part que je choisirai une colonne et pas l'autre ( la 2ème si PVC3, la 3ème si PVC2) dans le tableau cuivre.
Si ce n'est pas cela non plus, il va falloir que tu nous montres un algo clair et précis de ton raisonnement !
Je t'ai posé plus haut une question. Réponds-y s'il te plait
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

Je te confirme que tu as tout compris !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Il te faut alors un tableau cuivre et un tableau aluminium...
Exemple pour le tableau cuivre, en y cherchant l'immédiatement supérieur à 20 dans la 3ème colonne :

Dim cuivre(2, 2) As Single, donne As Single, diff As Single, tremplin As Single, i As Integer
 'voilà ton tableau cuivre : on le  construit, pour exemple, donc
 cuivre(0, 0) 1.05: cuivre(0, 1) 15: cuivre(0, 2) = 17
 cuivre(1, 0) 2.5: cuivre(1, 1) 21: cuivre(1, 2) = 24
 cuivre(2, 0) 4: cuivre(2, 1) 28: cuivre(2, 2) = 32
 donne 20 ' <<<<< tu es seul à savoir pourquoi et comment !
 diff cuivre(0, 2) - donne: trouve 0
 tremplin = donne * 2
 If diff <> 0 Then
   For i = 1 To 2
     If cuivre(i, 2) > donne And cuivre(i, 2) < tremplin Then
          diff cuivre(i, 2): tremplin diff: trouve = i
     End If
   Next
 End If
 MsgBox "valeur impmédiatement supérieure ou égale : " & cuivre(trouve, 2) & " pour une correspondance de " & cuivre(trouve, 0)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Hep-là !
Petit oubli :
remplace :
If cuivre(i, 2) > donne And cuivre(i, 2) < tremplin Then


par :
If cuivre(i, 2) >= donne And cuivre(i, 2) < tremplin Then


Juste pour le cas où tu mettrais une valeur exacte dans ta textbox, hein...

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

Que c'est pas facile de se faire comprendre !!je me rappelle une question lors d'un entretien d'embauche pour un poste de formateur "Que redoutez vous le plus ?" réponse "de ne pas me faire comprendre"

Alors ce qu'il manque, c'est bien entendu que dans ce tableau cuivre il faudrait qu'on nous donne le choix de savoir qu"elle est la méthode de référence ! dans notre exemple la lettre B, que l'on puisse également choisir le type d'isolant avec son nombre de conducteur PVC2 .
Ce qui nous amène dans la 1ere ligne et 3ème colonne!
Arbitrairement nous avons choisi une intensité de 20A, cela nous donne 24, valeur immediatement supérieure dans la colonne et qu'une msgbox nous affiche 2.5

à demain

B PVC3 PVC2
C vide PVC3
Cuivre
1.5 15 17
2.5 21 24
4 28 32
Aluminium
1.5 15 17
2.5 21 24
4 28 32
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

Un petit bug dans ton post !

Lorsque j'ai mis donne =16, j'aurai du trouver 17

A demain
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
En effet. Et tu aurais pu le corriger toi-même en analysant ;
For i 0 To 2 et non For i 1 To 2

Essaye de comprendre et non de copier simplement.
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
En ce qui concerne maintenant ceci :
"Que redoutez vous le plus ?" réponse "de ne pas me faire comprendre"

Ma réponse claire, simple et nette : il suffit, pour ne pas être dans un tel cas, d'apprendre à aller à l'essentiel et de savoir l'exprimer.
Regarde ce qu'il t'aurait suffi de dire :
"Je veux, dans un tableau de x lignes et y colonnes, extraire dans une colonne yn du dit tableau la valeur immédiatement supérieure ou égale à un nombre nb et la valeur correspondance, sur la même ligne, de la colonne xn."
Car là était ton problème et la manière de le cerner. Tout le reste (le préambule) n'était que la motivation d'une telle recherche et ne regardait que toi.
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Et voilà maintenant le même code, avec une flexibilité totale ! c'est toi qui choisis :
- la colonne d'extraction (variable yrecherche) de la valeur égale ou immédiatement supérieure à un nb spécifié (donne)
- la colonne d'extraction (variable ycorresp) de la correspondance à trouver
Dim cuivre(2, 2) As Single, donne As Single, diff As Single, tremplin As Single, i As Integer
 'voilà ton tableau cuivre
 cuivre(0, 0) 1.05: cuivre(0, 1) 15: cuivre(0, 2) = 17
 cuivre(1, 0) 2.5: cuivre(1, 1) 21: cuivre(1, 2) = 22
 cuivre(2, 0) 4: cuivre(2, 1) 28: cuivre(2, 2) = 21
 donne = 20
 yrecherche = 3 '<<<<<====== si tu veux chercher dans la 3ème colonne
 ycorresp = 2 '<<<<<<< si la colonne de "correspondance" est la 1ère
 diff cuivre(0, yrecherche - 1) - donne: trouve 0
 tremplin = donne * 2
 If diff <> 0 Then
   For i = 0 To 2
     If cuivre(i, yrecherche - 1) >= donne And cuivre(i, yrecherche - 1) < tremplin Then
          diff cuivre(i, yrecherche - 1): tremplin diff: trouve = i
     End If
   Next
 End If
 MsgBox "valeur impmédiatement supérieure ou égale : " & cuivre(trouve, yrecherche - 1) & " pour une correspondance de " & cuivre(trouve, ycorresp - 1)


Que veux-tu de mieux ?
Il te reste à faire quoi, selon ce que je devine ?
Fastoche : un tableau de "répartition" ===>>>>
B PVC3 PVC2
C vide PVC3
Tu dois "fouiller" dans ce tableau pour extraire ;
- dans sa colonne 1 (ta variable ycorresp) le n° de ligne Numligne correspondant à ton choix (B ou C) ===>> ce sera ta variable
- sur cette ligne Numligne de ton tableau, chercher dans quelle colonne (ta variable yrecherche) se trouve ton choix "complémentaire" (ex : PVC3, PVC2, ...)
Comment traiter cette chose simple ? en t'inspirant très largement (mais pas en copiant) du code que tu as déjà et qui, lui, est l'extraction finale sur les bases de donne, de yrecherche et ycorresp.
Retrousse-toi un peu les manches (c'erst ulktra-facile).
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

Bonjour,

Bien entendu qu'il faut que je comprenne le code car le tableau que je t'ai donné n'est qu'un extrait !! il était bien tard hier soir !!voilà tout !! mais oui je suis du genre à retrousser mes manches et je vais bien entendu décortiquer ton code !!!

A plus tard

Et merci
Messages postés
40
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
14 mars 2012

Voila ucfoutu !! j'ai tout testé ! j'ai juste trouvé une erreur !!rires !!

Bon voila j'ai fais ma selection de colonne par optionbutton et la donnée par textbox ! de plus j'ai rajouté une ligne et une colonne aux données d'entrées pour voir si je pouvais m'approprier le code !!


Merci et à la prochaine pour un nouveau défit !!!




Private Sub Command4_Click()
Dim cuivre(3, 3) As Single, donne As Single, diff As Single, tremplin As Single, i As Integer
'voilà ton tableau cuivre
cuivre(0, 0) 1.5: cuivre(0, 1) 15.5: cuivre(0, 2) = 17.5: cuivre(0, 3) = 18.5
cuivre(1, 0) 2.5: cuivre(1, 1) 21: cuivre(1, 2) = 24: cuivre(1, 3) = 25
cuivre(2, 0) 4: cuivre(2, 1) 28: cuivre(2, 2) = 32: cuivre(2, 3) = 34
cuivre(3, 0) 6: cuivre(3, 1) 36: cuivre(3, 2) = 41: cuivre(3, 3) = 43
donne = Text1.Text
If ((Controls("Option1").Value True) And (Controls("Option7").Value True)) Or ((Controls("Option2").Value = True) And (Controls("Option8").Value = True)) Then
colonne = 3
End If
If ((Controls("Option1").Value True) And (Controls("Option8").Value True)) Then
colonne = 2
End If
If ((Controls("Option3").Value True) And (Controls("Option8").Value True)) Then
colonne = 4
End If
yrecherche = colonne '<<<<< si on veut chercher dans la xème colonne
ycorresp = 1 '<<<<<<< si la colonne de "Section" est la 1ère
diff cuivre(0, yrecherche - 1) - donne: trouve 0
tremplin = donne * 3 '<<<<< 3 numéro de colonne max
If diff <> 0 Then
For i = 0 To 3 '<<<<<< 3 numéro de ligne max , début 0
If cuivre(i, yrecherche - 1) >= donne And cuivre(i, yrecherche - 1) < tremplin Then
diff cuivre(i, yrecherche - 1): tremplin diff: trouve = i
End If
Next
End If
MsgBox "Iz =" & cuivre(trouve, yrecherche - 1) & " Section cuivre= " & cuivre(trouve, ycorresp - 1)
End Sub