Macro conditionnelle à dupliquer sur plusieurs lignes

milkchris

XLDnaute Nouveau
Bonjour à tous,

Débutante dans l'utilisation des macros, je recherche de l'aide pour le fichier joint.
J'ai créé une macro "de base" en l'enregistrant mais malgré mes recherches sur les forums, je ne trouve pas les informations à ma portée de débutante pour modifier la macro dans la fenêtre VBA et obtenir les résultats suivants :

- Quand je clique sur la case à cocher, si elle devient "Activée" la macro doit s'exécuter mais si je clique à nouveau et qu'elle se désactive, je voudrais que la macro ne s'exécute pas. J'ai essayé avec :
If Sheets("Prospection-AC").Range("E2")="VRAI" Then
...
End If
End Sub
Malheureusement, cela ne fonctionne pas... :(

- De plus, est-il possible que je duplique cette macro sur plusieurs lignes et que la macro s'adapte à la ligne où je suis ? Pour l'instant, j'ai essayé de la dupliquer en tirant sur plusieurs lignes, la macro fonctionne mais les cellules copiées sur ma deuxième feuille sont toujours les cellules A2:B2.

Par exemple, lorsque j'active la case à cocher de la cellule E5, les parties du code qui modifient l'onglet "Prévisionnel-2012" ne doivent pas changer (je veux toujours insérer mes lignes en haut de la page sous la ligne de titre), mais je veux que les données que je copie/colle en A2:B2 de la feuille "Prévisionnel 2012" correspondent aux cellules A et B de la même ligne que la case à cocher dans la page "Prospection-AC" sans avoir à modifier la macro à chaque fois car ma base de donnée va avoir des milliers de lignes.
Par contre, je voudrais qu'en cliquant dans E5, cette partie du code apparaisse automatiquement avec :

Sheets("Prospection-AC").Select
Range("A5:B5").Select (au lieu de A2:B2)
Selection.Copy

J'ai essayé en enregistrant la macro avec le bouton "Utiliser les références relatives" activé mais c'est trop aléatoire selon la cellule sur laquelle je me trouve au départ. Le classeur va être utilisé par plusieurs personnes et ils ne penseront pas toujours à se mettre sur la bonne cellule.

Après plusieurs heures de recherches, je baisse les bras donc merci +++ pour votre aide... :D
 

Pièces jointes

  • Fichier-aide-macro.xlsm
    25.3 KB · Affichages: 75
  • Fichier-aide-macro.xlsm
    25.3 KB · Affichages: 77
  • Fichier-aide-macro.xlsm
    25.3 KB · Affichages: 75

Modeste

XLDnaute Barbatruc
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Bonsoir milkchris, sois la bienvenue sur ce satané forum ;)

Ton test "If Sheets("Prospection-AC").Range("E2")="VRAI" Then ..." aurait pu fonctionner ... à deux conditions:
- Que ton contrôle 'Case à cocher' soit lié à la cellule E2 (de manière que celle-ci contienne VRAI ou FAUX quand la case est cochée ou non)
- Que tu supprimes les guillemets autour de VRAI (qui devient True sous vba et qui, en français, comme en anglais est une valeur logique et non du texte).

Ceci dit les cases à cocher peuvent rapidement devenir difficile à gérer. On pourrait (si la chose t'intéresse, que tu repasses par ici et que tu as la possibilité de modifier légèrement ton fichier) remplacer ces cases à cocher par du texte ou des caractères spéciaux qui seraient aisément compréhensibles. Le passage du statut "en attente" à "émis" se ferait via double-clic sur une cellule de la colonne E, pour une ligne choisie.

Voyons déjà si tu reviens :p ... et si la proposition t'agrée. A moins qu'une autre suggestion fleurisse d'ici là.
 

milkchris

XLDnaute Nouveau
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Bonjour Modeste,
Merci beaucoup pour ta réponse, aucun souci pour modifier le fichier selon tes conseils. Je ne suis pas si difficile, je voudrais juste que ça fonctionne... ;)
C'est ça les débutants... ça ne choisit pas toujours l'option la plus simple !
Je vais essayer d'avancer dans ce sens et je te remets le fichier sur le forum car je ne doute pas que je vais bloquer sur le DoubleClickBefore...
Pour la condition, je te rassure quand même, j'avais bien lié à E2 ma case à cocher pour mais le If... VRAI/FAUX mais comme j'étais partie sur "VRAI" et non True, forcément ça marchait beaucoup moins bien !
Merci encore pour ta réponse.
Bonne journée ! :D
Milkchris
 

milkchris

XLDnaute Nouveau
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Re-bonjour Modeste,

J'ai avancer (un peu) sur ma macro mais je me retrouve à nouveau bloquée :(

Plus de problème de case à cocher (c'est déjà ça) mais l'exécution se stoppe sur un problème que je ne parviens pas à résoudre. Quand j'arrive à l'étape "copier/coller" d'une feuille à l'autre :

...
End With
Sheets ("Prospection-AC").Select
???
Selction.Copy
...

Je ne trouve pas l'astuce pour qu'il sélectionne et copie les bonnes cellules.

Si je donne une adresse "fixe" (Sheets("Prospection-AC").Range("A2:B2"), la macro fonctionne jusqu'au bout mais je copie éternellement ces deux mêmes cellules même si je veux valider un autre client...

J'ai tenté plusieurs choses en laissant sur le fichier joint à ce message ma dernière tentative (Sheets("Prospection-AC").ActiveCell.Range(Cells(0, -4), Cells(0, -3)).Select) mais rien de concluant.

Je t'appelle donc à nouveau au secours... :confused:

Merci +++

Milkchris
 

Pièces jointes

  • Fichier-aide-macro.xlsm
    70.5 KB · Affichages: 62
  • Fichier-aide-macro.xlsm
    70.5 KB · Affichages: 66
  • Fichier-aide-macro.xlsm
    70.5 KB · Affichages: 67

Modeste

XLDnaute Barbatruc
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Bonjour,

Vite, vite pendant que mes oignons blondissent :p
Dans ton événement Worksheet_Change, Target représente précisément la cellule qui a été modifiée Ton instruction
Code:
Sheets("Prospection-AC").ActiveCell.Range(Cells(0, -4), Cells(0, -3)).Select
peut être remplacée par
Code:
Target.Offset(0, -4).Resize(1, 2).Select
... du moins si j'ai compris ce que tu veux faire.

Les 'Select' qui émaillent ton code ont tout intérêt à être supprimés: ils ne feront que ralentir l'exécution. Il vaut donc mieux écrire:
Code:
Target.Offset(0, -4).Resize(1, 2).Copy

Je repasse tout à l'heure. D'ici là, peux-tu décrire les opérations à réaliser? Copie des cellules des colonnes A et B sur la ligne où on vient de changer le contenu de la colonne E à "EMIS" ... et puis (juste pour éviter qu'on ne doive traduire ton code ... Comme tu as sans doute utilisé l'enregistreur, il y a des bouts de code à "élaguer", sans doute aussi!?)
 

milkchris

XLDnaute Nouveau
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Modeste,

Merci. Merci. Merci !!!!

Ca fonctionne exactement comme je le souhaitais !

Pour le nettoyage du code, c'est pas gagné, j'ai effectivement dû tricher un peu en copiant sur une partie du code un enregistrement que j'avais fait précédemment.

C'est la première fois de ma vie que je touche au code pour les macros et j'aurais été incapable de faire fonctionner quoi que ce soit sans ça !... Tu me diras, ça ne fonctionnait pas tellement mieux en trichant finalement vu que tu as dû m'aider :rolleyes:.

A bientôt peut-être si je rebloque et que tu repasses par là avec une autre solution miracle.

Très bonne fin de journée.

Milkchris
 

Modeste

XLDnaute Barbatruc
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Re-bonjour et bonsoir, tant qu'à faire,

Des solutions miracles, je n'en ai guère en magasin (ça se saurait :rolleyes:), simplement, il me semble que toutes les manips auraient pu se faire dans la même procédure (plutôt que dans la gestion d'un événement à l'intérieur d'un autre). Et puis, si tu insères une ligne en recopiant la mise en forme de celle du dessus pour ensuite être obligé de désactiver le gras, la couleur de remplissage, etc ... autant recopier le format de la ligne du dessous ce qui te dispense de refaire cette mise en forme!

Quant à faire la somme de 4 cellules dans lesquelles tu a entré du texte ... je présume que c'est seulement en prévision de la suite :confused:

Bref, juste pour "mémoire" ton code en version "épurée":
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("E:E")) Is Nothing Then
        If Target.Value = "EMIS" Then
            Target.Value = "NON"
            Cancel = True
        Else
            Target.Value = "EMIS"
            Sheets("Prévisionnel-2012").Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
            Target.Offset(0, -4).Resize(1, 2).Copy Sheets("Prévisionnel-2012").Range("A2:B2")
            Application.CutCopyMode = False
            Sheets("Prévisionnel-2012").Range("C2:F2").Value = "A remplir"
            Sheets("Prévisionnel-2012").Range("G2").FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
            Sheets("Prévisionnel-2012").Columns("G:G").ColumnWidth = 11
            Sheets("Prévisionnel-2012").Columns("A:F").EntireColumn.AutoFit
            Cancel = True
        End If
    End If
End Sub

Là-dessus, je m'en vais goûter ma sauce "Bolo" :p

Bonne soirée,
 

Staple1600

XLDnaute Barbatruc
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Bonsoir à tous


Juste pour le plaisir de croiser Modeste ;)

Mon nez purée de lait purée.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [E:E]) Is Nothing Then
        If Target = "EMIS" Then
            Target = "NON"
            Cancel = True
        Else
            Target = "EMIS"
            With Sheets("Prévisionnel-2012")
            .Rows("2:2").Insert -4121, 1
            Target.Offset(0, -4).Resize(1, 2).Copy .[A2:B2]
            Application.CutCopyMode = False
            .[C2:F2] = "A remplir"
            .[G2].FormulaR1C1 = "=SUM(RC[-4]:RC[-1])"
            .Columns("G:G").ColumnWidth = 11
            .Columns("A:F").EntireColumn.AutoFit
            End With
            Cancel = True
        End If
    End If
End Sub
PS: Non testée
 

Staple1600

XLDnaute Barbatruc
Re : Macro conditionnelle à dupliquer sur plusieurs lignes

Bonsoir Modeste

J'ai juste ajouté une endive saupoudrée de raccourci Evaluate.

C'était juste histoire de faire la causette avec toi ;)

Et comme milkchris est débutante, je lui conseille d'oublier mon lait purée et de ne retenir que ton code, Modeste.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400