Excel VBA base de données
Résolu/Fermé
blackweek
Messages postés
7
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
6 juin 2011
-
Modifié par blackweek le 6/06/2011 à 08:30
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 9 juin 2011 à 13:49
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 9 juin 2011 à 13:49
A voir également:
- Excel VBA base de données
- Liste déroulante excel - Guide
- Formules excel de base - Guide
- Trier des données excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
6 réponses
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 09:33
6 juin 2011 à 09:33
Bonjour,
If coche = wrong
wrong ? plutôt false
"coche" ne sert à rien
manque des end if
mais
personne dans l'entreprise ne s'y connais en VBA, je dois faire en sorte que toute modification soit très simple à faire (donc pas sous VBA).
puis
Voici le code que j'ai commencé
y'a un lézard...
If coche = wrong
wrong ? plutôt false
"coche" ne sert à rien
manque des end if
mais
personne dans l'entreprise ne s'y connais en VBA, je dois faire en sorte que toute modification soit très simple à faire (donc pas sous VBA).
puis
Voici le code que j'ai commencé
y'a un lézard...
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 09:53
6 juin 2011 à 09:53
re,
Surtout qu'avec les mises en formes conditionnelles, tu n'as pas besoin de VBA...
Surtout qu'avec les mises en formes conditionnelles, tu n'as pas besoin de VBA...
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
6 juin 2011 à 09:55
6 juin 2011 à 09:55
Surement, mais il est en stage ^^' A mon avis, en stage prog, et il devra faire un compte-rendu.. Il faudra bien le nourrir avec quelques lignes de codes. ;)
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 09:57
6 juin 2011 à 09:57
mouche du coche
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
6 juin 2011 à 09:58
6 juin 2011 à 09:58
pardon?
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 10:11
6 juin 2011 à 10:11
Ça m'arrive assez souvent d'être jury de stage:
Si il utilise du VBA alors que des formules Excel sont possibles: validation refusée à moins qu'il n'est pas tout dit ce qui est aussi mauvais pour une validation
S'il présente ton code,validation défavorable car peu efficace:variable inutile test if-end if surabondant
donc, tu as la réponse
Si il utilise du VBA alors que des formules Excel sont possibles: validation refusée à moins qu'il n'est pas tout dit ce qui est aussi mauvais pour une validation
S'il présente ton code,validation défavorable car peu efficace:variable inutile test if-end if surabondant
donc, tu as la réponse
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
6 juin 2011 à 10:13
6 juin 2011 à 10:13
Ha mais moi, je ne faisait que rectifier son code.. C'ets son stage, pas le notre, c'est à lui de faire comme il le souhaite, si il a besoin d'aide, il viens poster et on essaira de l'aider...
blackweek
Messages postés
7
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
6 juin 2011
6 juin 2011 à 10:17
6 juin 2011 à 10:17
Merci d'avoir répondu aussi vite.
En fait, c'est plus un boulot d'été et le patron veut que sa base de données fournisseurs et produits soit plus ordonée mais il faut que sa reste simple car à la fin de l'été (donc quand je partirais), plus personne dans l'entreprise ne sera capable de faire des modifications de cette base sous VBE.
Le but est donc que cette bdd puisse être mise à jour (sinon quel intérêt pour une entreprise) mais très facilement pour des personnes qui ne connaissent que les bases d'excel. Donc j'ai pensé que le plus simple serait de faire comme cela et ainsi il n'y aurait que les plages à modifier (pour englober les nouvelles informations).
Sinon c'est vrai que pour les fournisseurs par exemple il suffit d'aller dans la liste des plages (avec leur noms) mais bon faut que ce soit complet et plus ou moins présentable et avec un minimum de pratiques et de connaissances Excel.
Pour ce qui est du:
If Range("A25") = True Then If Range("B25") = True Then coche = True
c'est juste que je ne savais pas trop comment faire référence directement à la case à cocher donc j'ai utilisé ces cellules en tant que valeur reliée à la case à cocher.
Je vais essayer les modifs et vous donner un retour.
En fait, c'est plus un boulot d'été et le patron veut que sa base de données fournisseurs et produits soit plus ordonée mais il faut que sa reste simple car à la fin de l'été (donc quand je partirais), plus personne dans l'entreprise ne sera capable de faire des modifications de cette base sous VBE.
Le but est donc que cette bdd puisse être mise à jour (sinon quel intérêt pour une entreprise) mais très facilement pour des personnes qui ne connaissent que les bases d'excel. Donc j'ai pensé que le plus simple serait de faire comme cela et ainsi il n'y aurait que les plages à modifier (pour englober les nouvelles informations).
Sinon c'est vrai que pour les fournisseurs par exemple il suffit d'aller dans la liste des plages (avec leur noms) mais bon faut que ce soit complet et plus ou moins présentable et avec un minimum de pratiques et de connaissances Excel.
Pour ce qui est du:
If Range("A25") = True Then If Range("B25") = True Then coche = True
c'est juste que je ne savais pas trop comment faire référence directement à la case à cocher donc j'ai utilisé ces cellules en tant que valeur reliée à la case à cocher.
Je vais essayer les modifs et vous donner un retour.
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
Modifié par Ctesias le 6/06/2011 à 10:22
Modifié par Ctesias le 6/06/2011 à 10:22
Donc si je comprend bien:
If Range("A25") = True Then If Range("B25") = True Then coche = True
veux dire :
-Si Cellule A25 est remplie, alors la case est coché?
Dans ce cas, tu devrais plutot ecrire: If Cells(25,1).value <> "" then...
Important: Dans ton code, pense à bien l'aéré. Il n'y a rien de plus énervant que de lire un code en "bloc".
De plus, comme l'a dit michel_m plus haut, essai d'oublier les if end if en abondance :s
If Range("A25") = True Then If Range("B25") = True Then coche = True
veux dire :
-Si Cellule A25 est remplie, alors la case est coché?
Dans ce cas, tu devrais plutot ecrire: If Cells(25,1).value <> "" then...
Important: Dans ton code, pense à bien l'aéré. Il n'y a rien de plus énervant que de lire un code en "bloc".
De plus, comme l'a dit michel_m plus haut, essai d'oublier les if end if en abondance :s
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 10:24
6 juin 2011 à 10:24
ET si tu nous disais précisément ce que tu veux faire ? actuellement, tu nous parles de l'environnement humain de ta boite, ce qui nous permet pas de te donner un coup de main
blackweek
Messages postés
7
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
6 juin 2011
6 juin 2011 à 10:33
6 juin 2011 à 10:33
Non pas vraiment, ce que je veux faire c'est:
d'abord choisir quel est le facteur de recherche à partir d'une liste déroulante puis choisir ce que je veux trouver (informations sur un produit ou sur un fournisseurs).
Par exemple:
-je coche la 1ère ligne (recherche par produits; disons le produit qui s'appelle A3)
puis je coche la 4ème ligne (détails produits), je veux donc que le bouton rechercher me redirige vers l'onglet produits et me sélectionne la ligne correspondant au produit appelé A3 (donc ligne 6)
-je coche la 1ère ligne (recherche par produits; disons le produit qui s'appelle A3)
puis je coche la 3ème ligne (détails fournisseurs), je veux donc que le bouton recherche me redirige vers l'onglet infos et me sélection la ligne correspondant au fournisseur du produit appelé A3 (donc ligne 4)
Sinon j'ai mis le Else et sa beug, il me dit "erreur de compilation, Else sans if"
sachant que j'ai mis le Else juste avant le set result comme vous l'avez indiqué.
d'abord choisir quel est le facteur de recherche à partir d'une liste déroulante puis choisir ce que je veux trouver (informations sur un produit ou sur un fournisseurs).
Par exemple:
-je coche la 1ère ligne (recherche par produits; disons le produit qui s'appelle A3)
puis je coche la 4ème ligne (détails produits), je veux donc que le bouton rechercher me redirige vers l'onglet produits et me sélectionne la ligne correspondant au produit appelé A3 (donc ligne 6)
-je coche la 1ère ligne (recherche par produits; disons le produit qui s'appelle A3)
puis je coche la 3ème ligne (détails fournisseurs), je veux donc que le bouton recherche me redirige vers l'onglet infos et me sélection la ligne correspondant au fournisseur du produit appelé A3 (donc ligne 4)
Sinon j'ai mis le Else et sa beug, il me dit "erreur de compilation, Else sans if"
sachant que j'ai mis le Else juste avant le set result comme vous l'avez indiqué.
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
6 juin 2011 à 10:37
6 juin 2011 à 10:37
as-tu rajouté des end if?
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 11:07
6 juin 2011 à 11:07
puisque tu tiens à du VBA malgré que ton patron n'en veuille pas...
proposition ton code modifié:
pour ce qui est des autres choix tu as intér^t à installer 2 autres cellules liées
proposition ton code modifié:
Sub cac() Dim variable As String Dim lig As Byte With Sheets("recherche") variable = .Range("D4").Value If .Range("A25") And .Range("B25") Then With Sheets("produits") lig = .Range("A1:I27").Find(variable, .Range("A3"), xlValues).Row .Range(.Cells(lig, "A"), .Cells(lig, "I")).Select .Activate End With Else MsgBox "case non cochée" End If End With End Sub
pour ce qui est des autres choix tu as intér^t à installer 2 autres cellules liées
blackweek
Messages postés
7
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
6 juin 2011
6 juin 2011 à 11:10
6 juin 2011 à 11:10
Ok j'ai modifié le code et sa fonctionne:
Ce que j'aimerais maintenant c'est que quand je lance ma macro, si un des deux boutons n'est pas coché le message "case non cochée" apparait (ce qui est déjà le cas) et si mes deux cases sont cochées (recherche par "produits"; disons "A8") et, information désirée: détails produits), je me retrouve sur l'onglet "produits" et excel ayant selectioné la ligne correspondante au produit sélectioné via la liste déroulante (donc ici la ligne qui correspondant au produit appelé "A8" est la ligne 11)
Sub cac() Sheets("recherche").Activate Dim variable Dim result As Range variable = Range("D4").Value If Range("A25") = True And Range("B25") = True Then coche = True End if If coche = False Then MsgBox "case non cochée" Else Set result = Sheets("produits").Range("A1:I27").Find(variable, LookIn:=xlValues) End If End Sub
Ce que j'aimerais maintenant c'est que quand je lance ma macro, si un des deux boutons n'est pas coché le message "case non cochée" apparait (ce qui est déjà le cas) et si mes deux cases sont cochées (recherche par "produits"; disons "A8") et, information désirée: détails produits), je me retrouve sur l'onglet "produits" et excel ayant selectioné la ligne correspondante au produit sélectioné via la liste déroulante (donc ici la ligne qui correspondant au produit appelé "A8" est la ligne 11)
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
Modifié par Ctesias le 6/06/2011 à 11:17
Modifié par Ctesias le 6/06/2011 à 11:17
Et bien je pense que tu dois pouvoir le faire de la meme facon que ton premier code ;)
Sinon, tu peut faire un :
Je ne suis aps sur que cela marche, il y a surement des modifications à faire.
Sinon, tu peut faire un :
For i = 1 to Range("A65536").End(xlUp).Row If cells(i,1).value = combobox.text then Row(i).select end if next
Je ne suis aps sur que cela marche, il y a surement des modifications à faire.
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
Modifié par michel_m le 6/06/2011 à 11:46
Modifié par michel_m le 6/06/2011 à 11:46
j'ai vraiment l'impression de déranger: faut me le dire, vous pourrez continuer de niveler par le bas ...
il vaut mieux utiliser des boutons radios pour simplifier le code
dernière proposition en attente d'intérêt
il vaut mieux utiliser des boutons radios pour simplifier le code
dernière proposition en attente d'intérêt
blackweek
Messages postés
7
Date d'inscription
lundi 6 juin 2011
Statut
Membre
Dernière intervention
6 juin 2011
6 juin 2011 à 11:58
6 juin 2011 à 11:58
Pour le bouton radio (appelé "case option" sous excel non?) j'ai l'impression qu'une fois sélectioné, on ne peut plus le désélectioner.
Sinon pour ton code au dessus, ya un probleme au niveau du
sa me met: "la méthode select de la classe range a échoué"
Sinon pour ton code au dessus, ya un probleme au niveau du
.Range(.Cells(lig, "A"), .Cells(lig, "I")).Select
sa me met: "la méthode select de la classe range a échoué"
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
6 juin 2011 à 12:04
6 juin 2011 à 12:04
Nomal, il doit lui manquer un chiffre au niveau du A et du I je pense
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
6 juin 2011 à 12:36
6 juin 2011 à 12:36
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci, j'ai presque fini mon code: voici ce que cela donne si ça peut aider pour d'autres:
Voila tout fonctionne correctement sauf à l'endroit indiqué.
Quand je ne met pas
Tout va bien tant que la valeur est trouvée sinon sa beug (forcément car pas d'indication pour ce cas de figure). Donc je veut mettre un message si la valeur n'est pas trouvé avec le "if nothing" mais mon code ci-dessus me génére une erreur 91 "variable objet ou variable bloc with non définie"
Sub cac() Dim variable Dim lig Dim fournisseur Dim vari_able Dim leg If Range("type") = 0 Or Range("info") = 0 Then GoTo erreur variable = Sheets("recherche").Range("D4").Value vari_able = Sheets("recherche").Range("D6").Value '---------------recherche par produits If Range("type") = 1 Then With Sheets("produits") lig = .Columns(1).Find(variable, .Range("A3"), xlValues).Row If Range("info") = 1 Then ' recherche produits .Activate Range(Cells(lig, "A"), Cells(lig, "Z")).Select Else ' recherche fournisseur fournisseur = .Cells(lig, "B") With Sheets("infos") .Activate lig = Columns(1).Find(fournisseur, Range("A3"), xlValues).Row Range(Cells(lig, "A"), Cells(lig, "Z")).Select End With End If End With '--------------recherche par fourniseurs Else If Range("info") = 2 Then ' recherche fournisseur With Sheets("infos") leg = .Columns(1).Find(vari_able, .Range("A3"), xlValues).Row .Activate Range(Cells(leg, "A"), Cells(leg, "Z")).Select End With Else With Sheets("produits") ' recherche produits leg = .Columns(2).Find(vari_able, .Range("B3"), xlValues).Row ' problème ici If leg Is Nothing Then MsgBox "Aucune référence pour ce nom" Else .Activate Range(Cells(leg, "A"), Cells(leg, "Z")).Select End If End With End If End If Exit Sub erreur: MsgBox "choix non effectués", vbCritical End Sub
Voila tout fonctionne correctement sauf à l'endroit indiqué.
Quand je ne met pas
If leg is nothing then Msgbox "Aucune référence pour ce nom" Else End if
Tout va bien tant que la valeur est trouvée sinon sa beug (forcément car pas d'indication pour ce cas de figure). Donc je veut mettre un message si la valeur n'est pas trouvé avec le "if nothing" mais mon code ci-dessus me génére une erreur 91 "variable objet ou variable bloc with non définie"
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
9 juin 2011 à 11:08
9 juin 2011 à 11:08
Bonjour
vari_able ????
m^me punition un peu + haut
vari_able ????
m^me punition un peu + haut
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
9 juin 2011 à 11:54
9 juin 2011 à 11:54
effectivement, excuses moi
le choix de vari_able et de variable est un peu casse-g....
difficile de dire
pour ma part avec find je fais plutôt ceci (ce n'est pas une obligation) car j'ai souvent eu des pb avec ce "If leg Is Nothing Then "
le choix de vari_able et de variable est un peu casse-g....
difficile de dire
pour ma part avec find je fais plutôt ceci (ce n'est pas une obligation) car j'ai souvent eu des pb avec ce "If leg Is Nothing Then "
With Sheets("produits") If Application.CountIf(.Columns(2), vari_able) > 0 Then leg = .Columns(2).Find(vari_able, .Range("B3"), xlValues).Row ' problème ici .Activate Range(Cells(leg, "A"), Cells(leg, "Z")).Select Else MsgBox "Aucune référence pour ce nom" End If End With
Ctesias
Messages postés
724
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
36
Modifié par Ctesias le 6/06/2011 à 10:22
Modifié par Ctesias le 6/06/2011 à 10:22
Hello!
A modifier:
En effet: Pas de wrong mais False, et la, en remplacant ton deuxieme if par un else, tu as tous les end if
De plus, es-tu sur que :
je ne comprend pas ce que tu veux dans la ligne... Est-ce que le true correspond à une case non vide?
P.S à michel_m: Je vous ai envoyé un MP, l'avais-vous vu? :s
A modifier:
If Range("A25") = True Then If Range("B25") = True Then coche = True If coche = False Then MsgBox "case non cochée" Else Set result = Sheets("produits").Range("A1:I27").Find(variable, LookIn:=xlValues) End if End If End If
En effet: Pas de wrong mais False, et la, en remplacant ton deuxieme if par un else, tu as tous les end if
De plus, es-tu sur que :
MsgBox "case non cochée"marche et que ca ne soit pas plutot
MsgBox ("case non cochée")?
Dim variablePas de string ou integer?
If Range("A25") = True Then If Range("B25") = True Then coche = True
je ne comprend pas ce que tu veux dans la ligne... Est-ce que le true correspond à une case non vide?
P.S à michel_m: Je vous ai envoyé un MP, l'avais-vous vu? :s
6 juin 2011 à 09:52