Mon Code VBA donne " #VALEUR!"
SinanSakalli
-
sinan -
sinan -
Bonjour,
Je me permets de partager mon problème avec vous, parce que je ne vois pas mes erreurs.
Situation:
- Je souhaite faire une recherche dichotomique à partir d'une plage constitutuée d'une seule colonne.
- donc plusieurs lignes sur une seule colonne
- j'ai fait deux fonctions : essai() et rechDicho
- essai() doit me permettre de récupérer les coordonnées de la plage et autres informations
- rechDicho() doit me permettre de faire la recherche dichotomique et renvoyer l'adresse de la cellule correspondante.
- essai() reçoit une plage constitués d'entiers uniques et triés dans l'ordre croissant
ma méthode d'application:
- je choisis une cellule sur la feuille excel où se trouve une petite plage de nombres entiers sur une colonne
- j'applique une fonction à cette cellule
résultat:
- #VALEUR! dans cette cellule après des petits messages (MsgBox).
- j'obtiens les messages de la deuxième fonction sur min écran, donc l'appel de la fonction rechDicho() fonctionne
Désolé si je vous dérange; je viens de plonger dans la VBA sans passer par les exercicess d'initiation ion j'en suis sur que si je passais par les exercices intermédiaires j'aurais mieux compris la logique. C'est en effet dû à un manque de temps
Je me permets de partager mon problème avec vous, parce que je ne vois pas mes erreurs.
Situation:
- Je souhaite faire une recherche dichotomique à partir d'une plage constitutuée d'une seule colonne.
- donc plusieurs lignes sur une seule colonne
- j'ai fait deux fonctions : essai() et rechDicho
- essai() doit me permettre de récupérer les coordonnées de la plage et autres informations
- rechDicho() doit me permettre de faire la recherche dichotomique et renvoyer l'adresse de la cellule correspondante.
- essai() reçoit une plage constitués d'entiers uniques et triés dans l'ordre croissant
ma méthode d'application:
- je choisis une cellule sur la feuille excel où se trouve une petite plage de nombres entiers sur une colonne
- j'applique une fonction à cette cellule
résultat:
- #VALEUR! dans cette cellule après des petits messages (MsgBox).
- j'obtiens les messages de la deuxième fonction sur min écran, donc l'appel de la fonction rechDicho() fonctionne
Sub MonPremierMacro()
'
' MonPremierMacro Macro
'
'
Dim plage As Range
Dim valeur As Integer
Set plage = Application.InputBox("sélectionnes la plage dans laquelle tu veux rechercher", "plage de recherche")
Set valeur = Application.InputBox("inséres la valeur que tu recherches", "la valeur cherchée")
essai(plage, valeur)
Function essai(plage As Range, valeur As Integer)
'la fonction retourne un résultat
'Dim plage As Range
Dim colonne As String ' variable qui va contenir le numéro de colonne de la sélection range
Dim ligne As Integer 'variable qui va contenir le numero de ligne cette fois-ci
Dim dernligne As Integer 'variable qui va contenir le numéro de a deniere ligne
Dim nbligne As Integer 'variable qui va contenir le nombre de ligne total de la sélection
Dim adresse As Long
'Dim valeur As Integer
Dim cellule As Range 'cellule que l'on va agir dessus dont l'adresse va être renvoyée par la fct de rechDIcho
colonne = plage.Column 'on récupère le numéro de la première colonne de la sélection
ligne = plage.Row 'on récupère le numéro de la première ligne de la sélection
nbligne = plage.Rows.Count 'on compte le nombre total de ligne et on stocke
dernligne = ligne + nbligne - 1 'on repère la dernière ligne de la sélection
Call MsgBox("ma colonne se trouve au " & colonne & "ma ligne se trouve au " & ligne) 'on affiche les valeurs des variables affectées
adresse = rechDicho(valeur, colonne, ligne, dernligne)
essai = ActiveSheet.cellule(adresse).Select 'on retourne l'action "sélect"
End Function
Function rechDicho(ByVal valrech As Integer, ByVal col As String, ligne As Integer, dernligne As Integer) As Long
Dim trouve As Boolean 'variable boolenne qui va se déclencher quand on aura trouvé la valeur cherchée
Dim iDeb As Integer 'on recre les meme variables sous un autre nom
Dim iFin As Integer 'on recre les meme variables sous un autre nom
Dim iMil As Integer 'on recre les meme variables sous un autre nom
Dim tabnav As Range 'curseur qui va naviguer et permettre d'envoyer l'adresse
Call MsgBox(prompt:="Votre sélection est bien " & valrech & "dans la colonne" & col, Buttons:=vbYesNo) ' message de confirmation
trouve = False
iDeb = ligne
iFin = dernligne
While trouve = True And (iFin - iDeb) > 1
iMil = (iDeb + iFin) / 2
Call MsgBox("iMil vaut " & iMil)
If ActiveSheet.tabnav.Columns(col).Rows(iMil).Value = valrech Then
trouve = True
End If
If ActiveSheet.tabnav.Columns(col).Rows(iMil).Value > valrech Then
iFin = iMil
Else
iDeb = iMil
End If
Wend
If trouve = True Then
rechDicho = ActiveSheet.tabnav.Columns(col).Rows(iDeb).Address
Else
rechDicho = ActiveSheet.tabnav.Columns(0).Rows(0).adress
End If
End Function
Désolé si je vous dérange; je viens de plonger dans la VBA sans passer par les exercicess d'initiation ion j'en suis sur que si je passais par les exercices intermédiaires j'aurais mieux compris la logique. C'est en effet dû à un manque de temps
A voir également:
- Mon Code VBA donne " #VALEUR!"
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
1) oui
2) je vais essayer
conseil) tu as raison, je prends bonne note de ton conseil
Daniel
Je préfère comme tu dis de le résoudre moi-même; je dois le résoudre moi-même.
Merci pour ton aide.