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 :

modification de cellules dans une plage de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut modification de cellules dans une plage de cellules
    Bonjour à tous…

    J’ai un petit problème dans un programme que je crée en visuak basic excel 2007.
    Voilà, j’ai 2 feuilles, 1 qui me propose un choix entre plusieurs actions à effectuer et l’autre dans laquelle se trouve un tableau en 4 colonnes et x lignes (je rajoute des lignes tous les jours) avec des valeurs dans chaque ligne (aucune case vide)… le tableau commence en b6 avec la ligne b6 correspondant aux intitulés de mes colonnes.
    Une des actions que je souhaite effectuer dans ma première feuille est « modifier une fiche ».
    Pour cela j’ai crée une macro et vu le nombre important de fiche, en début de macro j’ai ceci :

    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
    Sub CAPTURE_MODIFICATION()
     
    'Déclaration des variables
    Dim P As String
    Dim Plage As Range
     
    'Sélection de la feuille données
    Worksheets("Données").Select
     
    'P est la valeur que le filtre automatique prendra en compte dans sa recherche
    P = InputBox("Indiquez le service où vous souhaitez modifier une fiche :", "Modification d'une fiche à partir d'un service")
     
    'Sélection de la cellule C6
    Range("B6").Select
     
    'Filtre automatique dans la colonne b avec comme critère de recherche la valeur P
    ActiveSheet.Range("$B$6:$E$65536").AutoFilter Field:=1, Criteria1:=P
     
    J’ai donc beaucoup moins de fiches après ce filtre et ma fiche à modifier est plus facilement repérable.
    De ce point là je souhaite sélectionner une plage à modifier (c'est-à-dire une ligne de 4 cellules).
    Et je voudrais que si je clic aléatoirement sur la ligne 1, 3, 50 ou 1000, la macro s’exécute en me demandant par quoi je veux remplacer chaque cellule(les une après les autres) de la ligne sélectionnée… j’ai déjà essayé plusieurs cas mais rien ne fonctionne. Dernier essai aujourd’hui avec pour objectif que cela fonctionne pour la première cellule. C’est encore raté..
     
    'Sélection de la plage de cellules
    Set Plage = Application.InputBox("Sélectionnez la ligne à modifier : (début des modifications après validation de la sélection)", "Modification de la fiche", Type:=8)
    A = Plage.Rows.Count
    o = Plage.Columns.Count
     
     
    For o = 1 To 1
    'Demande de renseignement sur le service concerné + insertion dans la nouvelle ligne du tableau
        w = InputBox("entrez le nom du SERVICE", "SERVICE MODIFIE", "----------------")
        Range(Cells(a, o)).Value = w
    Next o
    Merci pour votre aide car je bloque…

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonsoir

    Une solution possible

    A mettre dans le code de la feuille à modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim result As Integer, boucle As Integer
    result = MsgBox("voulez-vous modifier la ligne" & Target.Row, vbYesNo)
    If result = vbYes Then
      For boucle = 1 To 4
        Cells(Target.Row, boucle) = Val(InputBox("Valeur colonne " & boucle, "Valeur colonne " & boucle))
      Next
    End If
    End Sub
    Une fois le tri effectué il faudrait aller sur la feuille à modifier et double cliquer sur une ligne pour lancer ce code.
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci, c'est gentil de ta part.
    mais il subsiste un petit problème, c'est que j'aimerais que cela ne se fasse que lorsque j'active la macro citée dans mon premier post.
    en gros, il faudrait un bout de code à la suite de celle ci qui m'apporte ces modifications.

    merci à tous ceux qui prendront un peu de temps pour m'éclairer...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    Je suis repartis de ton code d'origine que j'ai modifié mais en gardant le inputBox pour le choix de la ligne à modifier, regarde si ça correspond à ton attente.

    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
     
    Sub CAPTURE_MODIFICATION()
     
    'Déclaration des variables
    Dim P As String, boucle As Integer
    Dim Plage As Range, w As Variant
     
    'Sélection de la feuille données
    Worksheets("Données").Select
     
    'P est la valeur que le filtre automatique prendra en compte dans sa recherche
    P = InputBox("Indiquez le service où vous souhaitez modifier une fiche :", "Modification d'une fiche à partir d'un service")
     
    'Sélection de la cellule C6
    Range("B6").Select
     
    'Filtre automatique dans la colonne b avec comme critère de recherche la valeur P
    ActiveSheet.Range("$B$6:$E$65536").AutoFilter Field:=1, Criteria1:=P
     
    'Sélection de la ligne à mofifier
    On Error Resume Next
    Set Plage = Application.InputBox("Sélectionnez la ligne à modifier : (début des modifications après validation de la sélection)", "Modification de la fiche", Type:=8)
    'si l'utilisateur clique sur annuler ça crée une erreur
    On Error GoTo 0
    'si clique sur annuler sortir de la routine
    If Plage Is Nothing Then Exit Sub
    's'il y a plus d'une ligne sélectionné
    If Plage.Rows.Count > 1 Then
      MsgBox "merci de ne selectionner qu'une seule ligne"
      Exit Sub
    End If
     
    For boucle = 1 To 4 'nombre de colonne à modifier
    'Modification de la ligne choisi par l'utilisateur
        w = InputBox("entrez : " & Cells(6, boucle)) 'pour modifier l'intitulé de la modification
        Range(Cells(Plage.Row, boucle)).Value = w
    Next boucle
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous, j'ai fini par trouver la solution, j'ai donc jugé bon de la faire partager pour ceux qui se posent la même question que moi il y a quelque temps...

    d'ailleurs mon code ressemble sensiblement au tien


    grand merci tout de même

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    On Error Resume Next
    Set P = Application.InputBox _
    ("Sélectionnez la première cellule où vous souhaitez effectuer une modification :", Type:=8)
     
        If P = "" Then
     
        MsgBox ("Opération de modification annulée!!")
     
        else
     
        P.Select
     
        l = ActiveCell.Row
        c = ActiveCell.Column
     
            For i = c To 5
     
                If Cells(l, c).Select Then
     
                    With Selection.Font
                        .Color = -16776961
                        .TintAndShade = 0
                    End With
     
                    With Selection.Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 65535
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
     
                    X = InputBox("entrez la nouvelle valeur du critère :" _
                    , "Modification du critère", ActiveCell.Value)
     
                        If X = "" Then
     
                            If ActiveCell = Cells(l, 5) Then
     
                            y = MsgBox("Fin de la modification des critères!!", _
                            vbExclamation + vbOKCancel, "Message")
     
                            Else
     
                            MsgBox ("Passage à la modification du critère suivant!!")
                            End If
     
                            With Selection.Font
                                .ColorIndex = xlAutomatic
                                .TintAndShade = 0
                            End With
                            With Selection.Interior
                                .Pattern = xlNone
                                .TintAndShade = 0
                                .PatternTintAndShade = 0
                            End With
     
                        Else
     
                            Cells(l, c).Value = X
     
                                If ActiveCell = Cells(l, 5) Then
     
                                MsgBox ("Fin de la modification des critères!!")
     
                                End If
     
                            With Selection.Font
                                .ColorIndex = xlAutomatic
                                .TintAndShade = 0
                            End With
     
                            With Selection.Interior
                                .Pattern = xlNone
                                .TintAndShade = 0
                                .PatternTintAndShade = 0
                            End With
     
                        End If
     
                    Else
     
                    End If
     
                    c = c + 1
     
            Next i
     
    End If

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

Discussions similaires

  1. [XL-2007] InputBox pour sélectionner cellule ou une plage de cellules dans une feuille.
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2014, 19h01
  2. [XL-2003] Sélection d'une cellule dans une plage de cellule
    Par amelyfred dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2011, 16h47
  3. Autoriser sélection d'une plage de cellule dans une feuille Excel
    Par philoflore dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2008, 09h49
  4. Trouver une plage de cellule dans une autre plage
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 16/04/2008, 14h27

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