Macro VB

Macro VB - VB/VBA/VBS - Programmation

Marsh Posté le 11-05-2005 à 16:29:18    

salut à tous :)  
 
je cherche a écrire une macro sous excel qui doit faire la chose suivante : j´ai une feuille excel avec une colonne A et une B, et x nombre de ligne  
 
je veux que ma macro me pemette de trouver en fonction de Ax donné, ce qu´il y a a coté en Bx  
 
autrement dit me donner Bx pour tout Ax donné  
je sais pas trop comment m´y prendre..c´est une function? une sub ?   :??:  
 
merci d'avance! :)

Reply

Marsh Posté le 11-05-2005 à 16:29:18   

Reply

Marsh Posté le 11-05-2005 à 17:26:25    

cells(LIGNE, COL) te renverra le contenu de la énieme ligne et énieme colonne
 
si tu veux la colonne suivante : cells(LIGNE, COL +1)

Reply

Marsh Posté le 11-05-2005 à 18:21:52    

merci c'est deja ça :)

Reply

Marsh Posté le 11-05-2005 à 18:27:05    

ben je vois pas trop ce que tu veux faire exactement
mais essaye deja de faire une macro et dis nous où ca plante :)

Reply

Marsh Posté le 11-05-2005 à 18:56:46    

ben je vais donner un exemple : si par exemple dans A1 il y a ecrit "nom" et dans B1 "prenom", je veux une macro qui me donne "prenom" quand je tape "nom"

Reply

Marsh Posté le 11-05-2005 à 20:59:16    

au fait VBA, pas VB

Reply

Marsh Posté le 11-05-2005 à 23:53:49    

Solution pur VBA (sans utiliser les fonctionalités d'Excel):

Sub prenom()
  Dim rNoms As Range
  Dim sNom As String
  Dim vI As Variant
  Set rNoms = Range([A1], [A1].End(xlDown))
  sNom = InputBox("Nom?", "Recherche prénom" )
  For Each vI In rNoms
    If UCase(vI) = UCase(sNom) Then
      MsgBox (vI.Cells(1, 2))
      Exit For
    End If
  Next vI
End Sub


Pas de gestion des erreurs (si le nom n'existe pas, pas de résultat)
Pas de gestion des doublons (Marc Dupont et Pierre Dupont)


Message édité par AlainTech le 11-05-2005 à 23:54:24

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 12-05-2005 à 00:00:40    

Merci :)
j'avais écris ceci :
 
Dim Compteur As Integer, prenom As String
Dim Cel As Range
Set Cel = Range("A1" )
 
Compteur = 1
 
 
Do While Cel.Offset(Compteur) <> ""
    If Cel.Offset(Compteur) = "nom" Then
        Exit Do
    End If
 
    Compteur = Compteur + 1
 
Loop
 
prenom = Cel.Offset(Compteur, 1)
MsgBox "Le prenom de nom est " & prenom
 
-----------------------
le probleme est que je dois ecrire dans ma macro le nom a la place de "nom", puis l'executer pour qu'elle m'affiche le prenom dans une msgbox..or je veux saisir directement sous excel le nom dans une cellule, et qu'une autre cellule me donne le prénom..comment je fais?? :(


Message édité par atmakefka le 12-05-2005 à 00:07:10
Reply

Marsh Posté le 12-05-2005 à 08:13:39    

Dans ce cas, les formules d'Excel font parfaitement l'affaire.
Imaginons que tu tapes le nom en D1 et que tu veuilles le prénom en E1, dans la cellule E1 tu mets cette formule:
 
=RECHERCHEV(D1;A:B;2;FAUX)   (Sur Excel en français)
=VLOOKUP(D1;A:B;2;FALSE)       (Excel en anglais)


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 12-05-2005 à 08:35:47    

Mais, si tu tiens absolument à faire du VBA, tu peux mettre ce code dans ta FEUILLE:
 


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Select Case Target.Address
    Case "$D$1"
      [E1] = Prenom([D1])
  End Select
End Sub
 
Function Prenom(sNom As String) As String
  Dim rNoms As Range
  Dim vI As Variant
  Set rNoms = Range([A1], [A1].End(xlDown))
  For Each vI In rNoms
    If UCase(vI) = UCase(sNom) Then
      Prenom = vI.Cells(1, 2)
      Exit For
    End If
  Next vI
  If Prenom = "" Then
    MsgBox ("Pas trouvé" )
  End If
End Function


 
Mêmes conditions que plus haut et pas de gestion des erreurs.
 
Edit --> Ajout du msgbox si pas trouvé


Message édité par AlainTech le 12-05-2005 à 08:40:57

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 12-05-2005 à 08:35:47   

Reply

Marsh Posté le 12-05-2005 à 18:38:26    

Merci ! :)

Reply

Marsh Posté le 13-05-2005 à 10:05:14    

Rebonjour,  
j'ai encore des problèmes avec un code qui doit faire quelque chose de plus compliqué. Je dois extraire dans une nouvelle feuille le journal d'un utilisateur particulier donné (toutes les colonnes en fait). problème, certains utilisateurs apparaissent plusieurs fois. du coup avec mes essais de code je selectionnai qu'une seul ligne de ces utilisateurs, et je n'arrive pas de toutes façons a copier dans une nouvelle et unique feuille , ca m'en cree une nouvelle a chaque fois. apres il y a des problemes de saut de ligne, et j'en passe:(
la feuille excel ce presente comme ceci
 
http://img95.echo.cx/img95/6123/sanstitre5yr.jpg
 
En esperant que quelqu'un pourra m'aider.. merci
 
 

Code :
  1. Sub extraire_dans_une_nouvelle_feuille_le_journal_d_un_utilisateur_particulier_donné()
  2. Dim nom_utilisateur As Range
  3. Dim login
  4. Dim login_demandé
  5. Set nom_utilisateur = Range([F2], [F2].End(xlDown))
  6. login_demandé = InputBox("Nom d'utilisateur ?" )
  7. For Each login In nom_utilisateur
  8.     If login = login_demandé Then
  9.        login.EntireRow.Select
  10.        Selection.Copy
  11.        Sheets.add
  12.        => ???????
  13.         ElseIf login <> login_demandé Then 
  14.               MsgBox ("Ce nom d'utilisateurou ce login) n'existe pas." )
  15.         Exit For
  16.     End If
  17. Next login
  18. End Sub

Reply

Marsh Posté le 13-05-2005 à 12:17:23    

Ce que je t'ai fait ne correspond pas tout à fait à ce que tu demandais.
En réalité, ça en fait plus.
Je prends toutes les lignes de ta feuille et j'en crée une feuille par utilisateur.
Vois si tu peux en extraire qqch d'utile pour toi.
J'ai nommé la feuille d'origine "Data".

Sub Extract()
  Dim bSheetExists As Boolean  
  Dim iNextRow As Long
  Dim rActivity As Range
  Dim rHeading As Range
  Dim vI As Variant
  Dim vJ As Variant
  Sheets("Data" ).Activate  ' Activer la feuille dont les données vont être
                           ' extraites (feuille "source" )
  Set rActivity = Range([A2], [A2].End(xlDown))  ' Créer un range de la première
                                                 ' colonne
  Set rHeading = Rows(1)  ' Créer un range de l'entête pour pouvoir le copier
  For Each vI In rActivity  ' Parcourir toutes les cellules de la 1e colonne
    bSheetExists = False  ' La feuille recherchée n'est pas encore trouvée
    For Each vJ In Worksheets  ' Parcourir toutes les feuilles
      If vJ.Name = vI.Cells(1, 6) Then  ' Si le nom de la feuille = le contenu de la
                                        ' cellule en 6e colonne de la ligne
        bSheetExists = True  ' La feuille est trouvée
        Exit For             ' et sortie de la boucle de recherche  
      End If
    Next vJ  ' Feuille suivante (si pas eu de sortie avant)
    If bSheetExists Then  ' Si la feuille a été trouvée
      vJ.Activate         ' Activer cette feuille    
    Else                                               ' Si elle n'a pas été trouvée  
      Worksheets.Add After:=Worksheets(Worksheets.Count) ' En créer une et la mettre
                                                         ' derrière les autres
      ActiveSheet.Name = vI.Cells(1, 6)  ' Lui donner comme nom le contenu de la
                                         ' cellule de la 6e colonne de la ligne
                                         ' parcourue par la boucle  
      rHeading.Copy ([A1])  ' Y copier l'entête
    End If
    iNextRow = [A1].SpecialCells(xlLastCell).Row + 1  ' Déterminer la 1ere ligne
                                                      ' vide de la feuille trouvée
                                                      ' ou créee
    vI.EntireRow.Copy (Cells(iNextRow, 1))         ' Y copier la ligne de la feuille
                                                   ' source où la boucle est arrivée
  Next vI  ' Ligne "source" suivante  
End Sub


 
Edit --> Ajout des commentaires


Message édité par AlainTech le 14-05-2005 à 10:35:14

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 13-05-2005 à 12:19:55    

merci :) je vais voir

Reply

Marsh Posté le 13-05-2005 à 12:25:11    

ça marche, mais ca le fait directement. je vais modifier pour que ça soit pour un utilisateur donné. encore merci


Message édité par atmakefka le 13-05-2005 à 12:31:48
Reply

Marsh Posté le 13-05-2005 à 12:25:28    

oups double post :(


Message édité par atmakefka le 13-05-2005 à 12:31:03
Reply

Marsh Posté le 13-05-2005 à 12:36:00    

C'est bien ce que je t'avais dit: ça en fait plus que tu ne demandais.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 13-05-2005 à 12:42:43    

Oui mais faut que j'y arrive par moi même, c'est pour ça, et comprendre aussi ;)

Reply

Marsh Posté le 13-05-2005 à 22:31:21    

Une derniere chose stp, tu pourrais expliquer un peu le prog ? ou commenter ? je ne comprends pas tout :(

Reply

Marsh Posté le 14-05-2005 à 10:36:28    

Voilà, j'ai mis les commentaires.
N'hésite pas à poser des questions sur ce que tu ne comprends pas.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 14-05-2005 à 16:05:06    

merci!
désolé de t'avoir demandé ça mais c'est parceque je n'arrivais pas a modifier le code pour que ce soit pour un utilisateur donné
je vais voir ça, merci :)

Reply

Marsh Posté le 14-05-2005 à 16:22:49    

arf j'y arrive pas je suis nul :(

Reply

Marsh Posté le 14-05-2005 à 22:29:22    

je demande encore votre aide :(

Reply

Marsh Posté le 15-05-2005 à 14:44:21    

bon j'ai reussi, j'aurai peut etre besoin d'aide plus tard encore  
merci :)

Reply

Marsh Posté le 15-05-2005 à 16:54:48    

edit


Message édité par atmakefka le 24-05-2005 à 10:14:17
Reply

Marsh Posté le 16-05-2005 à 16:58:20    

:(

Reply

Marsh Posté le 24-05-2005 à 16:05:56    

lol. Tu ne serais pas en deug MISASHS en 1ere année?

Reply

Marsh Posté le 24-05-2005 à 16:28:18    

J'ai dans l'idée que vous devez vous connaître.
Mêmes posts sur plusieurs forums...


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed