méthode select de l'objet range a échoué

D

David Jonc.

Guest
Bonjour au forum,

Tout d'abord, je n'y comprend plus rien.
J'expose le probleme:

j'ai une feuille de calcul avec des clients, et ses clients peuvent avoir plusieurs fournisseurs.donc je peux avoir jusque 10 lignes, 1 client pour 10 fournisseurs. Le restant des lignes(9 autres si il y a 10 clients) en dessous du client sont vides.
J'ai cré un userform général qui regroupe les information de toute la ligne, ces informations sont disponibles selon un comboboxclient, et un deuxieme userform qui permet de repertorier tous les fournisseurs.

Dans ce deuxieme userform, je voudrai supprimer, modifier, ajouter des fournisseurs. Et c'est là que ça coince. J'arrive a ajouter des clients, et je rajoute des lignes selon le nombre de clients a ajouter. Mais, lorsque je ne touche a rien, ou que je supprime des lignes, j'arrive a une erreur d'execution -2147417848 (80010108), lma méthode Select de l'objet Range a échoué.

De quoi ça pourrait venir?

Est ce que quelqu'un aurait une idée là dessus?

Merci beaucoup

david
 
D

David Jonc.

Guest
Bonjour le forum,

ci joint une piece jointe qui vous illustrera mon probleme.

Le probleme est que lorsque je veux supprimer un fournisseur, tout bloque.

Je n'y comprend plus rien, j'implore votre aide.

Merci beaucoup

David
 
S

salim

Guest
Bonsoir le Fil et le Forum


David voici ton fichier sans plantage faut bien faire attention avec les boucles Do ....Loop parceque si comme la tu n'initialises pas ta variable " bla " à 0 ta boucle elle perd la boule de plus je ne comprend pas tu déclares une variable public " nbf " pour ensuite déclarer une variable locale " bla " pour donner à " bla " la valeur de " nbf " pourquoi ne pas te servir directement de " nbf " bizare enfin bref vu l'heure je me suis contenter d'éviter le plantage ( c'est déja bien pour moi LOL ) sans savoir si ton code réalise ce que tu souhaites.

Bonne nuit

salim
 

Pièces jointes

  • David_Jonc_Probleme.zip
    46.2 KB · Affichages: 35
  • David_Jonc_Probleme.zip
    46.2 KB · Affichages: 35
  • David_Jonc_Probleme.zip
    46.2 KB · Affichages: 35
D

David Jonc.

Guest
Bonjour au forum, bonjour omicron, bonjour salim,

En fait la variable nbf contient le nombre de fournisseurs trouvés dans la feuille de calcul, et la variable nb_fo compte le nombre de fournisseur une fois etre passé par le userform, et le userform peut soit suprrimer, ajouter ou modifier. Selon les cas respectifs, nb_fo peut soit etre diminué (suppression de fournisseur, et donc de ligne dans la feuille de calcul), soit ne pas bouger (aucune modification dans la feuille de calcul), soit ajouter des fournisseurs (donc ajouter une ligne dans la feuille de calcul).
Le truc dans les boucles que j'ai voulu faire c'est que les variables doivent se rejoindre, c'est à dire,

TANT QUE "Le nombre de fournisseur avant" - "Nombre de fournisseur maintenant" <> 0 faire

AJOUTER une ligne dans la feuille de calcul
DECREMENETER de 1 le nombre de fournisseur maintenant
FIN TANT QUE


deuxieme boucle:

TANT QUE "Le nombre de fournisseur maintenant" - "Nombre de fournisseur avant" <> 0 faire

SUPPRIMER une ligne dans la feuille de calcul
DECREMENETER de 1 le nombre de fournisseur avant
FIN TANT QUE

Cela mer permet de gérer les lignes.
Il ne faut pas initailliser bla à 0.
Et le probleme vient donc lorque j'enregistre mon travail, si il n'ya pas plus de fournisseurs, donc aucune lignes a rajouter, ou que j'en supprime, donc des lignes a supprimer, le programme plante.

J'ai continué a chercher, mais je ne trouve toujours pas, ça m'ennerve.

Merci beaucoup pour votre aide
 
M

myDearFriend

Guest
Bonsoir David, Omicron, Salim.


David, à première vue, ton problème est dû à l'utilisation de la propriété RowSource pour ta "ComboBoxClient".

En effet, dans l'évènement Initialize de ton USF, tu définis cette propriété RowSource sur une certaine plage. Ensuite, tu tentes de supprimer des lignes dans cette plage, ce qui a pour effet de déclencher à nouveau l'évènement Change de cette "ComboBoxClient" et là, VBA y perd son latin (ou plutôt son anglais !) car le RowSource défini en amont ne correspond plus à la réalité... d'où un beau plantage.

N'ayant pas vraiment le temps d'analyser plus en détail ton code (il faudra faire le ménage lol !), je suppose qu'une solution consisterait à alimenter ta ComboBoxClient autrement que par la propriété RowSource.
Tu pourrais, par exemple, mettre dans l'Initialyze du USF, quelque chose comme ça :
Dim Plage As Variant
With Sheets("Feuil1")
Plage = .Range("B1:AB" & .Range("B65536").End(xlUp).Row).Value
End With
With Me.ComboBoxClient
.ColumnCount = 26
.ColumnWidths = "100;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"
.List() = Plage
End With


Cela implique également qu'il faudra redéfinir le contenu de cette ComboBox à chaque suppression ou ajout de ligne...


Cordialement,
Didier_mDF
 
D

David Jonc.

Guest
Bonjour le forum, bonjour MyDearFriend,

Je suis compltement débutant dans le VBA, et je suis en stage en ce moment. Je passe mes journées entiere sur le vba, parfois je bloque une journée entiere sur une connerie, et là, ça fait plusieurs jours. J'etais passé par ce raisonement aussi qui est de redéfinir la plage d'adresse, mais étant donné que l'ajout de ligne est bon, je méétais dit que pour la suppression ça devait etre pareil. Bref, je me prend la tete la dessus, et j'ai peur de ne pas reussir, je n'ai eu aucunes formations au vba, et je programme un peu comme je le pense. Je le vois trés bien aujourd'hui que j'aurai du etre plus structuré (tu me l'as meme dit, il faut faire du ménage, totalement d'accord avec toi), mais il me manque des connaissance, et j'apprend beaucoup en ce moment, grace a ce forum tout particulierement. Seulement, là je me heurte a un trés gros probleme, et je n'arrive pas a me dépatouiller. J'ai bien essayer ce que tu m'as dit, mais j'ai une erreur d'incompatibilité de type, je ne vois vraiement pas. Y'a pas, je vais continuer encore à chercher, mas pour l'heure, mon stage se termine à la fin de la semaine. Je n'ai plus beaucoup de temps.
Bref, si tu pouvai m'apportais une aide, ça ne serait pas de trop, et j'apprecierai beaucoup.

Je te remercie d'avoir déja regardé ce que j'avais fait.

Ciao, et merci.

David
 
S

salim

Guest
Bonjour le David Jonc, Didier_mDF, Omicron, Salim " Heu non c'est moi ça LOL " et le Forum

David je ne sais pas si ça va régler ton problème mais je sais ( je l'ai appris ici d'ailleurs ) que la propriété RowSource interdit la suppression d'éléments il faut passer par le méthode AddItem pour pouvoir le faire ou par des Array ( " tableau " ) je crois aussi, voila j'espère t'avoir aider un peu .

Salim
 
D

David Jonc.

Guest
Bonjour Didier_mDF, Omicron, Salim et le Forum,

J'ai essayé la solution du additem, mais je 'ai pas réussi.

Vous me dites si c'est faux:

Je dois d'abord enregietrer chaque données dans un tableau, et ensuite je dois faire un combo box additem? c'est cela??


Je ne comprend pas de trop, est ce que quelqu'un peut m'explquer la démarche a suivrer svp.

Merci beaucoup.

David
 
D

David Jonc.

Guest
Bonjour au forum,

je viens de voir que l'on pouvait modifier la listindex du combobo, en utilisant UserForm1.ComboBoxClient.RemoveItem (ComboBoxClient.ListIndex)

Mais ça ne fonctionne pas, est ce que quelqu'un a deja essayé de mettre dynamiquement a jour une combobox lors d'une suppression de ligne?


Merci beaucoup
 

Discussions similaires

Réponses
16
Affichages
519

Statistiques des forums

Discussions
314 216
Messages
2 107 389
Membres
109 819
dernier inscrit
ogui42