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 :

Index dans For Each


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 15
    Par défaut Index dans For Each
    Bonjour à tous,

    J'ai créé une application qui permet de généré des rapports pour différentes utilisateurs. A l'aide d'une requête, je remplis un tableau suivant des données d'une base de données... mon utilisateur peut sélectionner différentes lignes, et à l'aide d'un bouton, je copie cette ligne et la colle dans une autre feuille de calcul, puis je remplis la cellule F de la ligne par le nom de l'utilisateur.

    J'aimerais empêcher mon utilisateur d'affecter la même ligne à des personnes différentes... pour ce faire, j'ai fais une boucle pour vérifier si la cellule F est renseigner... dans le cas où elle est renseigner, j'ai pensé passer à l'enregistrement suivant dans la boucle ou de supprimé cette enregistrement dans la mémoire.

    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim memCell As Range
     
    Set memCell = Selection
     
    For Each Row In memCell
        If Range("F" & i).Value <> Leer Or Range("F" & i).Value <> Null Then
            MsgBox "Error"
            memCell.Cells.EntireRow.Delete
        End If
    Next Row
    Avec ce code, il me vide toute ma variable memCell!

    Quelqu'un aurait une idée
    Merci
    Franck

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim memCell As Range
    Dim Cell as range 
    Set memCell = Selection
     
    For Each Cell In memCell
        If Range("F" & Cell.row).Value <> Leer Or Range("F" & Cell.row).Value <> Null Then
            MsgBox "Error"
            'memCell.Cells.EntireRow.Delete
        End If
    Next Row
    Que veux-tu supprimer ? Toute la plage sélectionnée ou seulement la ligne de l'erreur ?

    Edit
    N'utilise pas de mot clé en tant que variable. Row en est un que j'ai remplacé par Cell qui n'en est pas un dans Excel.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 15
    Par défaut
    J'aimerais supprimer la ligne de l'erreur de la plage sélectionné, mais pas sur le tableau Excel, dans la variable memCell.

    J'avais aussi pensé passer à l'enregistrement suivant dans la boucle FOR, sans pour autant sortir de la boucle.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En fait, tu souhaites faire un filtre, non ?
    Et si tu nous indiquais simplement la finalité de la chose ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 15
    Par défaut
    Ben non, je ne souhaite pas faire de filtre... Je souhaite supprimer cette selection pour ne pas l'affecter à un autre utilisateur...

    Exemple: un tableau avec 10 lignes... les 5 premiers lignes sont déjà affecter à une personne... le chef sélectionne la ligne 4,5 et 6 pour les affecters à une autre personne... je veux donc que la ligne 4 et 5 soit déselectionner de la sélection ou supprimer de la variable, mais la ligne 6 doit être affectué à la personne qu'il a choisit.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Dim rngCell As Range
    Dim memCell As Range
    Dim rngSelection As Range
    Dim intRow As Integer
    Dim intCol As Integer
     
    Dim i As Integer
     
    i = 2
     
    Set memCell = Selection
     
    For Each cell In memCell
        If Range("F" & cell.Row).Value <> Leer Or Range("F" & cell.Row).Value <> Null Then
            MsgBox "Error"
            'supprimer ce cell
        End If
    Next cell
     
     
    For Each cell In memCell
        Set rngCell = cell
        intRow = rngCell.Row
        If rngCell.Column = 1 Then
            intCol = rngCell.Column
            Set rngSelection = ActiveSheet.Range(Cells(intRow, intCol), Cells(intRow, 5))
     
            rngSelection.Select
     
            Selection.Copy
            Sheets(User).Visible = True
            Sheets(User).Select
            'Check Data
            CheckUserData
            i = n
            Range("A" & i).Select
            ActiveSheet.Paste
            Sheets("Report").Select
            i = i + 1
        End If
     
    Next cell
    Eh voilà toute la procédure.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Le mieux serait que tu masques les lignes concernées.
    Une fois masquées, tu peux sélectionner la plage des lignes visibles avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set Plage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
        'et pour vérifier :
        MsgBox Plage.Address
    Tiens, j'ai testé ça à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub un()
    Set memcell = ActiveSheet.UsedRange
    For Each Cell In memcell
        If Range("F" & Cell.Row).Value = 40 Then 'modifie juste ça
            Cell.EntireRow.Hidden = True
        End If
    Next
        Set Plage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
        MsgBox Plage.Address
    End Sub

  7. #7
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 15
    Par défaut
    Eh merci...j'avais pas pensé à ça!

    Franck

Discussions similaires

  1. [AC-2007] Trier dans "For Each Record"
    Par accessisgood dans le forum Macros Access
    Réponses: 1
    Dernier message: 27/10/2013, 10h30
  2. [XSLT 1.0] XSLT: utilisation de la fonction position() dans <for-each> imbriqués
    Par bernidupont dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/05/2011, 21h33
  3. Identifié la derniere valeur dans for each
    Par roadmender dans le forum VBScript
    Réponses: 2
    Dernier message: 02/06/2010, 16h04
  4. Réponses: 4
    Dernier message: 22/09/2009, 08h04
  5. [XSL-FO] Modifer une structure de tableau dans for-each
    Par serwol dans le forum XSL/XSLT/XPATH
    Réponses: 24
    Dernier message: 17/06/2005, 17h38

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