XL 2010 (RESOLU) en VBA vider une cellule si une autre n'est pas vide

Potentis

XLDnaute Occasionnel
Bonjour à tous,

Ci joint un extrait de mon fichier, où les cellules de la colonnes E contiennent une formule qui donne
" le nombre de ligne soit en cours + soit vide de la colonne I dont le nombre de ligne de en cours "
qui ne s'affiche que dans la cellule E6 dans mon exemple ca donne "3 dont 1 en cours"
ca me permet de savoir ou j'en suis de mon travail

ce que j'aimerai faire c'est en VBA dés que j'écris quelque dans la cellule B6 ça efface la cellule E6 et ainsi de suite si j'ecris en B7 ca effacerait E7 ...etc

mais je ne sais pas du tout comment m'y prendre

Auriez vous une idée ?
 

Pièces jointes

  • Classeur2.xlsm
    14.3 KB · Affichages: 64

Potentis

XLDnaute Occasionnel
Après quelques recherche fructueuse, j'ai trouvé ceci que j'ai adapté a mon cas
Code:
Sub Effacer()                      
    ActiveSheet.Range("B:B").End(xlDown)(2).Select  ' Atteindre 1ere cellule vide colonne B (Ctrl + d)
Dim J As Long

  For J = 4 To Range("B" & Rows.Count).End(xlUp).Row
    If Not IsEmpty(Range("B" & J)) Then
      Range("E" & J).ClearContents
    End If
  Next J
End Sub
je voudrais SVP peaufiner ce code de telle manière qu'à partir de la première cellule vide de la colonne B ET de façon automatique dés que la première cellule vide de la colonne B ne soit plus vide d'effacer la cellule E a sa droite

Merci d'avance
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Bonjour,

j'espère que ça répond à tes attentes. Recopie le code dans le module de ta feuille. Clic droit sur l'onglet de ta feuille et tu choisis "visualiser le code"
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim DerLig As Long
    DerLig = ActiveSheet.Cells(Application.Rows.Count, 2).End(xlUp).Row  'n° ligne du bas on remonte vers le haut

    If Not Intersect(Target, Range("B1:B" & DerLig)) Is Nothing Then
        On Error Resume Next
        Application.EnableEvents = False
        If Target.Value <> "" Then
            Target.Offset(, 3).ClearContents
        End If
        Application.EnableEvents = True
    End If
End Sub
 

Pièces jointes

  • Potentis_v1.xlsm
    19.1 KB · Affichages: 76

Potentis

XLDnaute Occasionnel
Bonjour Cathodique, le forum,

Merci beaucoup d'avoir pris du temps

étant débutante j'ai suivi pas à pas ce que tu m'as dis mais les tests n'étaient pas concluant alors que sur ta pièce jointe ça fonctionnait, j'ai cherché pourquoi et j'ai trouvé qu'il ne fallait pas copier la macro dans module mais directement dans la feuille chose que je n'avais pas comprise ni que j'aurais trouvée seule

j'en profite pour comprendre quelques bout du code comme Worksheet_Change qui en dis long déjà sur la façon dont j'aurai dû chercher ^^

Par contre puis je encore un peu te solliciter ?
j'aimerai juste ajouter un Alignement a gauche de cette cellule (Target.Offset(, 3) une fois effacée
je pourrais après un peu de recherche trouver et ajouter une ligne avec le code correspondant mais je suppose qu'il faut profiter de la syntaxe (Target.Offset(, 3).ClearContents) et lui ajouter quelque chose, mais je ne vois comment

en tout cas encore Mercis
 

cathodique

XLDnaute Barbatruc
Bonjour,

Je ne comprends vraiment ta demande. Pourquoi veux-tu aligner à gauche alors que la cellule se vide.
Quelle utilité d'aligner une cellule vide?

Le "Target.Offset(, 3)" signifie un décalage sur la même ligne de 3 colonnes (/col B) soit la colonne E.
Offset(,3)------> décalage vers la droite
Offset(,-3)------> décalage vers la gauche

Utilise l'enregistreur de macro, il peut te donner une piste.

sinon rajouter cette ligne Target.Offset(, 3).HorizontalAlignment = xlLeft
sous la ligne Target.Offset(, 3).ClearContents
 

Potentis

XLDnaute Occasionnel
Bonjour Cath, le forum,

je ne fais du VBA que depuis 2 semaines mais j'ai un peu honte car effectivement ça avait l'air facile a trouver, je pensais qu'il fallait ajouter le code a droite de Target.Offset(, 3).ClearContents
des fois on se complique la vie ^^

en tout cas, j'apprends et Merci a toi pour les explications et merci d'avoir ajouter le code malgré l'incompréhension de ma demande
comme j'ai lu "une demande bien formulée est 50% de chance d'avoir une bonne résolution du problème"

a mon tour d'expliquer pourquoi je voulais cet alignement c'est que j'ai voulu que le résultat de la formule que j'efface soit alignée au centre puis que le texte que je mets ensuite doit être aligné a gauche car le formule ne me sert plus pour cette ligne mais pour la ligne suivante

Merci beaucoup Cath tout ce code me facilite bien la vie

Cordialement Potentis,
 

cathodique

XLDnaute Barbatruc
Je n'ai toujours pas bien compris. Peux-tu mettre un petit exemple sur un fichier.

Car Target.Offset(, 3).ClearContents signifie sur la même ligne, elle aurait pu s'écrire comme ceci Target.Offset(0, 3).ClearContents, le "0" (zéro) signifie sur la même ligne. Au final, si on ne met rien est équivalent à 0.

Le premier chiffre (0) concerne les lignes et le second (3) concerne les colonnes. Si tu veux un décalage dans le sens des lignes, il faut modifier le premier chiffre. Pour le sens de décalage par rapport à la cellule active, positif décalage vers le bas et négatif vers le haut.

Pour faire tes armes en vba, voici une mine d'or de Boisgontier

Peut-être comme ceci Target.Offset(1, 3).HorizontalAlignment = xlLeft

Le Target est la plage spécifiée au début du code:
Intersect(Target, Range("B1:B" & DerLig)) ' c'est-à-dire que Offset(nombre de ligne, nombre de colonne) est la décalage effectué par rapport à la colonne B.

Avec l'enregistreur de macro tu pourras avoir les différentes syntaxes pour l'alignement dans une cellule.

J'espère que c'est un plus clair et ne pas t'avoir dit des bêtises (moi aussi j'apprends).

Bon we
 

Potentis

XLDnaute Occasionnel
Cath,

Voici où en est mon fichier, le principe est que je remplis ligne par ligne des demandes de X ou Y dans la dernière cellule vide de la colonne B
, que je peux atteindre avec Ctrl + d

Ces demandes sont en MFC (Blanc pas encore commencée, Rouge encours, Transmis orange, En attente jaune, Terminée vert)

La colonne L me sert a classifier chaque ligne

Ensuite je mets le nom de la personne en colonne B la cellule se grise et ta macro (encore merci !) efface la cellule E de cette ligne

dans cette cellule E il y avait une formule qui me donne le nombre de demande qui sont en cours (couleur rouge) et celles pas encore en cours (couleur blanche) dans mon exemple 5 "dont" celles qui sont en cours c'est a dire 2 et pour une meilleure visiblilité j'ai un alignement centré pour savoir où j'en suis
mais quand j'ai écrivais le nom, puis le chiffre puis la date je devais effacer la cellule de la colonne E (la formule) et aligner a gauche pour pouvoir mettre le commentaire

Comme je n'en suis qu'au début de mon apprentissage je vais encore et encore peaufiner ce, et d'autres fichiers et je te remercie de tes précieuses explications de code ainsi que pour le lien vers Boisgontier
on m'a donné aussi un lien vers "Openclassroom" et un vers "Excel-pratique.com"

Petite info, y'a une dizaine d'année j'avais créé sur Excel 4 une usine a gaz avec les macros commandes et un collègue non informaticien pouvais allumer le PC répondre Oui s'il fallait faire le rapport mensuel, ca lui ouvrait le fichier Excel et positionnait le curseur dans la bonne cellule, une fois les valeurs remplis tous les calculs se faisaient tout seul et à la fin une boite de dialogue demandait s'il fallait imprimer le rapport et 3 feuilles sortaient automatiquement de l'imprimante ainsi qu'un bordereau d'envoi au service de comptabilité + une étiquette autocollante a mettre sur une enveloppe, alors qu'avant ils nous fallait à la calculatrice 2 jours de calcul sur un bureau rempli de feuille, de tipex correcteur, de photocopie, et d'énervement, là avec mes macros et un utilisateur non informaticien et pas mal d'explications pour qu'il appui sur les bonnes touches ^^ ca prenait 2h sinon en 20 mn je faisais ce rapport mensuel

J'adore Excel mais depuis Excel 5 le VBA est arrivé et je n'ai pas su monter dans le train

Cordialement Potentis,
 

Pièces jointes

  • Pour Forum XLD.xlsm
    30.8 KB · Affichages: 61

cathodique

XLDnaute Barbatruc
Ok, j'ai compris. Tu n'avais pas dit qu'après avoir effacer la cellule E, tu mettais un commentaire dans cette dernière.

Présentement sur ton dernier fichier, le code est à jour. Tu as l'alignement à gauche?
VB:
Target.Offset(, 3).ClearContents      'efface le contenu
Target.Offset(, 3).HorizontalAlignment = xlLeft     'aligne à gauche
Tu peux inverser l'ordre de ces 2 lignes.
Bonne soirée.
 

Potentis

XLDnaute Occasionnel
Bonjour Cath, Bonjour le forum,

Désolée de n'avoir pas pensé à tout dire

Oui mon fichier est à jour avec l'alignement a gauche et merci de toutes ces précieuses infos
pour le moment je n'ai plus d'idée d'amélioration je vais l'utiliser et voir au fil de l'eau

encore Merci pour tout

Cordialement Potentis,
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87