Généraliser une macro

Abardothe

XLDnaute Nouveau
Bonjour !

Je viens de créer une macro, je sais qu'elle n'est pas optimisée et tout ça, mais je ne souhaite que créer un fichier excel me facilitant mon travail.

J'ai cette macro :

Code:
Sub date_inter_atteinte()

    If Range("G8") < Range("C2") Then
        Range("G8").Select
    Selection.Copy
    ActiveCell.Offset(0, -3).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveCell.Offset(-7, -2).Range("A1").Select
    
    End If
    
    
End Sub

Je l'ai en partie créé avec la fonction "enregistrer une macro". Le truc c'est que je voudrais que cela s'applique pour toutes mes cases de la colonne G.

Pourriez-vous m'aider ? Merci d'avance !
 
G

Guest

Guest
Re : Généraliser une macro

Bonjour et bienvenue sur le forum,

Il est toujours plus facile pour nous d'avoir un fichier joint.
Ci dessous la macro suppose que la valeur à tester sur toutes les cellules de la colonne G est en C2
Code:
Sub date_inter_atteinte()
    Dim c As Range 'Variable cellule courante dans la boucle for
    'Parcourir de G2 à Gn (dernière ligne occupée de la colonne)
    For Each c In Range("G2:G" & Cells(Rows.Count, 7).End(xlUp).Row)
        'Si la cellule (c) est inférieure à C2
        If c < Range("C2") Then c.Offset(, -3).Value = c.Value
    End If
End Sub

A+
 

Abardothe

XLDnaute Nouveau
Re : Généraliser une macro

Merci de l'accueil et de la réponse rapide !

Tu as très bien compris ma demande, avec ce que j'ai compris de ton code.

Par contre quand je lance la macro, j'ai une fenêtre d'erreur qui s'affiche et cela me marque : "erreur de compilation : End If sans bloc If"

Je vois très bien le bloc If et le Then, pourquoi cela ne fonctionne-t-il pas ?

Merci beaucoup pour l'aide apportée :D

EDIT : j'ai résolu le problème ainsi :

Code:
Sub date_inter_atteinte()
     Dim c As Range 'Variable cellule courante dans la boucle for
     'Parcourir de G2 à Gn (dernière ligne occupée de la colonne)
     For Each c In Range("G8:G" & Cells(Rows.Count, 7).End(xlUp).Row)
         'Si la cellule (c) est inférieure à C2
         If c > Range("C2") Then c.Offset(, -3).Value = c.Value
Next

         
 End Sub

J'ai rajouté le bloc Next car Excel me disait qu'il est manquant, donc j'ai réglé le problème :p
 

Pièces jointes

  • Classeur1.xlsm
    17.3 KB · Affichages: 57
  • Classeur1.xlsm
    17.3 KB · Affichages: 72
  • Classeur1.xlsm
    17.3 KB · Affichages: 62
Dernière édition:

Abardothe

XLDnaute Nouveau
Re : Généraliser une macro

Je reviens vers vous avec une nouvelle question, très simple !

Je voudrais que quand la macro s'exécute, elle supprime en même temps le texte situé dans la colonne D de la même ligne, tu saurais faire ? :D


EDIT : j'ai modifié mon classeur, donc le code aussi

Code:
Sub date_inter_atteinte()
     Dim c As Range 'Variable cellule courante dans la boucle for
     'Parcourir de B6 à Bn (dernière ligne occupée de la colonne)
     For Each c In Range("B6:B" & Cells(Rows.Count, 2).End(xlUp).Row)
         'Si la cellule (c) est inférieure à B1
         If c < Range("B1") Then c.Offset(, 3).Value = c.Value 'on copiera la cellule dans celle situé 3 cases à coté
         
Next 'passe à la cellulue suivante

         
 End Sub
 

Pièces jointes

  • Version finale.xlsm
    30.5 KB · Affichages: 40
  • Version finale.xlsm
    30.5 KB · Affichages: 48
  • Version finale.xlsm
    30.5 KB · Affichages: 50
Dernière édition:
G

Guest

Guest
Re : Généraliser une macro

Re,

Il y a confusion, car la macro donnée plus haut, met la valeur de G dans D si G<C2.
On ne peut mettre quelque chose en D et l'effacer en même temps, cela n'a pas de sens.

ALors si dans prochain post, il n'y a pas de fichier exemple joint avec explications claires, je passe la main.

A+
 

Abardothe

XLDnaute Nouveau
Re : Généraliser une macro

Salut !

J'ai mis un fichier exemple dans mon précédent poste normalement, sauf erreur de ma part... Mais c'est pas grave, je le remet dans ce poste et j'explique les modifs apportées :D

Maintenant, la macro (que tu m'as donné) met la valeur de B dans E si la valeur de la colonne B est inférieur à la valeur de B1, d'où la modification de la macro vers la macro de mon précédent poste.

Je voudrais donc, que après avoir fait le copier collé, la cellule de la colonne D qui se trouve sur la même ligne que le copié/collé soit vidée (endroit où est marqué "Rdv créé"). Cela me permettra de recréer un rendez vous sur outlook grâce à cette suppression.

J'espère avoir été compréhensible ;)

Et le fichier est joint ici.


Edit : je remet la macro modifiée sur ce poste pour une lecture plus facile

Code:
Sub date_inter_atteinte()
     Dim c As Range 'Variable cellule courante dans la boucle for
     'Parcourir de B6 à Bn (dernière ligne occupée de la colonne)
     For Each c In Range("B6:B" & Cells(Rows.Count, 2).End(xlUp).Row)
         'Si la cellule (c) est inférieure à B1
         If c < Range("B1") Then c.Offset(, 3).Value = c.Value 'on copiera la cellule dans celle situé 3 cases à coté
         
Next 'passe à la cellulue suivante

         
 End Sub
 

Pièces jointes

  • Version finale légère.xlsm
    29.4 KB · Affichages: 42
Dernière édition:
G

Guest

Guest
Re : Généraliser une macro

RE,

C.offset(,2)=""

Code:
Sub date_inter_atteinte()
    Dim c As Range  'Variable cellule courante dans la boucle for
    'Parcourir de G2 à Gn (dernière ligne occupée de la colonne)
    For Each c In Range("B6:B" & Cells(Rows.Count, 2).End(xlUp).Row)
        'Si la cellule (c) est inférieure à C2
        If c < Range("B1") Then
            c.Offset(, 3).Value = c.Value  'on copiera la cellule dans celle situé 3 cases à coté
            c.Offset(, 2) = ""
        End If
    Next    'passe à la cellulue suivant
End Sub

A+
 

Abardothe

XLDnaute Nouveau
Re : Généraliser une macro

RE,

Je peux dire que je t'adores ? ^^
Je cherchais une fonction du style clear ou autre, alors qu'il suffisait juste de mettre du vide :D

Merci beaucoup pour ton aide et peut-être à la prochaine pour une autre demande très difficile de ma part ;)

Bonne soirée


EDIT : j'ai pas précisé que ta solution fonctionne à merveille.
 

Discussions similaires

Réponses
2
Affichages
151

Statistiques des forums

Discussions
312 492
Messages
2 088 942
Membres
103 989
dernier inscrit
jralonso