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 :

Demande de correction de macro [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    EMPLOYER
    Inscrit en
    Août 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : EMPLOYER
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2016
    Messages : 107
    Par défaut Demande de correction de macro
    Bonjour
    je n'arrive pas a optimiser la macro (ice)dans le module 1
    le but et de transposer dans la plage (M3:T10) les deux plages (W3:AD10,C3:J10)
    en récupérant uniquement les cellules non vide et d'imbriquer la macro ice dans la macro qui se trouve
    dans la feuil 1
    j' ai fais un essai avec Range("M3:T10").Value = Application.Union(Range("W3:AD10"), Range("C3:J10")).Value
    mais j' ai toujours le meme problème il n y a qu'une des deux plages qui arrive dans ("M3:T10")
    voici la macro problematique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ice()
    Range("M3:T10").Value = Range("W3:AD10,C3:J10").Value
    If Range("W3:AD10,C3:J10") <> "" Then
    Range("A1").Select
    End If
    End Sub
    et voici la macro dans la quel je souhaite imbriquer la macro ice
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim isect As Range, c As Range
        Set isect = Intersect(Target, [AC3:AD4,AC6:AD7,AC9:AD10])
        If Not isect Is Nothing Then
            For Each c In Target.Cells
                If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then
                    c.Offset(, -20) = IIf(IsEmpty(c), TimeSerial(7, 30, 0), Empty)
                End If
            Next c
     
        End If
        Set isect = Intersect(Target, [Z3:AA4,Z6:AA7,Z9:AA10])
        If Not isect Is Nothing Then
            For Each c In Target.Cells
                If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then
                    c.Offset(, -20) = IIf(IsEmpty(c), TimeSerial(3, 45, 0), Empty)
                End If
            Next c
        End If
        Set isect = Intersect(Target, [W3:X4,W6:X7,W9:X10])
        If Not isect Is Nothing Then
            For Each c In Target.Cells
                If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then
                    c.Offset(, -20) = IIf(IsEmpty(c), TimeSerial(15, 0, 0), Empty)
                End If
     
            Next c
          End If
          ice
    End Sub
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Merci de donner plus de détails, notamment en mettant le code qui pose problème sur la discussion.

    A lire pour les pièces jointes : https://www.developpez.net/forums/d8...s-discussions/

    Le fait de détailler sur le forum t'apportera plus de contributeurs.

    Philippe

  3. #3
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut le but et de transposer dans la plage (M3:T10) les deux plages (W3:AD10,C3:J10)
    pour moi ta demande n'est pas claire

    tu souhaite mette deux plages de cellules qui font chacune 8 lignes et 8 colonnes

    dans une plage de cellule qui fait 8 lignes et 8 colonnes

    forcément ça déborde.......

    peut tu être plus précis.

    si tu veux mettre toutes les valeurs des 2 plages (W3:AD10,C3:J10)
    dans la plage (M3:T10)

    il faut qu'il y ai au maximum 64 cellules avec des valeurs.

    Avec quelle logique ?????

  4. #4
    Membre confirmé
    Homme Profil pro
    EMPLOYER
    Inscrit en
    Août 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : EMPLOYER
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2016
    Messages : 107
    Par défaut
    Citation Envoyé par a_diard Voir le message
    pour moi ta demande n'est pas claire

    tu souhaite mette deux plages de cellules qui font chacune 8 lignes et 8 colonnes

    dans une plage de cellule qui fait 8 lignes et 8 colonnes

    forcément ça déborde.......

    peut tu être plus précis.

    si tu veux mettre toutes les valeurs des 2 plages (W3:AD10,C3:J10)
    dans la plage (M3:T10)

    il faut qu'il y ai au maximum 64 cellules avec des valeurs.

    Avec quelle logique ?????
    Bonjour et merci pour ton interet

    si une cellule et vide dans la plage (W3:AD10) la meme cellule dans la plage (C3:J10) est automatiquement renseigner
    Et (M3:T10) qui synthétise les deux plages (W3:AD10,C3:J10)

    J’espère être suffisamment explicite

  5. #5
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Bonjour,si j'ai bien compris ton besoin ....

    Je copie la zone Range("W3:AD10") dans Range("M3:T10")

    puis pour les cellules vides dans Range("M3:T10") , je vais chercher la valeur de la cellule dans Range("C3:J10")


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub samchich()
    Range("M3:T10").Value = Range("W3:AD10").Value
    For ligne = 3 To 10
    For colonne = 13 To 20
    If Len(Cells(ligne, colonne).Value) = 0 Then
    Cells(ligne, colonne).Value = Cells(ligne, colonne - 10).Value
    End If
    Next
    Next
    End Sub

  6. #6
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    à La Rache
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub compil()
    tb1 = Range("w3:ad10")
    tb2 = Range("c3:j10")
    For t = 1 To UBound(tb1, 1)
    For u = 1 To UBound(tb1, 2)
    If tb1(t, u) = "" Then tb1(t, u) = tb2(t, u)
    Next
    Next
    Range("m3:t10").Value = tb1
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    EMPLOYER
    Inscrit en
    Août 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : EMPLOYER
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2016
    Messages : 107
    Par défaut
    Citation Envoyé par Daranc Voir le message
    à La Rache
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub compil()
    tb1 = Range("w3:ad10")
    tb2 = Range("c3:j10")
    For t = 1 To UBound(tb1, 1)
    For u = 1 To UBound(tb1, 2)
    If tb1(t, u) = "" Then tb1(t, u) = tb2(t, u)
    Next
    Next
    Range("m3:t10").Value = tb1
    End Sub
    Nom : Erreur.GIF
Affichages : 179
Taille : 58,0 KoNom : Erreur 1.GIF
Affichages : 169
Taille : 31,3 Ko

    Bonjour
    J'ai essayer ca mais erreur !

  8. #8
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    ça met erreur ?
    quel lien avec le code cité?
    qu'est sensé faire la macro qui est en erreur? sil elle doit juste tester si tu as un changement sur ta feuille dans certaines zone , fait lui lancer la macros 2 par un call

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    En outre : la syntaxe de la ligne dénoncée est une véritable aberration ! (et intersect n'a pas grand-chose à voir dans cette aberration !)

  10. #10
    Membre confirmé
    Homme Profil pro
    EMPLOYER
    Inscrit en
    Août 2016
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : EMPLOYER
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2016
    Messages : 107
    Par défaut
    Re
    quant j'appel une macro a la fin de celle ci elle plante !


    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim isect As Range, c As Range
        Set isect = Intersect(Target, [AC3:AD4,AC6:AD7,AC9:AD10])
        If Not isect Is Nothing Then
            For Each c In Target.Cells
                If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then
                    c.Offset(, -20) = IIf(IsEmpty(c), TimeSerial(7, 30, 0), Empty)
                End If
            Next c
     
        End If
        Set isect = Intersect(Target, [Z3:AA4,Z6:AA7,Z9:AA10])
        If Not isect Is Nothing Then
            For Each c In Target.Cells
                If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then
                    c.Offset(, -20) = IIf(IsEmpty(c), TimeSerial(3, 45, 0), Empty)
                End If
            Next c
        End If
        Set isect = Intersect(Target, [W3:X4,W6:X7,W9:X10])
        If Not isect Is Nothing Then
            For Each c In Target.Cells
                If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then
                    c.Offset(, -20) = IIf(IsEmpty(c), TimeSerial(15, 0, 0), Empty)
                End If
     
            Next c
          End If
     
    End Sub

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    n étant un nombre entier > 0
    n mod 1 est forcément toujours égal à 0 (et donc <> 1)
    et
    n mod 2 ne saurait jamais être égal à 2
    cette ligne de code est surprenante, insensée (surtout le mod 1 <> 1 ) et ne donne pas vraiment envie de t'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If c.Row Mod 1 <> 1 And c.Column Mod 2 <> 2 Then

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

Discussions similaires

  1. Demande d’explications sur cette macro et aide pour la modifier.
    Par Sapinator dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/08/2007, 18h17
  2. Demande de corrections d'exercices Turbo Pascal
    Par Helpine dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 16/01/2005, 10h38

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