bidule2409
Messages postés23Date d'inscriptionmercredi 1 juin 2005StatutMembreDernière intervention28 février 2015
-
1 nov. 2007 à 17:34
cs_Frederic45
Messages postés60Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention30 mars 2010
-
3 nov. 2007 à 09:32
Bonjour à tous,
Voilà, je suis en train de bosser sur un projet assez gros avec de l'Access, Excel, Business Object..., et j'ai quelques questions auxquelles je ne trouve pas de réponse.
Tout d'abord, je voulais savoir si, dans Excel, il y avait moyen de stocker toutes les procédures et fonctions sans passer par "Perso.xls".
Puis, je voulais savoir si la fonction "RechercheV" pouvait se faire sur plusieurs critères.
Est-il possible avec VBA, d'ouvrir un fichier grâce à une boîte de dialogue, et existe-t-il un moyen de créer une boîte de dialogue permettant de sélectionner une plage de cellules (comme lorsque l'on sélectionne un tableau pour créer un tableau croisé dynamique par exemple).
Dernière petite question, est-il possible grâce à VBA de créer une icône tel qu'une tête souriante, neutre aigri...?
En tout cas, merci pour votre aide qui me sera très précieuse.
bidule2409
Messages postés23Date d'inscriptionmercredi 1 juin 2005StatutMembreDernière intervention28 février 2015 1 nov. 2007 à 19:44
J'en ai oublié une petite dernière.
Je souhaite supprimer les colonnes si aucune des cellules de celles-ci n'ont de valeur.
Pour l'instant, j'ai ce code :
Sub colonne_vide()
For i = 1 To DerniereColonne
If Cells(1, i).Value = "" Then
Cells(1, i).EntireColumn.Delete Shift:=xlToLeft
DerniereColonneEnCours = Range("Z1").End(xlToLeft).Column
If i >= DerniereColonneEnCours Then Exit Sub
i = i - 1
End If
Next i
End Sub
Mais là, il ne supprime que les colonnes qui n'ont pas de valeur uniquement dans la première cellule.
Comment faire pour qu'il balaie l'ensemble des cellules de cette colonne ???
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 2 nov. 2007 à 00:34
Plutôt que Perso.xls, tu as la possibilité de sauvegarder tes macros en xla (macro complémentaire)
Pour la RechercheV, ça dépend... tu peux concaténer plusieurs cellules sur une feuille et faire une RechercheV sur une concaténation de plusieurs valeurs...
Pour ouvrir une boîte de dialogue, il y a Dialogs que tu peux regarder. Il y a aussi Application.GetOpenFilename pour ouvrir un fichier.
Pour ton bout de code, il te faut 2 boucles imbriquées.
Une qui lit de bas en haut ou du haut vers le bas, puis celle que tu as qui lit de gauche à droite.
cs_Frederic45
Messages postés60Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention30 mars 2010 2 nov. 2007 à 12:31
Bonjour à tous
Bonjour bidule2409, MPi
En complément de la réponse de MPi :
- 1 - pour la rechercheV, c'est possible, tout dépend ce que tu veux récupérer, et formule ou VBA ?
- 2 - ouverture de fichier en VBA, oui, sélection de plage à vérifier, mais est ce toujours la même plage ?
- 3 - icône : peut être, mais pourquoi en VBA ?
- 4 - suppression :
Sub supp()
DerniereColonne = Range("iv1").End(xlToLeft).Column
For i = 1 To DerniereColonne
masomme = Application.WorksheetFunction.CountA(Columns(i))
If Application.WorksheetFunction.CountA(Columns(i)) = 0 Then
Columns(i).EntireColumn.Delete
i = i - 1
End If
Next i
End Sub
bidule2409
Messages postés23Date d'inscriptionmercredi 1 juin 2005StatutMembreDernière intervention28 février 2015 2 nov. 2007 à 12:44
Salut et tout d'abord, merci pour vos réponses.
Pour la fonction rechercheV, je souhaiterai la programmer sous VBA, j'arrive à faire une fonction "simple", mais pas une recherche multicritères.
En fait, j'ai une base de données sous forme tableau, et ce que je souhaite, c'est récupérer des infos sur les employés. Ce que j'aimerai, c'est lorsque je saisie un nom, si plusieurs employés ont le même nom, Excel m'affiche un message d'avertissement et me demanderait, par exemple, de saisir en plus le prénom. Si 2 personnes ont le même nom et le même prénom (rare, je sais, mais je préfère voir toutes les éventualités), Excel me demanderait alors une autre renseignement.
Pour la sélection de plage, ça ne sera pas toujours la même plage. J'ai essayé de trouver des petites choses, mais pas de résultat.
Pour l'enregistrement d'un document en XLA, ça marche pas mal, j'arrive à récupérer mes fonctions mais je ne trouve pas mes procédures !
Pour ce qui est des icônes, ça serait par exemple, pour des messages d'erreur ou d'avertissement.
Et un grand merci pour le code de suppression, c'est super !!
Merci de votre aide.
Bidule2409
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Frederic45
Messages postés60Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention30 mars 2010 2 nov. 2007 à 14:29
Re
Pour rechercheV, je pense qu'il faudrait prendre une autre fonction : find peut être
Pour les plages, il faudrait en savoir un peu plus, cad est ce la même plage (ou un choix limité) pour 1 seul fichier , ou est ce aléatoire à chaque fois ?
Pour les xla, il faudrait savoir comment elle est créée, et comment tu appelles tes procédures
Quant aux icônes, une image créée avec un logiciel adapté me parait préférable. Excel peut en créer, mais ce n'est pas formidable
Un petit extrait de ton fichier serait donc le bien venu (attention aux données perso)
PS : la ligne : masomme = Application.WorksheetFunction.CountA(Columns(i)) du code de suppression, n'est pas nécessaire
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 2 nov. 2007 à 23:42
Salut,
Comme Frederic, pour la recherche, j'opterais pour Find plutôt qu'une RechercheV dans la feuille ou dans VBA. Il y a aussi la possibilité d'utiliser tes données comme une base et utiliser ADO pour faire des recherches. Si ton Recordset.Recordcount > 1 alors demande d'un autre critère, autre requête SQL et revérification de Recordcount... jusqu'à ce qu'un seul enregistrement ait été trouvé.
Pour la sélection de plage, c'est pas très clair... tu pourrais afficher ton propre UserForm en mode Modeless qui te permettrait de sélectionner une plage tout en conservant le Userform affiché.
Pour les fichiers xla, tu dois les cocher dans le menu Macro complémentaires d'Excel. Pour ce qui est de leur code, tu le trouveras dans l'IDE lors du chargement d'Excel.
Pour l'effacement de lignes ou de colonnes, commence toujours par la fin (bas ou droite)
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 3 nov. 2007 à 01:03
Pour ton rechercheV, tu as peut être moyen de remplacer par un filtre élaboré (Menu Données\Filtre\Filtre élaboré), ça considère ton tableau comme une base de données et te permet d'écrire de "pseudo" requête, comme si tu étais dans l'assistant Requête d'ACCESS.
C'est pas forcément très intuitif au début, mais une fois qu'on a pigé la méthode, ça peut être très intéressant.
Te suffirait de lancer le filtre élaboré par code VBA, de compter le nb de ligne obtenu, et si plus d'une, de relancer le filtre en insérant un critère supplémentaire.
cs_Frederic45
Messages postés60Date d'inscriptionvendredi 26 octobre 2007StatutMembreDernière intervention30 mars 2010 3 nov. 2007 à 09:32
Bonjour à tous
Suite à la réponse de MPi, le code modifié de la suppression :
Sub supp()
DerniereColonne = Range("iv1").End(xlToLeft).Column
For i = DerniereColonne To 1 Step -1 'on part de la gauche, et on décrémente
If Application.WorksheetFunction.CountA(Columns(i)) < 2 Then
Columns(i).EntireColumn.Delete
End If
Next i
End Sub
en partant de la gauche.
J'ai aussi adapté pour supprimer les colonnes qui auraient seulement un titre : ...<2