Macro: probleme programmation colonnes
Berrot
Messages postés
7
Statut
Membre
-
Berrot Messages postés 7 Statut Membre -
Berrot Messages postés 7 Statut Membre -
Bonjour,
bonsoir à tous et à toutes .
je suis nouveau sur le forum et novice en programmation. (système d'exploitation windows vista excel 2007).
depuis quelques jours j'essai de modifier une macro récupérée sur un forum.
Après quelques modifications la macro fonctionne bien mais mon problème est que cette macro fonctionne sur les colonnes entières de la feuille. Or ce que souhaiterais faire c'est que cette macro fonctionne dans un tableau uniquement.
est-ce possible?
(Autoriser saisie dans une cellule si un autre est bien renseignée ).
voici la macro récupérée.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 And Target.Count = 1 Then
If Target.Offset(, -1).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -1).Select
Application.EnableEvents = True
End If
End If
If Target.Column = 4 And Target.Count = 1 Then
Target.Offset(0, 1).Select
End If
End Sub
Voici la macro modifiée qui fonctionne bien mais qui utilise les colonnes entières sur la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 And Target.Count = 1 Then
If Target.Offset(, -2).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -2).Select
Application.EnableEvents = True
End If
End If
If Target.Column = 4 And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
If Target.Column = 6 And Target.Count = 1 Then
If Target.Offset(, -3).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -3).Select
Application.EnableEvents = True
End If
End If
If Target.Column = 3 And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
End Sub
Ce que je souhaiterais c'est une macro qui utiliserait uniquement les colonnes du tableau du style:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column("F61:F80") And Target.Count = 1 Then
If Target.Offset(, -2).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -2).Select
Application.EnableEvents = True
End If
End If
If Target.Column("D61:D80") And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
If Target.Column("F61:F80") And Target.Count = 1 Then
If Target.Offset(, -3).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -3).Select
Application.EnableEvents = True
End If
End If
If Target.Column("C61:C80") And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
End Sub
Après plusieurs tentatives et essais
Il m'est impossible de faire fonctionner cette macro sous cette forme là où est le problème?
Exemple: j'ai un tableau qui se presente ainsi:
Colonnes
("C61:C80"),("D61:D80"),("F61:F80").....jusqu'à ("T61:T80")
Il faut que les cellules "C et D" soient renseignées avant de pouvoir renseigner les cellules de la même ligne. d'avance merci pour l'attention que vous voudrez bien porter à mon problème.
Berrot.
bonsoir à tous et à toutes .
je suis nouveau sur le forum et novice en programmation. (système d'exploitation windows vista excel 2007).
depuis quelques jours j'essai de modifier une macro récupérée sur un forum.
Après quelques modifications la macro fonctionne bien mais mon problème est que cette macro fonctionne sur les colonnes entières de la feuille. Or ce que souhaiterais faire c'est que cette macro fonctionne dans un tableau uniquement.
est-ce possible?
(Autoriser saisie dans une cellule si un autre est bien renseignée ).
voici la macro récupérée.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 And Target.Count = 1 Then
If Target.Offset(, -1).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -1).Select
Application.EnableEvents = True
End If
End If
If Target.Column = 4 And Target.Count = 1 Then
Target.Offset(0, 1).Select
End If
End Sub
Voici la macro modifiée qui fonctionne bien mais qui utilise les colonnes entières sur la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 And Target.Count = 1 Then
If Target.Offset(, -2).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -2).Select
Application.EnableEvents = True
End If
End If
If Target.Column = 4 And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
If Target.Column = 6 And Target.Count = 1 Then
If Target.Offset(, -3).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -3).Select
Application.EnableEvents = True
End If
End If
If Target.Column = 3 And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
End Sub
Ce que je souhaiterais c'est une macro qui utiliserait uniquement les colonnes du tableau du style:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column("F61:F80") And Target.Count = 1 Then
If Target.Offset(, -2).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -2).Select
Application.EnableEvents = True
End If
End If
If Target.Column("D61:D80") And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
If Target.Column("F61:F80") And Target.Count = 1 Then
If Target.Offset(, -3).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -3).Select
Application.EnableEvents = True
End If
End If
If Target.Column("C61:C80") And Target.Count = Empty Then
Target.Offset(, -1).Select
End If
End Sub
Après plusieurs tentatives et essais
Il m'est impossible de faire fonctionner cette macro sous cette forme là où est le problème?
Exemple: j'ai un tableau qui se presente ainsi:
Colonnes
("C61:C80"),("D61:D80"),("F61:F80").....jusqu'à ("T61:T80")
Il faut que les cellules "C et D" soient renseignées avant de pouvoir renseigner les cellules de la même ligne. d'avance merci pour l'attention que vous voudrez bien porter à mon problème.
Berrot.
A voir également:
- Macro: probleme programmation colonnes
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro maker - Télécharger - Divers Utilitaires
- Actiona macro - Télécharger - Divers Utilitaires
6 réponses
Bonjour,
Suggestion :
Lupin
Suggestion :
Option Explicit
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Intersection As Range
Set Plage = Range("F61:F80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
If Target.Offset(, -2).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -2).Select
Application.EnableEvents = True
End If
End If
' If Target.Column("F61:F80") And Target.Count = 1 Then
' If Target.Offset(, -2).Value = Empty Then
' Application.EnableEvents = False
' MsgBox "il faut saisir l'agence avant le compte !"
' Target.Value = Empty
' Target.Offset(, -2).Select
' Application.EnableEvents = True
' End If
' End If
Set Plage = Range("D61:D80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Application.EnableEvents = False
Target.Offset(, -1).Select
Application.EnableEvents = True
End If
' If Target.Column("D61:D80") And Target.Count = Empty Then
' Target.Offset(, -1).Select
' End If
Set Plage = Range("F61:F80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
If Target.Offset(, -3).Value = Empty Then
Application.EnableEvents = False
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(, -3).Select
Application.EnableEvents = True
End If
End If
' If Target.Column("F61:F80") And Target.Count = 1 Then
' If Target.Offset(, -3).Value = Empty Then
' Application.EnableEvents = False
' MsgBox "il faut saisir l'agence avant le compte !"
' Target.Value = Empty
' Target.Offset(, -3).Select
' Application.EnableEvents = True
' End If
' End If
Set Plage = Range("C61:C80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Application.EnableEvents = False
Target.Offset(, -1).Select
Application.EnableEvents = True
End If
' If Target.Column("C61:C80") And Target.Count = Empty Then
' Target.Offset(, -1).Select
' End If
End Sub
'
Lupin
re :
dans un premier temps, essayer avec ceci :
ainsi, dès l'entrée dans cette routine les évènement seront désactiver.
Lupin
dans un premier temps, essayer avec ceci :
Option Explicit
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Intersection As Range
Application.EnableEvents = False
Set Plage = Range("F61:F80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
If Target.Offset(0, -2).Value = Empty Then
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(0, -2).Select
End If
End If
Set Plage = Range("D61:D80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Target.Offset(0, -1).Select
End If
Set Plage = Range("F61:F80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
If Target.Offset(0, -3).Value = Empty Then
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = Empty
Target.Offset(0, -3).Select
End If
End If
Set Plage = Range("C61:C80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Target.Offset(0, -1).Select
End If
Application.EnableEvents = True
End Sub
'
ainsi, dès l'entrée dans cette routine les évènement seront désactiver.
Lupin
re:
Bonjour et merci pour votre aide et surtout pr votre patience.
suite :
Lorsque je mets en surbrillance la colonne F clic droit de la souris "effacer le contenu" le problème persiste, la boîte de dialogue du débogage s'affiche "erreur d'exécution 13 incompatibilité de type :"
Je clique débogage
la 7ème ligne apparait surlignée en jaune ( If Target.Offset(0, -2).Value = Empty Then )
Avec cette nouvelle macro lorsque je ferme le débogage la fenêtre ne se réduit plus dans la barre des tâches , mais la macro est désactivée. Je suis obligé de fermer le fichier, de le rouvrir , de recoller la macro puis ça fonctionne une fois et ainsi de suite..
Bonjour et merci pour votre aide et surtout pr votre patience.
suite :
Lorsque je mets en surbrillance la colonne F clic droit de la souris "effacer le contenu" le problème persiste, la boîte de dialogue du débogage s'affiche "erreur d'exécution 13 incompatibilité de type :"
Je clique débogage
la 7ème ligne apparait surlignée en jaune ( If Target.Offset(0, -2).Value = Empty Then )
Avec cette nouvelle macro lorsque je ferme le débogage la fenêtre ne se réduit plus dans la barre des tâches , mais la macro est désactivée. Je suis obligé de fermer le fichier, de le rouvrir , de recoller la macro puis ça fonctionne une fois et ainsi de suite..
Re :
de plus le décalage à gauche se fait avec l'instruction :
Target.Offset(0, -1).Select
dans la partie de code :
si tu désire un décalage à droite, il faut inscrire :
Lupin
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Intersection As Range
Application.EnableEvents = False
Set Plage = Range("F61:F80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
If IsEmpty(Target.Offset(0, -2).Value) Then
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = ""
Target.Offset(0, -2).Select
End If
End If
Set Plage = Range("D61:D80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Target.Offset(0, -1).Select
End If
Set Plage = Range("F61:F80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
If IsEmpty(Target.Offset(0, -3).Value) Then
MsgBox "il faut saisir l'agence avant le compte !"
Target.Value = ""
Target.Offset(0, -3).Select
End If
End If
Set Plage = Range("C61:C80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Target.Offset(0, -1).Select
End If
Application.EnableEvents = True
End Sub
'
de plus le décalage à gauche se fait avec l'instruction :
Target.Offset(0, -1).Select
dans la partie de code :
Set Plage = Range("C61:C80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Target.Offset(0, -1).Select
End If
si tu désire un décalage à droite, il faut inscrire :
Set Plage = Range("C61:C80")
Set Intersection = Application.Intersect(Plage, Target)
If Not Intersection Is Nothing Then
Target.Offset(0, 1).Select
End If
Lupin
Bonsoir Lupin
Super ça fonctionne très bien !
J'ai corrigé le décalage vers la gauche.
Encore merci pour tout.
Je te souhaite de bonnes fêtes de fin d'année.
BERROT.
PS.
Peut-ëtre aurai-je encore besoin de tes services !
Je ne sais pas comment mettre ta réponse en ligne ou sur le forum pour que ça puisse rendre service à d'autres.
Super ça fonctionne très bien !
J'ai corrigé le décalage vers la gauche.
Encore merci pour tout.
Je te souhaite de bonnes fêtes de fin d'année.
BERROT.
PS.
Peut-ëtre aurai-je encore besoin de tes services !
Je ne sais pas comment mettre ta réponse en ligne ou sur le forum pour que ça puisse rendre service à d'autres.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci beaucoup de vous être interessé à mon problème .
je vais essayer cette macro
et je vous tiendrais informé
merci encore.
c'est exactement ce que je voulais.
Cependant il y a quelques petits problèmes qui surviennent à l'exécution de la macro:
1° lorsque je saisis la colonne C la sélection se décale d'une cellule vers la gauche (colonne B qui ne devrait pas être selectionnée) au lieu de se déplacer vers la droite en colonne D ou F si D est renseignée.
2° lorsque je mets en surbrillance les colonnes C ou D et clique droit de la souris "effacer le contenu" tout s'efface mais la surbrillance se décale vers la gauche en colonne C ou B.
3° lorsque je mets en surbrillance la colonne F clique droit de la souris " efacer le contenu" un message d'erreur du débogage s'affiche "erreur d'exécution 13 incompatibilité du type :"
Je clique débogage :
la 6eme ligne de la macro est surlignée en jaune "If Target.Offset(, -2).Value = Empty Then"
lorsque je ferme le débogage, la feuille se réduit dans la barre des tâches.
Excusez moi de vous poser ces quelques problèmes
et encore merci.