Erreur d'éxécution 9 [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013
-
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013
-
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

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 :
Dim x
Set x = Sheets("Feuil1")
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013

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.
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013

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 ^^
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013

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?

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 :

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) 
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013

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
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013

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

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

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 
Messages postés
7
Date d'inscription
lundi 27 mai 2013
Statut
Membre
Dernière intervention
27 mai 2013

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!!!
Bonjour,

c'est normal que que ça plante, j'explique:

Si la condition
If Sheets("Feuil1").Cells(f_client, 6) = Sheets("Feuil2").Cells(10, num_col)
n'est jamais verifiée alors num_col est incrémenté de 1 jusqu'à dépasser la valeur maxi pour le nombre de colonnes

A+