Aide pour la création d'une fonction VBA
Résolu/Fermé
Estelle 68*
Messages postés
7
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2008
-
20 juin 2008 à 14:47
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 - 25 juin 2008 à 11:28
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 - 25 juin 2008 à 11:28
A voir également:
- Aide pour la création d'une fonction VBA
- Fonction si et - Guide
- Creation compte gmail - Guide
- Création compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Création organigramme - Guide
14 réponses
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
21 juin 2008 à 12:19
21 juin 2008 à 12:19
Bonjour Estelle,
a priori, si tu as réussi à retrouver le n° de carte avec une fonction VLookUp, tu as fait le plus dur !
Pour retrouver les autres éléments, tu n'as plus qu'à faire varier le 3è argument de ta fonction (celui qui correspond au n° de la colonne dans la plage de données) : 1 pour le n° de carte, 2 pour le matériel, 3 pour les Man Hours, etc.
Si c'est plus compliqué que ça, peux-tu re-préciser ce qui te pose problème ?
A suivre...
a priori, si tu as réussi à retrouver le n° de carte avec une fonction VLookUp, tu as fait le plus dur !
Pour retrouver les autres éléments, tu n'as plus qu'à faire varier le 3è argument de ta fonction (celui qui correspond au n° de la colonne dans la plage de données) : 1 pour le n° de carte, 2 pour le matériel, 3 pour les Man Hours, etc.
Si c'est plus compliqué que ça, peux-tu re-préciser ce qui te pose problème ?
A suivre...
Estelle 68*
Messages postés
7
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2008
23 juin 2008 à 11:57
23 juin 2008 à 11:57
Bonjour,
Merci pour vos conseils j'ai réussi à créer la fonction: Le problème avec la fonction VLOOKUP c'est qu'il faut étendre les cellules pour qu'elle affecte toute la feuille Excel et la ou il n'y a pas de numéro de carte j'obtiens la réponse N/A. J'aurais donc encore des questions car je souhaite automatiser cela de telle sorte que l'utilisateur ait uniquement besoin de rentrer le numéro de carte et que les infos liées apparaissent sans avior besoin de copier a chak fois la ligne de formule vers le bas.
1. Me serait il possible d'automatiser à l'aide d'une macro cad plus de VLOOKUP dans chaque case mais une fonction VBA?
2. Sinon comment faire pour éviter que l'indication N/A apparaisse?
Merci de votre soutient et bon ap.
Merci pour vos conseils j'ai réussi à créer la fonction: Le problème avec la fonction VLOOKUP c'est qu'il faut étendre les cellules pour qu'elle affecte toute la feuille Excel et la ou il n'y a pas de numéro de carte j'obtiens la réponse N/A. J'aurais donc encore des questions car je souhaite automatiser cela de telle sorte que l'utilisateur ait uniquement besoin de rentrer le numéro de carte et que les infos liées apparaissent sans avior besoin de copier a chak fois la ligne de formule vers le bas.
1. Me serait il possible d'automatiser à l'aide d'une macro cad plus de VLOOKUP dans chaque case mais une fonction VBA?
2. Sinon comment faire pour éviter que l'indication N/A apparaisse?
Merci de votre soutient et bon ap.
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 15:03
23 juin 2008 à 15:03
Salut Estelle,
à ce stade-là de la discussion, est-il possible que tu nous montres ton fichier (au moins, une copie sans donnée confidentielle) ? Tu peux le mettre sur http://www.cijoint.fr/
Que veux-tu dire par "automatiser à l'aide d'une macro cad plus de VLOOKUP dans chaque case mais une fonction VBA" ? Tu voudrais avoir directement le résultat dans ta cellule, sans qu'apparaisse la formule, c'est ça ?
Qu'as-tu écrit comme code jusqu'ici ?
Je te demande tout ça parce que c'est plus facile de corriger à partir de ce que tu as déjà fait que de répondre dans le vide.
A suivre...
à ce stade-là de la discussion, est-il possible que tu nous montres ton fichier (au moins, une copie sans donnée confidentielle) ? Tu peux le mettre sur http://www.cijoint.fr/
Que veux-tu dire par "automatiser à l'aide d'une macro cad plus de VLOOKUP dans chaque case mais une fonction VBA" ? Tu voudrais avoir directement le résultat dans ta cellule, sans qu'apparaisse la formule, c'est ça ?
Qu'as-tu écrit comme code jusqu'ici ?
Je te demande tout ça parce que c'est plus facile de corriger à partir de ce que tu as déjà fait que de répondre dans le vide.
A suivre...
Voila c'est fait je viens de déposer le fichier dont l'intitulé est : Material Planning Tool.xls
"Tu voudrais avoir directement le résultat dans ta cellule, sans qu'apparaisse la formule, c'est ça ?
Qu'as-tu écrit comme code jusqu'ici ?"
La réponse est Oui je veux ke le résultat apparaisse sans la formule.. Tu peu voir le code sur le fichier .xls.
En fait la 1ère feuille du fichier contient la base de donnée etsur la 2ème les réponses avec en colonne C la case a compléter. J'aimerais donc ke l'utilisateur rentre le numéro de carte en colonne C et que que toutes les infos correspondantes contenues dans la base de données s'affichent dans les colonnes qui suivent.
"Tu voudrais avoir directement le résultat dans ta cellule, sans qu'apparaisse la formule, c'est ça ?
Qu'as-tu écrit comme code jusqu'ici ?"
La réponse est Oui je veux ke le résultat apparaisse sans la formule.. Tu peu voir le code sur le fichier .xls.
En fait la 1ère feuille du fichier contient la base de donnée etsur la 2ème les réponses avec en colonne C la case a compléter. J'aimerais donc ke l'utilisateur rentre le numéro de carte en colonne C et que que toutes les infos correspondantes contenues dans la base de données s'affichent dans les colonnes qui suivent.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 16:12
23 juin 2008 à 16:12
Chère Estelle,
quand tu as déposé ton fichier sur cijoint.fr, on a dû te donner un lien avec un nom affeux du genre cijoint.fr/cjlink.php?file=cj240726/cij8ZZ4VDTR.xls
C'est ce lien qu'il nous faudrait pour retrouver ton fichier.
I.
quand tu as déposé ton fichier sur cijoint.fr, on a dû te donner un lien avec un nom affeux du genre cijoint.fr/cjlink.php?file=cj240726/cij8ZZ4VDTR.xls
C'est ce lien qu'il nous faudrait pour retrouver ton fichier.
I.
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 16:46
23 juin 2008 à 16:46
Merci Estelle, c'est beaucoup plus clair avec le fichier sous les yeux (bien que je ne comprenne absolument rien à son contenu !)
Je te suggère les quelques modifications suivantes, pour que ça soit (beaucoup) plus pratique :
1° - tu donnes un nom à la plage A:A de ta feuille "MDP Section...". Par exemple, "CODES"
2° - tu donnes un nom à la plage A:K de ta feuille "MDP Section...". Par exemple, "DONNEES"
3° - on va restreindre le contenu de la colonne C de la feuille résultat.
Données/Validation
Autoriser : Liste (ici, tu peux ou non cocher Liste déroulante dans la cellule)
Source : =CODES
D'une part, ça permet de retrouver les codes dans une liste déroulante (ça évite de les saisir) ;
d'autre part, ça évitera les #N/A puisqu'on ne pourra pas saisir un code qui n'existe pas.
A suivre...
Je te suggère les quelques modifications suivantes, pour que ça soit (beaucoup) plus pratique :
1° - tu donnes un nom à la plage A:A de ta feuille "MDP Section...". Par exemple, "CODES"
2° - tu donnes un nom à la plage A:K de ta feuille "MDP Section...". Par exemple, "DONNEES"
3° - on va restreindre le contenu de la colonne C de la feuille résultat.
Données/Validation
Autoriser : Liste (ici, tu peux ou non cocher Liste déroulante dans la cellule)
Source : =CODES
D'une part, ça permet de retrouver les codes dans une liste déroulante (ça évite de les saisir) ;
d'autre part, ça évitera les #N/A puisqu'on ne pourra pas saisir un code qui n'existe pas.
A suivre...
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
23 juin 2008 à 16:55
23 juin 2008 à 16:55
4° - avec VBA, la fonction RECHERCHEV s'écrit presque comme dans Excel :
=Application.WorksheetFunction.VLookup(LaValeur, LaPlage, N°Colonne, False)
Comme on doit l'écrire 10 fois de suite dans 10 colonnes différentes, on va faire une boucle en faisant varier le n° de la colonne. En plus, comme tu le souhaites, on va l'écrire de manière automatique chaque fois que tu saisiras un code dans la colonne C (la colonne 3).
Clique droit sur ton onglet "Résultats"/ Visualiser le code et colle la procédure ci-dessous :
On utilise ici la plage DONNEES, c'est plus pratique que de taper ses coordonnées.
Pour que ça marche, il faudra évidemment Activer les Macros à chaque ouverture de ton classeur.
Est-ce que ça te convient ?
A suivre...
=Application.WorksheetFunction.VLookup(LaValeur, LaPlage, N°Colonne, False)
Comme on doit l'écrire 10 fois de suite dans 10 colonnes différentes, on va faire une boucle en faisant varier le n° de la colonne. En plus, comme tu le souhaites, on va l'écrire de manière automatique chaque fois que tu saisiras un code dans la colonne C (la colonne 3).
Clique droit sur ton onglet "Résultats"/ Visualiser le code et colle la procédure ci-dessous :
Private Sub Worksheet_Change(ByVal Target As Range) If Not Target.Column = 3 Then Exit Sub On Error Resume Next Application.EnableEvents = False Application.ScreenUpdating = False With Target For i = 1 To 10 .Offset(0, i).Value = Application.WorksheetFunction.VLookup _ (.Value, Sheets(1).Range("DONNEES"), i + 1, False) Next i End With Application.EnableEvents = True Application.ScreenUpdating = True End Sub
On utilise ici la plage DONNEES, c'est plus pratique que de taper ses coordonnées.
Pour que ça marche, il faudra évidemment Activer les Macros à chaque ouverture de ton classeur.
Est-ce que ça te convient ?
A suivre...
Estelle 68*
Messages postés
7
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2008
24 juin 2008 à 09:48
24 juin 2008 à 09:48
Bonjour Ivan Hoe,
Oui cela me convient tout a fait ca fonctionne a merveille... Maintenant j'aimerais bien comprendre + en profondeur la manière de formuler les fonctions VBA. Pourrais tu me passer un lien ?
Merci.
Oui cela me convient tout a fait ca fonctionne a merveille... Maintenant j'aimerais bien comprendre + en profondeur la manière de formuler les fonctions VBA. Pourrais tu me passer un lien ?
Merci.
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
24 juin 2008 à 14:49
24 juin 2008 à 14:49
Chouette !
je ne connais pas trop les sites qui traitent de la question. Sur CMM, on recommande souvent www.excel-vba.com
Tu peux aussi taper "VBA Excel" dans un moteur de recherche.
Moi je te recommande l'aide en ligne (touche F1) et tu tapes worksheetfunction dans la rubrique d'aide.
I.
je ne connais pas trop les sites qui traitent de la question. Sur CMM, on recommande souvent www.excel-vba.com
Tu peux aussi taper "VBA Excel" dans un moteur de recherche.
Moi je te recommande l'aide en ligne (touche F1) et tu tapes worksheetfunction dans la rubrique d'aide.
I.
Estelle 68*
Messages postés
7
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2008
24 juin 2008 à 15:50
24 juin 2008 à 15:50
Re Ivan-hoe,
Help! Help!
J'ai presk fini mais j'aurais encore 1 dernière question. J'ai ajouté kk champs supplémentaires dans la base de données (Material, QTY, Unit,...) mais ils ne s'affichent pas tous dans les résultats, juste ceux de la 1ère ligne...
Voici le lien pour accéder au fichier
http://www.cijoint.fr/cjlink.php?file=cj200806/cijkgjam72.xls.
Merci d'avance pour ton aide.
Help! Help!
J'ai presk fini mais j'aurais encore 1 dernière question. J'ai ajouté kk champs supplémentaires dans la base de données (Material, QTY, Unit,...) mais ils ne s'affichent pas tous dans les résultats, juste ceux de la 1ère ligne...
Voici le lien pour accéder au fichier
http://www.cijoint.fr/cjlink.php?file=cj200806/cijkgjam72.xls.
Merci d'avance pour ton aide.
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
24 juin 2008 à 17:10
24 juin 2008 à 17:10
Ah ! ça c'est normal, avec la fonction Recherche, on ne peut aller chercher que la ligne qui correspond au code d'entrée (en l'occurence, la première ligne).
Ce que tu peux faire, c'est rassembler toutes tes données dans une seule ligne :
dans la feuille "MDP...", au lieu d'avoir Cleaner en L51 et Compound NeverSeez en L52, tu mets tout en L51, avec un retour à la ligne (Alt + Entrée) :
Cleaner Alt+Entrée Compound NeverSeez Alt+Entrée Coalescer Bag Alt+Entrée O-Ring
Dans la feuille "Résultats", si tu ajustes bien la largeur de la colonne N, tu devrais retrouver tes données avec les retours à la ligne au bon endroit.
A suivre...
Ce que tu peux faire, c'est rassembler toutes tes données dans une seule ligne :
dans la feuille "MDP...", au lieu d'avoir Cleaner en L51 et Compound NeverSeez en L52, tu mets tout en L51, avec un retour à la ligne (Alt + Entrée) :
Cleaner Alt+Entrée Compound NeverSeez Alt+Entrée Coalescer Bag Alt+Entrée O-Ring
Dans la feuille "Résultats", si tu ajustes bien la largeur de la colonne N, tu devrais retrouver tes données avec les retours à la ligne au bon endroit.
A suivre...
N'y a t il pas un moyen de conserver ces paramètres. En fait si je veux uploader le matériel dans SAP il faut absolument que chaque numéro de pièce corresponde à 1 ligne donc je ne peux pas tout regrouper dans 1 cellule.
Peut etre peut on procéder avec une autre formule que RECHERCHEV??
Peut etre peut on procéder avec une autre formule que RECHERCHEV??
Ivan-hoe
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
309
25 juin 2008 à 11:28
25 juin 2008 à 11:28
Puisque, dans la feuille "résultats", on ne fait que reporter dans l'ordre toutes les colonnes correspondant à une donnée d'entrée, alors oui, tu as raison, on peut très bien ne pas utiliser RechercheV et se contenter de recopier les valeurs.
Ainsi, s'il y a 4 lignes (par exemple, pour le 21-BJJ-02), on recopie dans "Résultats" les 4 lignes de "MPD..."
Modifications apportées :
- on compte le nombre de lignes pour une référence (grâce aux cellules fusionnées)
- quand il y a plusieurs lignes pour une référence, on insère des lignes dans "Résultats" pour ne pas écraser les lignes en-dessous. Par contre, ça fiche le bazar si tu remplaces une référence à 4 lignes par une référence à 1 ligne (fais des essais, tu verras)
- j'ai mis le nombre de colonnes en constante (16), pour éviter de faire une boucle jusqu'à 100 par défaut comme tu l'avais fait. Si le nombre de colonnes change, il faut changer cette constante. Si tu le souhaites, sache que c'est aussi possible de le calculer automatiquement.
J'espère que ça te convient mieux. Je n'ai pas tous les tenants et aboutissants entre les mains mais ce qu'on a fait jusqu'ici, on aurait très bien pu le faire simplement avec un filtre dans la feuille "MDP Section..." !!!!
Ainsi, s'il y a 4 lignes (par exemple, pour le 21-BJJ-02), on recopie dans "Résultats" les 4 lignes de "MPD..."
Modifications apportées :
- on compte le nombre de lignes pour une référence (grâce aux cellules fusionnées)
- quand il y a plusieurs lignes pour une référence, on insère des lignes dans "Résultats" pour ne pas écraser les lignes en-dessous. Par contre, ça fiche le bazar si tu remplaces une référence à 4 lignes par une référence à 1 ligne (fais des essais, tu verras)
- j'ai mis le nombre de colonnes en constante (16), pour éviter de faire une boucle jusqu'à 100 par défaut comme tu l'avais fait. Si le nombre de colonnes change, il faut changer cette constante. Si tu le souhaites, sache que c'est aussi possible de le calculer automatiquement.
J'espère que ça te convient mieux. Je n'ai pas tous les tenants et aboutissants entre les mains mais ce qu'on a fait jusqu'ici, on aurait très bien pu le faire simplement avec un filtre dans la feuille "MDP Section..." !!!!
Option Explicit Const NbCol As Integer = 16 Private Sub Worksheet_Change(ByVal Target As Range) If Not Target.Column = 3 Then Exit Sub Dim Reference As Range, NbPiece As Integer, i As Integer, j As Integer On Error GoTo FIN Application.EnableEvents = False Application.ScreenUpdating = False With Target Set Reference = Sheets(1).Cells.Find(what:=.Value) If Reference Is Nothing Then MsgBox "erreur sur la référence " & .Value Else Sheets(1).Activate: Reference.Select NbPiece = Selection.Rows.Count End If Me.Activate If NbPiece > 1 Then Range(.Offset(1, 0), .Offset(NbPiece - 1, 0)).EntireRow.Insert (xlDown) End If For i = 0 To NbPiece - 1 .Offset(i, 0).Value = .Value For j = 1 To NbCol - 1 .Offset(i, j).Value = Sheets(1).Cells _ (Reference.Row + i, Reference.Column + j).Value .EntireRow.AutoFit Next j Next i End With FIN: Application.EnableEvents = True Application.ScreenUpdating = True End Sub
21 juin 2008 à 12:35
pour compléter la réponse d'Ivan-hoe j'ajouterai :
- à condition d'avoir sélectionné toutes les colonnes où il y a des données à récupérer et pas seulement la colonne A.
- et ne pas oublier de mettre le 4ème parametre à faux (false)
eric