IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

MAJ de plusieurs cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut MAJ de plusieurs cellules
    Bonjour,

    J'ai créé un UserForm avec une ListBox contenant 2 colonnes sans doublons et des contrôles textbox à côté.

    Quand je clique sur un des numéros de ma listbox, les informations s'affichent dans mes TextBox.
    Les informations des premières cellules sont identiques pour le même numéro.
    J'ai rajouté ce code dans mes TextBox pour que quand la valeur change, elle se change aussi dans le fichier excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With ListBox1
        [A:G].Find(.List(.ListIndex, 0), LookIn:=xlValues).Select
        ActiveCell.Offset(0, 2).Value = Me.Usine_Emettrice
        End With
    Par contre, il change que la première ligne et pas les suivantes qui sont identiques.
    Je pense qu'il faut utiliser une fonction Loop mais comment l'utiliser dans ce cas ?

    Merci d'avance

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben un coup de (c'est la touche en haut à gauche du clavier) sur find puis voir aussi.. et l'aide en ligne excel te donne la réponse...:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim c As Range
    Dim firstAddress As String
    With ListBox1
       Set c = [A:G].Find(.List(.ListIndex, 0), LookIn:=xlValues)
       If Not c Is Nothing Then
           firstAddress = c.Address
          Do
             c.Offset(0, 2).Value = Me.Usine_Emettrice
             Set c = [A:G].FindNext(c)
          Loop While Not c Is Nothing And c.Address <> firstAddress
       End If
     End With

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Merci j'vais regardé l'aide en appuyant sur F1 mais il me semblait que c'était que pour une valeur.
    Problème résolu.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut find avec plusieurs cellules
    Bonjour,

    Est'il possible de faire un find avec plusieurs valeurs ?
    Je voudrais faire une recherche des données contenues dans ma cellule A et G.
    Aujourd'hui j'ai ce code là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    With ListBox1
            [A:G].Find(.List(.ListIndex, 0), LookIn:=xlValues).Select
            Me.DateSAP = ActiveCell.Offset(0, 1).Value
            Me.DatRecpetion = ActiveCell.Offset(0, 7).Value
            Me.Usine_Emettrice = ActiveCell.Offset(0, 2).Value
            If ActiveCell.Offset(0, 8).Value = "Oui" Then
                Rep_MAP.Value = True
            Else
                Rep_MAP.Value = False
            End If
            Me.TextBox3 = ActiveCell.Offset(0, 3).Value
            Me.TextBox4 = ActiveCell.Offset(0, 4).Value
            Me.TextBox5 = ActiveCell.Offset(0, 5).Value
        End With
    Ce code est contenue dans une ListBox. Mais ma listBox contient 2 valeurs Cellules A et G.

    Est'il possible de le faire ?

    Merci d'avance

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et c'est quoi la différence avec ;
    MAJ de plusieurs cellules

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    La différence c'est qu'il ne me prend pas en compte la deuxième valeur de ma ListBox.
    La MAJ de plusieurs cellules fonctionne parfaitement sur la première valeur de ma ListBox.

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    va falloir que tu fasse un dessin je comprends rien...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Voilà je résume tout.
    J'ai un UserForm qui contient une ListBox et plusieurs TextBox
    Ma ListBox affiche les valeurs de mes colonnes A et G en retirant les doublons.
    Mes ListBox doivent afficher les infos des cellules adjacentes en tenant comptes de eux données.

    En fait mon soucis et que quand je sélectionne une valeur dans ma ListBox, il affiche les infos mais sans tenir compte de ma deuxième valeur.

    Je te mets le fichier en pièce jointe. Fait un test avec le numéro 300089120 - 1 et 300089120 - 2 dans l'onglet affichage et modification.
    Regarde la date de réception, elle ne change pas alors que dans le fichier Excel elles sont différentes.

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pas le temps ce soir ... mais modifie ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      With ListBox1
             MsgBox "je cherche : " & .List(.ListIndex, 0)
             
        
            [A:G].Find(.List(.ListIndex, 0), LookIn:=xlValues).Select
    et regarde ce que tu cherche dans les colonnes A à G ...(a,b,c,d,e,f,g..)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    J'ai mis ce code là sans utiliser la fonction Find :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub ListBox1_Click()
        Dim a As Range
        Dim b As Range 'ligne de la plage
        Dim yDerLigne As Integer
     
        With Sheets("suivi")
            yDerLigne = .Range("A65535").End(xlUp).Row
            Set a = .Range(.Range("A6"), .Range("AQ" & yDerLigne))
        End With
        For Each b In a.Rows
        With ListBox1
            If .ListIndex < 0 Then Exit Sub
            If .List(.ListIndex, 0) = CStr(b.Cells(1)) And .List(.ListIndex, 1) = CStr(b.Cells(7)) Then
            DateSAP.Value = b.Cells(2)
            DatRecpetion.Value = b.Cells(8)
            Usine_Emettrice.Value = b.Cells(3)
            If b.Cells(9) = "Oui" Then
                Rep_MAP.Value = True
            Else
                Rep_MAP.Value = False
            End If
            MSN_Detect.Value = b.Cells(4)
            Designation.Value = b.Cells(6)
            Plan_Detect.Value = b.Cells(5)
            localisation.Value = b.Cells(10)
            Prob_Suj.Value = b.Cells(11)
            End If
        End With
        Next
     
    End Sub
    Ce code me permet d'afficher les valeurs dans mes textBox en fonction de mes deux valeurs contenues dans ma ListBox mais est'il possible de le faire avec la fonction Find??

  11. #11
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Je n'ai pas bien réussi à saisir le fond du problème...

    Si tu veux faire une recherche de deux valeurs à la fois, tu peux soit les concaténer et faire un find sur la concaténation, soit si les deux valeurs ne se suivent pas faire deux find imbriqués l'un dans l'autre, genre tu cherches la première valeur puis tu regardes si le texte de ta cellule contient également ta deuxième valeur. exemple de procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set cellulecible=rgcellule.find "TaPremièreValeur"
     
    for i=1 to len(cellulecible.value)
       if mid(textecellule,i,len("TaDeuxièmeValeur"))="TaDeuxièmeValeur" then
           'Le code que tu veux exécuter si le double find est vérifié
       endif
    next i
    Ensuite tu fais un findnext pour ta valeur suivante...

    P.S:j'ai écris le code sans excel donc il est possible qu'il y ait certaines fautes mais dans l'ensemble c'est l'idée

    J'espère que c'est ça que tu cherchais

  12. #12
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Muse31
    J...Ce code me permet d'afficher les valeurs dans mes textBox en fonction de mes deux valeurs contenues dans ma ListBox mais est'il possible de le faire avec la fonction Find??
    find c'est la fonction recherche d'excel .. menu edition rechercher..? peu-tu avec cette fonction faire une recherche simultané de deux valeurs différentes dans deux colonnes..?


    tu peu utilser ta méthode .. avec find puis find/next... tu recherche dans la premiére colonne.. et pour chaque valeur trouvé tu teste la seconde colonne en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Dim c As Range
    dim btrouve as boolean
    Dim firstAddress As String
    With ListBox1
       Set c = [A:A].Find(.List(.ListIndex, 0), LookIn:=xlValues)
       If Not c Is Nothing Then
           firstAddress = c.Address
          Do
            if c.Offset(0,6) = .List(.ListIndex, 1) then
              msgbox  "Trouvé " & c.Address 
               btrouve =true
              exit do
             endif
               
    
             Set c = [A:A].FindNext(c)
          Loop While Not c Is Nothing And c.Address <> firstAddress
       End If
     End With
    if btrouve
        c.Offset(1.....' CODE A COMPLETER.. ! Pas besoin D'ActiveCell...
    endif

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    J'ai l'impression que ce n'est pas clair et ça l'ai pas.
    Désolé mais je crois que j'ai mélangé deux choses en même temps.

    bbil : et c'est quoi la différence avec ;
    MAJ de plusieurs cellules
    En fait c'est la même chose. Je vais fermer ce sujet pour réouvrir la MAJ de plusieurs cellules.

    Merci de vous être casser la tête.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Bonjour,

    Désolé mais en fait c'est pas résolu.
    Il fait bien la mise à jour de mes cellules mais sans tenir compte de ma deuxième valeur de ma ListBox.

    Merci d'avance

  15. #15
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Muse31
    ....En fait c'est la même chose. Je vais fermer ce sujet pour réouvrir la MAJ de plusieurs cellules.
    ....
    j'ai fusionné les deux discussions pour avoir l'historique... as tu essayé d'adapter le code 3 post plus haut : http://www.developpez.net/forums/sho...0&postcount=12

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Oui j'ai essayé mais koi que je fasse il ne trouve jamais la valeur.
    La MessBox ne s'affiche jamais.
    Je regarde et j'essaye de voir où sa bug.

  17. #17
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tiens une execution avec un point d'arrêt sur le if .. ma permis (gâce à l'info bulle qui apparaît lorsque tu passe la souris sur une variable ) que le code suivant effectué la comparaison de 1 et "1" ... un nombre et une chaine rajoute Cstr..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          Do
            If CStr(c.Offset(0, 6)) = .List(.ListIndex, 1) Then

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Bon j'ai mis ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        Dim a As Range
        Dim b As Range 'ligne de la plage
        Dim yDerLigne As Integer
     
        With Sheets("suivi")
            yDerLigne = .Range("A65535").End(xlUp).Row
            Set a = .Range(.Range("A6"), .Range("AQ" & yDerLigne))
        End With
        For Each b In a.Rows
        With ListBox1
            If .ListIndex < 0 Then Exit Sub
            If .List(.ListIndex, 0) = CStr(b.Cells(1)) And .List(.ListIndex, 1) = CStr(b.Cells(7)) Then
            b.Cells(2) = DateSAP.Value
            End If
        End With
        Next
    Il fonctionne. Le code proposé avant me modifie qu'une seule celluel.
    Avant de mettre résolu, j'aimerais comprendre ce morceau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Loop While Not c Is Nothing And c.Address <> firstAddress
    Merci

  19. #19
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par Muse31
    Bon j'ai mis ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        Dim a As Range
        Dim b As Range 'ligne de la plage
        Dim yDerLigne As Integer
     
        With Sheets("suivi")
            yDerLigne = .Range("A65535").End(xlUp).Row
            Set a = .Range(.Range("A6"), .Range("AQ" & yDerLigne))
        End With
        For Each b In a.Rows
        With ListBox1
            If .ListIndex < 0 Then Exit Sub
            If .List(.ListIndex, 0) = CStr(b.Cells(1)) And .List(.ListIndex, 1) = CStr(b.Cells(7)) Then
            b.Cells(2) = DateSAP.Value
            End If
        End With
        Next
    Il fonctionne. Le code proposé avant me modifie qu'une seule celluel.
    Avant de mettre résolu, j'aimerais comprendre ce morceau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Loop While Not c Is Nothing And c.Address <> firstAddress
    Merci
    et elle est ou la ligne Loopt dans ce code ..? (évite de tout mélanger..)


    je t'ai déjà répondu .. plus haut mais ( voir ) voici une copie de ce que tu peu voir grâce à la fameuse touche :


    FindNext, méthode
    ...
    Notes

    Lorsque la recherche atteint la fin de la plage de recherche spécifiée, elle revient au début de cette plage. Pour arrêter une recherche lorsqu'elle revient au point de départ, enregistrez l'adresse de la première cellule trouvée, puis comparez l'adresse de chaque cellule ultérieurement trouvée avec l'adresse enregistrée.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Ok Merci. Sinon je n'ai pas utilisé la fonction Loop ou find Next car j'aimerais mieux les comprendre.
    Donc je vais les étudier pour pouvoir les utiliser et peut être améliorer mon code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/03/2006, 14h10
  2. Validation de données Excel sur plusieurs cellules
    Par Civodul4 dans le forum Excel
    Réponses: 3
    Dernier message: 06/03/2006, 11h56
  3. [VBA-E]selectionner plusieurs cellules sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/02/2006, 14h57
  4. saisir plusieurs cellules dans un spreadsheet
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/01/2006, 17h56
  5. Sélectionner plusieurs cellules d'un DBGrid
    Par chill667 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/11/2005, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo