Microsoft 365 Alleger un code VBA

Piksaw

XLDnaute Junior
Bonsoir a tous, j'ai farfouiller un peu sur le forum, une vrai mine d'or d'information :)

j'ai trouver et modifier un peu un code pour ce que je voulais faire, il fonctionne mais comme je suis très novice en vba j'aurai voulu savoir si il y avait possibilité de rendre le code plus léger, car j'ai l'impression qui fait une recherche sur toute la feuille.

c'est très basique j'ai dans la colonne B ( de B7 a B54) des nombres et quand je supprime le nombre est que la cellule devient vide, j'aimerais qu'il vide les cellules H, J et L situé sur la même ligne. Les ligne de mon tableau seront toujours comprise entre la ligne 7 et 54 est je pense que mon code lui analyse la totalité de la feuille est on sent une petite latence.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Dim J As Long

For J = 7 To Range("B" & Rows.Count).End(xlUp).Row
If UCase(Range("B" & J)) = "" Then
Range("L" & J & ",H" & J & ",J" & J).ClearContents
End If
Next J
End Sub



un Grand merci a ceux qui pourront m'aider
 
Solution
Re

Et avec celle-ci ?
NB: au préalable, il faut supprimer la macro Selection_Change()
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If Not Intersect(T, Range("B7:B54")) Is Nothing Then
If IsEmpty(T) Then
Union(T.Offset(, 6), T.Offset(, 8), T.Offset(, 10)) = ""
Else
Exit Sub
End If
End If
End Sub

Staple1600

XLDnaute Barbatruc
Bonsoir,

Je te laisse tester ceci
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B7:B54")) Is Nothing Then
If Len(Target) Then
Target = ""
Cells(Target.Row, "H") = ""
Cells(Target.Row, "J") = ""
Cells(Target.Row, "L") = ""
End If
End If
End Sub
Cela produit-il l'effet escompté ?
Ey si oui, constates des effets négatifs annexes?
 

Staple1600

XLDnaute Barbatruc
Re

Une version un peu plus synthétique
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
If Not Intersect(T, Range("B7:B54")) Is Nothing Then
If Len(T) Then
Union(T, T.Offset(, 6), T.Offset(, 8), T.Offset(, 10)) = ""
End If
End If
End Sub
 

Piksaw

XLDnaute Junior
Bonsoir,

Je te laisse tester ceci
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B7:B54")) Is Nothing Then
If Len(Target) Then
Target = ""
Cells(Target.Row, "H") = ""
Cells(Target.Row, "J") = ""
Cells(Target.Row, "L") = ""
End If
End If
End Sub
Cela produit-il l'effet escompté ?
Ey si oui, constates des effets négatifs annexes?
merci beaucoup c'est beaucoup plus réactif, seul petit soucis c'est que quand je sélectionne la cellule ou y a le nombre que j'aimerais enlever la cellule s'efface directement avant même que je vide manuellement la cellule
 

Staple1600

XLDnaute Barbatruc
Re

Tu veux effacer le contenu de la cellule que tu sélectionnes, non ?
C'est ce que le code VBA proposé
(en effaçant en même temps les cellules H, J, L de la même ligne

Une version encore plus courte et radicale ;)
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
If Not Intersect(T, Range("B7:B54")) Is Nothing Then
Union(T, T.Offset(, 6), T.Offset(, 8), T.Offset(, 10)) = ""
End If
End Sub
 

Piksaw

XLDnaute Junior
Re

Tu veux effacer le contenu de la cellule que tu sélectionnes, non ?
C'est ce que le code VBA proposé
(en effaçant en même temps les cellules H, J, L de la même ligne

Une version encore plus courte et radicale ;)
VB:
Private Sub Worksheet_SelectionChange(ByVal T As Range)
If Not Intersect(T, Range("B7:B54")) Is Nothing Then
Union(T, T.Offset(, 6), T.Offset(, 8), T.Offset(, 10)) = ""
End If
End Sub
pardon je me suis peut être mal exprimer, je souhaiterais que les cellule H, J, L s'efface une fois que j'ai vider la cellule B manuellement, sinon la c'est trop radical quand même :)
 

Staple1600

XLDnaute Barbatruc
Re

Et avec celle-ci ?
NB: au préalable, il faut supprimer la macro Selection_Change()
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If Not Intersect(T, Range("B7:B54")) Is Nothing Then
If IsEmpty(T) Then
Union(T.Offset(, 6), T.Offset(, 8), T.Offset(, 10)) = ""
Else
Exit Sub
End If
End If
End Sub
 

Piksaw

XLDnaute Junior
Est ce que tu serais par hasard également me coder un petit truc qui sûrement sera facile pour toi. j’ai une base de donnée avec plein de devis sur chaque ligne j’ai le numéro de devis en colonne À et ensuite j’ai l’adresse, le nom de la personne et le montant et j’ai une une cellule qui s’appel en cours en cellule D et quand un devis et adjugé j’écris manuellement « validé » et si il est refusé j’écris « refuser » manuellement très basique. Mais je dois chaque fois aller rechercher le devis en question parmi plein d’autre et j’aimerais automatiser ça

J’aimerais créer une macro toute simple avec un bouton

Exemple j’écris le numéro du devis dans une cellule et à côté, j’aurai le bouton, je clique sur le bouton et il m’écrit automatiquement validé dans la bonne cellule en fonction du numéro de devis taper préalablement et je recommence avec un autre devis

Et si il est refusé j’aurai le même bouton mais qui écrit refusé

Il faudrai d’après ce que j’ai pu lire que je puisse mettre une sorte de fonctions de recherchv qui va chercher le numéro du devis pour ensuite coller le mot « validé » dans la bonne cellule en tant que valeur fixe. Mais je suis nul en vba malheureusement est ce que tu pourrait m’aider
Re

Et il se passe quoi si tu sélectionnes plusieurs cellules de la colonne B ?
Si tu supprimes la colonne B
Si tu fais un copier/coller dans la colonne B
etc...

C'est que j'appelle des effets de bord.
alors si je supprime la colonne B, il ne se passe rien ça n'efface pas les autre ligne

si je fais un copier coller d'une cellule ou de plusieurs, c'est ok par contre si je sélectionne plusieurs cellule B en même temps et que je vide les cellule la par contre, ça ne vide pas les autre cellule, mais je ne vais jamais vider plusieurs cellule en même temps donc pour moi ton code et vraiment tir top a mon usage :)
 

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 942
Membres
101 849
dernier inscrit
florentMIG