Erreur d'éxécution 9
Résolu
Lucatana
Messages postés
7
Statut
Membre
-
Lucatana Messages postés 7 Statut Membre -
Lucatana Messages postés 7 Statut Membre -
Bonjour,
Je suis novice dans l'utilisation de VBA (et de tout autre langage de programmation d'ailleurs) mais je suis en alternance et l'une de mes tâches consiste à apprendre vite et bien comment faire une base de données sur excel (ils ne veulent pas d'access).
J'ai acheté le livre "Macros et langage VBA" et j'ai commencé à apprendre mais je rencontre un problème dans l'exécution de ma toute première macro.
Je souhaite avoir une feuille regroupant les informations de tous les clients de la boite, et une autre feuille qui serait un formulaire.
Ce formulaire se compléterait automatiquement lorsque je remplirais le nom du client (il irait chercher toutes les infos dans la feuille 1)
Voilà le code que j'ai rempli:
Option Explicit
Sub chargement_client()
Dim f_client, f_pays, f_adresse, f_ville, f_code_postal, f_CC As String
Dim num_col As Long
Dim num_ligne As Long
num_col = 2
f_client = 6
f_pays = 8
f_adresse = 9
f_ville = 10
f_code_postal = 11
f_CC = 13
While Sheets("Feuil1").Cells(f_client, 6) <> ""
If Sheets("Feuil1").Cells(f_client, 6) = Sheets("Feuil2").Cells(10, num_col) Then
Sheets("Feuil1").Cells(f_pays, 6) = Sheets("Feuil2").Cells(11, num_col)
Sheets("Feuil1").Cells(f_adresse, 6) = Sheets("Feuil2").Cells(12, num_col)
Sheets("Feuil1").Cells(f_ville, 6) = Sheets("Feuil2").Cells(13, num_col)
Sheets("Feuil1").Cells(f_code_postal, 6) = Sheets("Feuil2").Cells(14, num_col)
Sheets("Feuil1").Cells(f_CC, 6) = Sheets("Feuil2").Cells(16, num_col)
Exit Sub
Else
num_col = num_col + 1
End If
Wend
End Sub
Malheureusement VBA m'annonce une erreur d'exécution "9" à la ligne While (ligne en gras).
Pouvez vous, s'il vous plait, me dire où je me suis trompée?
Cordialement
Je suis novice dans l'utilisation de VBA (et de tout autre langage de programmation d'ailleurs) mais je suis en alternance et l'une de mes tâches consiste à apprendre vite et bien comment faire une base de données sur excel (ils ne veulent pas d'access).
J'ai acheté le livre "Macros et langage VBA" et j'ai commencé à apprendre mais je rencontre un problème dans l'exécution de ma toute première macro.
Je souhaite avoir une feuille regroupant les informations de tous les clients de la boite, et une autre feuille qui serait un formulaire.
Ce formulaire se compléterait automatiquement lorsque je remplirais le nom du client (il irait chercher toutes les infos dans la feuille 1)
Voilà le code que j'ai rempli:
Option Explicit
Sub chargement_client()
Dim f_client, f_pays, f_adresse, f_ville, f_code_postal, f_CC As String
Dim num_col As Long
Dim num_ligne As Long
num_col = 2
f_client = 6
f_pays = 8
f_adresse = 9
f_ville = 10
f_code_postal = 11
f_CC = 13
While Sheets("Feuil1").Cells(f_client, 6) <> ""
If Sheets("Feuil1").Cells(f_client, 6) = Sheets("Feuil2").Cells(10, num_col) Then
Sheets("Feuil1").Cells(f_pays, 6) = Sheets("Feuil2").Cells(11, num_col)
Sheets("Feuil1").Cells(f_adresse, 6) = Sheets("Feuil2").Cells(12, num_col)
Sheets("Feuil1").Cells(f_ville, 6) = Sheets("Feuil2").Cells(13, num_col)
Sheets("Feuil1").Cells(f_code_postal, 6) = Sheets("Feuil2").Cells(14, num_col)
Sheets("Feuil1").Cells(f_CC, 6) = Sheets("Feuil2").Cells(16, num_col)
Exit Sub
Else
num_col = num_col + 1
End If
Wend
End Sub
Malheureusement VBA m'annonce une erreur d'exécution "9" à la ligne While (ligne en gras).
Pouvez vous, s'il vous plait, me dire où je me suis trompée?
Cordialement
A voir également:
- Erreur d'éxécution 9
- Erreur 0x80070643 - Accueil - Windows
- Iptv erreur de lecture - Forum TV & Vidéo
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- J'aime par erreur facebook notification - Forum Facebook
11 réponses
Bonjour
A priori, l'erreur 9 est une erreur d'indice. N'aurais-tu pas changé le nom de ta feuille "Feuil1" ?
Pour voir si c'est bien ça l'erreur, ajoute juste avant ton while :
A priori, l'erreur 9 est une erreur d'indice. N'aurais-tu pas changé le nom de ta feuille "Feuil1" ?
Pour voir si c'est bien ça l'erreur, ajoute juste avant ton while :
Dim x Set x = Sheets("Feuil1")
Bonjour Le père et merci de ta réponse,
Dans l'explorateur de projet c'est écrit: Feuil1 (formulaire) et Feuil2 (BdD Client). Je viens d'essayer avec "while sheets ("formulaire").Cells (f_client, 6) <> "" et de remplacer tout le reste sur la page mais c'est toujours le même message d'erreur.
Dans l'explorateur de projet c'est écrit: Feuil1 (formulaire) et Feuil2 (BdD Client). Je viens d'essayer avec "while sheets ("formulaire").Cells (f_client, 6) <> "" et de remplacer tout le reste sur la page mais c'est toujours le même message d'erreur.
oups excuse moi je n'avais pas vu la fin de ton message, je recommence alors!!! désolée c'est dur le lundi matin ^^
Alors après essai, maintenant l'erreur s'est déplacée c'est sur le "Set x = Sheets("Feuil1")" qu'est l'erreur "9". ça veut dire que tu avais raison et que c'est bien une erreur de nom alors?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est normal que tu n'aies pas vu la fin de mon message je l'ai modifié après coup.
D'après ce que tu écris, tes feuilles ne s'appellent pas "Feuil1" et "Feuil2" mais "formulaire" et "BdD client". Il faut que tu corriges ces noms dans ton code.
Conseil : évite de ré-écrire un nom de feuille 10 fois dans le même script, ça te complique la tâche si tu veux le modifier (pour adapter à une autre feuille, ou simplement parce que le nom ne te plaît plus). Tu peux mettre des références aux feuilles dans des variables :
Et ensuite tu n'utilises plus que tes variables partout où apparaissaient Sheets ("Feuil1") et Sheets("Feuil2"), par exemple :
D'après ce que tu écris, tes feuilles ne s'appellent pas "Feuil1" et "Feuil2" mais "formulaire" et "BdD client". Il faut que tu corriges ces noms dans ton code.
Conseil : évite de ré-écrire un nom de feuille 10 fois dans le même script, ça te complique la tâche si tu veux le modifier (pour adapter à une autre feuille, ou simplement parce que le nom ne te plaît plus). Tu peux mettre des références aux feuilles dans des variables :
Dim fFormul as WorkSheet,fBdd as WorkSheet Set fFormul=Sheets("formulaire") Set fBdd=Sheets("BdB Client")
Et ensuite tu n'utilises plus que tes variables partout où apparaissaient Sheets ("Feuil1") et Sheets("Feuil2"), par exemple :
fFormul.Cells(f_pays, 6) = fBdd.Cells(11, num_col)
Bonjour Yoda,
Oui mais il y a la condition while: Num_col est incrémenté tant que la cellule n'est pas vide mais dès que cela dépasse le tableau elle est vide donc la boucle s'interrompt non?
Merci de ta réponse en tous cas
Oui mais il y a la condition while: Num_col est incrémenté tant que la cellule n'est pas vide mais dès que cela dépasse le tableau elle est vide donc la boucle s'interrompt non?
Merci de ta réponse en tous cas
Le père, merci beaucoup pour ton message ça a marché et pour le premier nom ça s'est tout affiché!!! Je pense que tous mes collègues ont pris peur en m'entendant crier "ça marche!!!!"
Manque de chance quand je change le nom du client ça marche plus...
Maintenant j'ai une erreur "1004" (erreur définie par l'application ou par l'objet) sur la ligne if fFormul.Cells(f_client, 6) = fBdd.Cells (10, num_col) then
Manque de chance quand je change le nom du client ça marche plus...
Maintenant j'ai une erreur "1004" (erreur définie par l'application ou par l'objet) sur la ligne if fFormul.Cells(f_client, 6) = fBdd.Cells (10, num_col) then
Tu tombes maintenant dans l'erreur annoncée par Yoda.
Si ton 'if' n'est jamais vérifié, tu augmentes num_col jusqu'à ce qu'il déborde...
Il faut mettre une autre condition pour arrêter ta recherche avant.
Je réfléchis à cette condition (je ne connais pas très bien VBA) et je reviens
Si ton 'if' n'est jamais vérifié, tu augmentes num_col jusqu'à ce qu'il déborde...
Il faut mettre une autre condition pour arrêter ta recherche avant.
Je réfléchis à cette condition (je ne connais pas très bien VBA) et je reviens
Comme je suppose que tu ne veux pas aller au delà de la zone où fBdd.Cells (10, num_col) est vide, il faut détecter la première colonne vide de la ligne 10 et s'y arrêter.
Dim Limite ... Limite=fBdd.Range("IV10").End(xlToLeft).Column ' en principe, IV10 est la dernière cellule de la ligne 10 ... Else num_col = num_col + 1 If num_col > Limite then exit sub End If
Excuse moi mon ordinateur avait perdu le réseau, impossible de me reconnecter... Donc je l'ai rallumé et là je relance excel et ça marche! Je n'ai même pas encore fait les modifications que tu m'as dit plus haut (je vais les faire quand même parce qu'on est jamais trop prudent!) en tous cas tout marche et pour tous les noms!!!
Un grand grand grand merci pour ton aide et ta patience!!!
Je vais enfin pour avoir avancer un peu! 1 semaine pour une macro je commençais à désespérer -_-' merci merci merci de m'avoir aidée!!!
Un grand grand grand merci pour ton aide et ta patience!!!
Je vais enfin pour avoir avancer un peu! 1 semaine pour une macro je commençais à désespérer -_-' merci merci merci de m'avoir aidée!!!