Quelques soucis avec vba

Résolu
safouunette Messages postés 8 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 18 janvier 2011 - 20 oct. 2010 à 15:21
jordane45 Messages postés 37727 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 septembre 2023 - 21 oct. 2010 à 12:16
Bonjour,
J'aimerais bien savoir si il y aura quelqu'un qui pourra me répondre à mes questions concernant le vba sous excel.

1: comment peut-on selectionner plusieures donnees dans une meme colonne à partir d'une liste déroulante sans perdre les données saisies au paravant (qui ne font pas forcément parties de cette liste)?
2: Est ce qu'on a la possibilité de faire plusieurs listes déroulantes liées entre elles, en supprimant les données si on change le choix? (j'ai essayé de travailler avec indirect() mais à un certain moment je ne peux pas nommer une plage de cellule avec un numéro (les noms de plage acceptées à priorie sont ceux qui commencent par une lettre)
3: Comment peut on declancher une macro automatiquement apres la saisie dans une cellule donnée? (j'ai travaillé avec worksheet_change() mais ca parcoure toute la feuille et des fois j'ai une boucle indeterminée)
4: J'ai créé un dossier qui m'archive des fichiers excel sans garder les macros pour gagner un peu de la place. J'ai besoin de parcourir tous les fichiers de cette archive a chaque fois que je saisie des données dans une ligne de ma feuille courante. Je dois comparer les données saisies avec celles de mon archive qui me permettera de voir si j'avais entré les memes informations dans des cellules différentes (pas toute la ligne du saisie mais quelques cellules). NB: les données ne se trouvent forcément pas dans les memes numéros de lignes des deux fichiers. Dans le cas ou les memes données saisies dans les cellules concernées sont entrées, le programme doit m'avertir que j'ai deja eu le meme motif. Il est préférable qu'il me fasse un message dans une colonne en face pour me le signaler.
(je n'ai pas la possibilité de travaillé avec un autre outil autre qu'excel, j'avais la notion des triggers dans ma tete mais je n'arrive toujours pas à voir comment résoudre ca)

NB: je ne sais pas si j'étais claire. J'ai fais mon possible d'éclaircir mon problème. Désolée pour mes fautes d'orthographe. Je ne suis pas d'origine francaise mais je fais de mon mieu de ne pas commetre des fautes

Be The Change you want to see in this world

5 réponses

jordane45 Messages postés 37727 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 septembre 2023 342
21 oct. 2010 à 10:19
Bonjour,

je vais essayer de répondre à certaines de tes questions..

1: comment peut-on selectionner plusieures donnees dans une meme colonne à partir d'une liste déroulante sans perdre les données saisies au paravant (qui ne font pas forcément parties de cette liste)?


Pour celle là, je ne comprend pas exactement ce que tu veux.
Liste déroulante ? > dans ta feuille, dans un userform ? de quel type ?

2: Est ce qu'on a la possibilité de faire plusieurs listes déroulantes liées entre elles, en supprimant les données si on change le choix? (j'ai essayé de travailler avec indirect() mais à un certain moment je ne peux pas nommer une plage de cellule avec un numéro (les noms de plage acceptées à priorie sont ceux qui commencent par une lettre)


Liste déroulante ? > dans ta feuille, dans un userform ? de quel type ?


3: Comment peut on declancher une macro automatiquement apres la saisie dans une cellule donnée? (j'ai travaillé avec worksheet_change() mais ca parcoure toute la feuille et des fois j'ai une boucle indeterminée)


As-tu essayé d'utilisé TARGET ?

Private Sub Worksheet_Change(ByVal Target As Range)
'Target renvoie certaines infos utiles :
MsgBox Target 'renvoie la valeur
MsgBox Target.Row 'renvoie la ligne
MsgBox Target.Column 'renvoie la colonne
MsgBox Target.Address 'renvoie l'adresse complete
End Sub




4: J'ai créé un dossier qui m'archive des fichiers excel sans garder les macros pour gagner un peu de la place. J'ai besoin de parcourir tous les fichiers de cette archive a chaque fois que je saisie des données dans une ligne de ma feuille courante. Je dois comparer les données saisies avec celles de mon archive qui me permettera de voir si j'avais entré les memes informations dans des cellules différentes (pas toute la ligne du saisie mais quelques cellules). NB: les données ne se trouvent forcément pas dans les memes numéros de lignes des deux fichiers. Dans le cas ou les memes données saisies dans les cellules concernées sont entrées, le programme doit m'avertir que j'ai deja eu le meme motif. Il est préférable qu'il me fasse un message dans une colonne en face pour me le signaler.
(je n'ai pas la possibilité de travaillé avec un autre outil autre qu'excel, j'avais la notion des triggers dans ma tete mais je n'arrive toujours pas à voir comment résoudre ca)


Si tu ne sais pas où se situe tes données (N°de Ligne, N° de colonne), tu as possibilité de faire Une recherce en utilisant un "FIND".

tu trouveras ICI un exemple d'utilisation

Bien entendu, à adapter à tes besoins.

Sinon, tu peux toujours utiliser une boulce pour parcourir tes lignes/colonnes jusqu'à trouver ou non l'information recherchée.. (mais c'est plus long ).



Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
safouunette Messages postés 8 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 18 janvier 2011
21 oct. 2010 à 10:55
Bonjour Jordan,

Je te remercie pour le temps que tu as consacré pour répondre à mes questions. Je vais te répondre aux tiennes :)


1: Liste déroulante ? > dans ta feuille, dans un userform ? de quel type ?
J'ai fais une liste à partir de données/validation vu que dans un premier temps ca m'a donné ce que je cherchais. Mais en fin de compte non des fois j'ai besoin de faire plusieurs choix ou ajouter d'autres n'existant pas dans la liste


2: Liste déroulante ? > dans ta feuille, dans un userform ? de quel type ?
Je n'ai pas fais ma liste dans un userform c'est toujours avec ma fameuse validation :)

3: As-tu essayé d'utilisé TARGET ?
Oui je l'ai utilisé mais pas de la meme façon je vais adapter ton code à ce que je cherche. Par contre je n'ai pas mis complete, il va me servir à quoi?

4: Peux tu m'envoyer le code sur le forum vu que ton site ne se trouve pas dans ma liste blanche que j'ai dans mon poste stp?

//Sinon, tu peux toujours utiliser une boulce pour parcourir tes lignes/colonnes jusqu'à trouver ou non l'information recherchée.. (mais c'est plus long ).
j'ai fais un essaie mais ca ne m'a rien donné :)
Sub parcourir()

Dim Fichier As String
Dim dernier As String
Dim dt As String
Dim I As Integer
Dim j As Integer
Fichier = Dir("C:\fichiers du*.xls") 'pour parcourir mon archive qui commencent par le meme nom
Workbooks.Open ("PROG")
Do Until Fichier = ""
If Right$(Fichier, 12) > dt Then
dt = Right$(dt, 12)
dernier = Fichier
For I = 2 To 600 ' j'ai plus que 600 lignes
For j = 2 To 600
' dans ma colonne 3 des deux feuilles comparées je cherche si j'ai au moins une phrase pareille parmis les choix et c'est dans cette cellule ou je veux utiliser
' une liste de choix mutlipltes avec possiblité d'ajouter d'autres données
If Workbooks("PROG").Worksheets("feuil1").Cells(I, 1).Value = Workbooks(Fichier).Worksheets("feuil1").Cells(j, 1).Value _
And Workbooks("PROG").Worksheets("feuil1").Cells(I, 5).Value > Workbooks(Fichier).Worksheets("feuil1").Cells(j, 5).Value _
And (((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*NE PAS COUPER*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*NE PAS COUPER*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*A LAISSER EN INTERMEDIARE*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*A LAISSER EN INTERMEDIARE*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*NE PAS DECCOUPLER*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*NE PAS DECCOUPLER*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*BM1*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*BM1*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*BM2*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*BM2*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*PORTE*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*PORTE*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*US*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*US*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*MD*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*MD*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*SAI*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*SAI*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*SIVE*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*SIVE*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*DIESEL*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*DIESEL*")) _
Or ((Workbooks("PROG").Worksheets("feuil1").Cells(I, 3).Value Like "*CVS*") And (Workbooks(Fichier).Worksheets("feuil1").Cells(j, 3).Value Like "*CVS*"))) Then
MsgBox ("Attention votre restriction a deja eu lieu")
End If
Next j
Next I
Workbooks(Fichier).Close SaveChanges:=False
End If
Fichier = Dir
Loop
Workbooks("PROG").Close SaveChanges:=False
If dernier <> "" Then MsgBox fini
End Sub


Cordialement,
Safouunette :)



Be The Change in this world :)
3
jordane45 Messages postés 37727 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 septembre 2023 342
21 oct. 2010 à 11:31
Bonjour,

pour le FIND, voici le contenu de ma page :

Pour effectuer une recherche dans Excel en Macro, il faut utiliser la fonction find.

La fonction telle qu'elle écrite ci-dessus, retourne True si la recherche a aboutie.
Pour pouvoir utiliser les variables VcLig et VcCol vous devez les déclarer en public dans votre modul principal.


Function cherchC(nomF As String, valCherch As String) As Boolean 
'fonction de recherche... 
'********************************************************** 
' recherche la valeur 'valCherch' et nous indique le 
' N° de ligne et de Colonne où elle se trouve VcLig / VcCol 
'********************************************************** 
Dim vc As Variant 
Sheets(nomF).Activate 
Sheets(nomF).Cells(1, 1).Activate 
Set vc =   Cells.Find(what:=valCherch, lookAt:=xlWhole, After:=ActiveCell, SearchOrder:=xlByColumns, SearchDirection:=xlNext, LookIn:=xlValues, MatchCase:=False, SearchFormat:=False) 
If Not vc Is Nothing Then 
VcCol = vc.Column 
VcLig = vc.Row 
cherchC = True 
End If 
End Function 


En gros, pour appeller la fonction :
A mettre dans ton module principale (si tu n'en as pas, Insertion / Module )
' Variables Publiques à placer Au début du module Principale
Public Vclig As Integer
Public VcCol As Integer

Sub Test_recherche()
' Pour appeller la fonction :
Nom_Feuille   = "Feuil1"
Valeur_cerchee =  "CSV"
Cherc = cherchC(Nom_Feuille, Valeur_cerchee)
If Cherc = True Then 'Si valeur trouvée...
    Numero_Ligne = Vclig ' ligne
    Numero_Colonne =  VcCol ' Colonne
End If
End sub



Pour le TARGET , je t'ai mis des exemples d'utilisation. Tu n'es pas obligé de prendre l'adresse complète, bien entendu.


Pour ce qui est de tes TESTS ( IF .. OR .. )
Je te conseillerai plutot d'utiliser un SELECT CASE .

Exemple d'utilisation :
Sub test()
chiffre   = InputBox("Entrez un chiffre entre 1 et 5", "test SELECT / CASE ")

Select Case chiffre
    Case 1 ' SI chiffre = 1 .;alors faire...
        MsgBox "vous avez écrit : 1"
    Case 2 ' chiffre = 2 ...
        MsgBox " chiffre = 2 "
    Case 3, 4, 5 ' chiffre = 3,4,5
        MsgBox "Chiffre compris entre 3 et 5"
    
    Case Else ' les autres cas..
        MsgBox "Le chiffre indiqué ne correspond pas aux limites demandées.."
End Select

End Sub


Et pour finir, pour ce qui est de la liste déroulante, je te proposerai plutot d'utiliser une liste déroulante (ListBox) (via la boite à outils Contrôls). Dans le propriétés de celle-ci tu peux autoriser le "multiselect" ... Ca devrait pouvoir résoudre tes soucis de selection.


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
safouunette Messages postés 8 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 18 janvier 2011
21 oct. 2010 à 12:02
Encore un très grand merci de tes réponses.
En fin tagret a marché j'avais mis adresse à la place de la colonne avec une boucle for qui parcoure toutes les cellules de la colonnes. Et c'est pour ca ca n'avait pas marché mais la c'est bon :) et comme j'ai besoin de plusieurs déclancheurs je vais m'amuser à faire des target lol :)
je te tienderai au courant si tout marchera et si jamais j'ai un soucis aussi :)
NB: j'éspère que tu n'as pas été dérangé(e)

Safounette

Be The Change in this world :)
3

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

Posez votre question
jordane45 Messages postés 37727 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 septembre 2023 342
21 oct. 2010 à 12:16
Bonjour,
NB: j'éspère que tu n'as pas été dérangé(e)

Pas de soucis... si je n'avais pas eu le temps.. je n'aurais pas répondu

N'hésites pas à recontacter le fofo si tu as des soucis/questions.

Par contre, créé un nouveau sujet s'il s'agit d'une nouvelle question (celle-ci étant passée en résolu, tu as moins de chances que des personnes viennent la regarder et y répondre).

Bonne continuation.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
Rejoignez-nous