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

Excel Discussion :

Entrer des données dans les cellules d'un tableau excel en évitant certaines lignes de ce tableau


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Entrer des données dans les cellules d'un tableau excel en évitant certaines lignes de ce tableau
    Bonjour

    Je souhaiterais distribuer sur un planning de facon aléatoire 20 croix comme sur l'exemple proposé par SilkyRoad en 2008, Toutefois je bloque .....:car lorsqu'un collègue est absent je mets une donnée sur la ligne correspondante en dehors du tableau(ici colonne k par ex) , et je voudrais que la répartition évite cette ligne ..et ce pour chaque collègue absent
    merci de votre aide .

    Les lignes du tableau correspondent au nom des agents et les colonnes au Heurs travaillées

    Voici la base Crée par SilkyRoad
    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
    Sub Test()
        RemplissageAleatoire Range("A1:J10"), 20
    End Sub
     
     
    Sub RemplissageAleatoire(Plage As Range, NbCroix As Integer)
        Dim Tableau As Collection
        Dim Cell As Range
        Dim i As Integer, j As Integer
     
        'Vérifie si le nombre de cellules est supérieur au nombre de
        'croix à insérer.
        If Plage.Cells.Count < NbCroix Then Exit Sub
     
        'suppression des anciennes données
        Cells.Clear
        Plage.Interior.ColorIndex = 7
     
        Set Tableau = New Collection
        For Each Cell In Plage
            Tableau.Add Cell.Address
        Next Cell
     
     
        For j = 1 To NbCroix
            Randomize
            DoEvents
            i = Int((Tableau.Count * Rnd)) + 1
     
            Range(Tableau(i)) = "x"
            Tableau.Remove i
            DoEvents
        Next j
     
    End Sub

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Je pense que dans ton cas, il faut gérer cela au niveau de l'argument Plage fournis à la fonction
    Dans l'exemple ci dessous on construira la plage en excluant les colonnes qui ne sont pas vide au niveau de la ligne 1

    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
    Dim i As Integer
    Dim Rg As Range
     
    For i = 1 To 12
        If Cells(1, i).Value = "" Then
            'Ajoute la colonne dans la plage
            If Rg Is Nothing Then
                Set Rg = Range(Cells(2, i), Cells(10, i))
            Else
                Set Rg = Union(Rg, Range(Cells(2, i), Cells(10, i)))
            End If
        End If
    Next i
     
    RemplissageAleatoire rg, 20

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    Bonjour,

    Je pense que dans ton cas, il faut gérer cela au niveau de l'argument Plage fournis à la fonction
    Dans l'exemple ci dessous on construira la plage en excluant les colonnes qui ne sont pas vide au niveau de la ligne 1

    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
    Dim i As Integer
    Dim Rg As Range
     
    For i = 1 To 12
        If Cells(1, i).Value = "" Then
            'Ajoute la colonne dans la plage
            If Rg Is Nothing Then
                Set Rg = Range(Cells(2, i), Cells(10, i))
            Else
                Set Rg = Union(Rg, Range(Cells(2, i), Cells(10, i)))
            End If
        End If
    Next i
     
    RemplissageAleatoire rg, 20

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut c'est presque ça
    Bonjour Jfontaine


    merci pour ton aide ,avec ta solution si la ligne 1 contient une donnée la colonne est ignorée dans la répartition
    mais il me faudrait si la colonne k contient une donnée ("abs"par exemple)éviter la ligne de la donnée. les noms de mes collègues sont classées en colonne et mes tranches horaires sur la premiere ligne .par avance merci

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Voici le fichier qui pose probleme
    Bonjour

    Pour mieux exposer ma demande je joins l'ébauche du fichier excel qu'il me faudrait....... merci
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Ci dessous le code modifié.
    En espérant que cela réponde à ton besoin

    J'ai modifié le code de la fonction aussi

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub Test()
     
     
    Dim i As Integer
    Dim Rg As Range
     
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Range("J" & i).Value = "" Then
            'Ajoute la ligne dans la plage
            If Rg Is Nothing Then
                Set Rg = Range(Cells(i, 2), Cells(i, 9))
            Else
                Set Rg = Union(Rg, Range(Cells(i, 2), Cells(i, 9)))
            End If
        End If
    Next i
     
     
    RemplissageAleatoire Rg, 20
     
    '    RemplissageAleatoire Range("A1:J10"), 20
    End Sub
     
     
    Sub RemplissageAleatoire(Plage As Range, NbCroix As Integer)
        Dim Tableau As Collection
        Dim Cell As Range
        Dim i As Integer, j As Integer
        Dim intCel As Integer
     
        'Vérifie si le nombre de cellules est supérieur au nombre de
        'croix à insérer.
        If Plage.Cells.Count < NbCroix Then Exit Sub
     
        'suppression des anciennes données
        Plage.ClearContents
        Plage.Interior.ColorIndex = 7
     
    '    Set Tableau = New Collection
    '    For Each Cell In Plage
    '        Tableau.Add Cell.Address
    '    Next Cell
     
     
        For j = 1 To NbCroix
            Randomize
            DoEvents
            i = Int((Plage.Cells.Count * Rnd)) + 1
     
            For Each Cell In Plage
                intCel = intCel + 1
                If intCel = i Then
                    Cell.Value = "x"
                End If
            Next
            intCel = 0
            DoEvents
        Next j
     
    End Sub

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut ça bloque
    [excel 2007]
    Bonsoir J Fontaine

    Merci encore pour ton aide ,on y est presque
    la macro bloque "erreur 91" variable objet ou variable de bloc With non définie
    Que dois je faire ???

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Encore merci
    Bonjour J Fontaine

    Le dernier message est à oublier , Ce matin au bureau , j'ai resaisie la macro sur mon PC professionnel ===après quelques réglages ça marche.........

    Merci pour ta réactivité à bientôt

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

Discussions similaires

  1. Impossible d'entrer des données dans les formulaires avec IE 6
    Par TheSpaceInvader dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 03/08/2009, 15h19
  2. Réponses: 14
    Dernier message: 12/04/2007, 17h46
  3. Réponses: 3
    Dernier message: 04/04/2007, 14h18
  4. Réponses: 17
    Dernier message: 22/09/2006, 17h34
  5. JTable avec des JPanel dans les cellule
    Par pigpen dans le forum Composants
    Réponses: 11
    Dernier message: 13/04/2006, 19h58

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