remplissage variable vide

  • Initiateur de la discussion Initiateur de la discussion portillo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

portillo

XLDnaute Junior
bonjour forum!! eh oui je suis là à nouveau!!! alors j'ai un probleme car j'ai des variables dans mon code qui restent vides meme si j'ai deja afecte une valeur!! et je ne sais pas comment faire, j'ai essayé de donner d'autres valeurs et rien et quand je lance ma macro j'ai un erreur d'execution 13!! voila mon probleme. Je vous mets lla ligne de mon ncode !
Private Sub UserForm_Initialize()
Dim Point(1 To 961)
Set tw = Me.MonArbre
[BDALGE].Sort key1:=[BDALGE].Cells(1, 7), key2:=[BDALGE].Cells(1, 5)
n = [BDALGE].Rows.Count
Base = [BDALGE]
tw.Nodes.Add(, , "NoeudInit", "PROJET ALGER").Expanded = True 'Racine Arbre: Projet'
i = 1
Do While Range("pere")(i) <> ""
tw.Nodes.Add("NoeudInit", tvwChild, "NoeudPoint" & Base(i, 2), Base(i, 2)).Expanded = True
mpere = Range("pere")(i)
Do While Range("pere")(i) = mpere
i = i + 1
Loop
register = Range("fils")(i - 1)
hierarchie mpere, register
Loop

End Sub
Sub hierarchie(Box, register)
Dim nomregister As String
nomregister = Application.VLookup(register, [BDALGE], 2, False)
n = [BDALGE].Rows.Count
Base = [BDALGE]
tw.Nodes.Add("NoeudPoint" & Box, tvwChild, "NoeudMat" & register, nomregister).Expanded = True
vfils pere
End Sub

Tout ce qui est en rouge reste vide!!!!!!
merci
 
Re : remplissage variable vide

bonjour Portillo,

Où est déclarée la Variable mpere?

C'est sans doute de là que viens le problème mais sans ton fichier c'est difficile de voir si autre chose ne fonctionne pas.

A bientôt
 
Re : remplissage variable vide

Re bonjour Portillo,

Dans la procedure ci-dessous, il faut déclarer nomregister comme Variant en effet les fonction de feuille de calcul appelée depuis VBA retourne soit une valeur soit un code d'erreur.

Code:
Sub hierarchie(Box, register)
    Dim nomregister [COLOR=red]As Varia[/COLOR]nt
    nomregister = Application.VLookup(register, [BDALGE], 2, False)
    [COLOR=red]If Not IsError(nomregister) Then[/COLOR]
        n = [BDALGE].Rows.Count
        Base = [BDALGE]
        tw.Nodes.Add("NoeudPoint" & Box, tvwChild, "NoeudMat" & register, nomregister).Expanded = True
        vfils pere
    [COLOR=red]End If[/COLOR]
End Sub

P.S. un tableau avec quelques données aurait été préférable pour les tests.

A bientôt
 
Re : remplissage variable vide

merci Hasco en fait pour les donnes desoles sont confidentieles et je peux avoir de problemes si je les mets, sinon j'ai fait ce que tu m'as dit et ma variable register est register= "" et quand j'execute pas à pas et je suis dan mon If.. nomregister = Erreur 2042, apres je continue et j'ai l'erreur 35602 key is not unique in collection!!!!!
 
Re : remplissage variable vide

Portillo

Portillo à dit:
les donnes desoles sont confidentieles

imagine quelques données cohérentes avec ton fichier réel et inclus les dans le fichier exemple. Sinon cela va être difficile de repérer les erreurs.

Sinon , dans ce que je t'ai donné, il ne faut pas remplacer

If not IsError(nomregister) then

par
Portillo à dit:
If.. nomregister = Erreur 2042

Parce que les fonction de feuille de calcul comme VLookup peuvent renvoyer plusieurs sortes d'erreur. Donc ton test n'est plus fiable et forcément la ligne suivante essaie de créer un fils dont la clé sera "" et qui existe déjà.

nomregister doit être un variant qui contiendra soit une valeur retourné par VLookUp soit une variable erreur.

A bientôt
 
Re : remplissage variable vide

RE je crois que je me suis pas bien expliqué en fait j'ai pas mis if nomregister=erreur 2042 ce que je veux dire ce que quand je mets If not IsError(nomregister) then, alors je t'envoi ici un fichier avec des donnes plus au moins identiques!! merci encore de ton aide!!!
 

Pièces jointes

Re : remplissage variable vide

Hasco je comprend pas pourquoi dans le fichier que j'ai mis dans ce forum a un autre erreur que celui là que j'utilise, pourtant c'est qu'une copie, j'ai change seulement les donnee pas les types de donnees, sinon dans mon fichier perso mon erreur c'est 35602 key is not unique in collection, j'ai verifie et pourtant j'utilise deux fois seulement le mêle champs de donnees!! bon j'espere que tu deviendras mon hero et que tu pourras me dire comment faire, moi de mon cote je continue à voir ou se trouve le probleme!!
Merci
 
Re : remplissage variable vide

Portillo,

Ta procédure ne peut pas fonctionner car

1- If not iserror(nomregister) doit être placé après le Vlookup et non avant
2- le VLookUp recherche dans la colonne 1 un numéro qui ne peut pas exister.

Donc je te propose:

Code:
Sub hierarchie(Box, register)
    Dim c As Range
    Dim NomRegister As String
 
    'Recherche de register dans la colonne 3 de la base
    Set c = Range("BDALGE").Columns(3).Find(what:=register, LookIn:=xlValues)
    
   'Si register a été trouvé
    If Not c Is Nothing Then
      NomRegister = Range("BDALGE").Parent.Cells(c.Row, 2)
      n = [BDALGE].Rows.Count 
      Base = [BDALGE]
      tw.Nodes.Add("NoeudPoint" & Box, tvwChild, "NoeudMat" & register, NomRegister).Expanded = True
      vpointfils pere
    End If
End Sub

De plus dans la procédure vpointfils
cette ligne: vfils Base(i, 3)
appelle une procédure vfils qui n'existe pas.

Autre point j'espère que tes numéros register son unique dans ta base sinon tu vas avoir des problèmes, le treeview, n'acceptant pas deux clés identiques.

Avec un effort de plus tu aurais pu mettre différents codes uniques dans ta base exemple.

A bientôt
 
Re : remplissage variable vide

hasco, j'ai essaye ta methode et rien je continue à avoir le meme erreur d'execution 35602 key is not unique. Dans mon fichier le n° register est unique. Alors j'aissaye tous ce que je peux savoir et rien, rien et rien!!!!!!

merci de ton aide
 
Re : remplissage variable vide

Portillo,

Avec les données parcellaires que j'ai je ne peux savoir pourquoi tu n'obtiens pas de clef unique.

Mais peut-être qu'il n'est pas forcément utile d'avoir une clef de branche tu peux essayer d'ajouter les branches de ton arbre sans leur donner de clefs en écrivant:

tw.Nodes.Add("NoeudPoint" & Box, tvwChild, , NomRegister).Expanded = True
le .Expanded=true, n'est peut-être pas nécessaire non plus lors de la construction de l'arbre.

Je n'ai pas compris non plus pourquoi tu avais une variable base initialisée comme suit:
Base = [BDALGE]

cela duplique dans un tableau les valeurs de la plage de cellules alors que tu peux y faire référence en faisant [BDALGE].Cells(indexLigne,indexcolonne). C'est une surcharge en moins.

A bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
789
Réponses
12
Affichages
994
Réponses
2
Affichages
892
Retour