Infos VBA

bidule2409 Messages postés 23 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 28 février 2015 - 1 nov. 2007 à 17:34
cs_Frederic45 Messages postés 60 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 30 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

8 réponses

bidule2409 Messages postés 23 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 28 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 ???

Gratias 
Bidule2409
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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.

MPi²
0
cs_Frederic45 Messages postés 60 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 30 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

A+

Frédéric
0
bidule2409 Messages postés 23 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 28 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Frederic45 Messages postés 60 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 30 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

Frédéric
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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)

MPi²
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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.

Molenn
0
cs_Frederic45 Messages postés 60 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 30 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

Frédéric
0
Rejoignez-nous