VBa : sélectionner une ligne entière par variables

Phillip

XLDnaute Occasionnel
Bonjour,

Je cherche a sélectionner une ligne définie par des variables et en insérer une. J'ai écrit le code suivant qui ne fonctionne pas...


premierrang = 40
Set TitreImprevuBudget = ActiveSheet.Cells(premierrang, 2)

If Not IsEmpty(TitreImprevuBudget) Then
rows(premierrang+1 & ":" & premierrang+1).select (Ici j'espère traduire en row 41,41)
Selection.EntireRow.Insert Shift:=xlDown

J'ai clairement un problème de syntaxe, mais malgré mes essais, je n'y arrive pas...

Merci de votre aide

Cordialement
 

Paf

XLDnaute Barbatruc
Re : VBa : sélectionner une ligne entière par variables

Bonjour

J'ai clairement un problème de syntaxe



hormis le End If manquant la syntaxe est correcte . On pourrait simplifier en:

Code:
premierrang = 40
Set TitreImprevuBudget = ActiveSheet.Cells(premierrang, 2)

If Not IsEmpty(TitreImprevuBudget) Then     Rows(premierrang + 1).Insert Shift:=xlDown

Dans cette écriture pas besoin de End If

A+
 

Phillip

XLDnaute Occasionnel
Re : VBa : sélectionner une ligne entière par variables

Bonjour

Pas de message d'erreur, ça n'insère simplement pas la ligne...

A+

Voici le code entier...En fait au moment d'insérer la ligne, la macro repart tout au début et se re-déroule normalement jusqu'à l'insertion ligne, n'insère pas de ligne et remplit la ligne 41 en écrasant les données déjà présentes...

Private Sub Worksheet_Change(ByVal Target As Range)

'si on selectionne plus d'une cellule, la macro s'arrete : permet de supprimer ou d'ajouter des lignes et des colonnes


'je declare la variable
'TitreImprevu As String


If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then
Exit Sub

'Si je tape imprevu

ElseIf Target = "imprevu" Then

'Je récupère le mois courant
mois = Month(Now())
'Je récupère la ligne où j'ai tapé imprevu
Irow = Target.Row
'Je travaille sur la colonne 3 des montants
Icol = 3

'Je colore la ligne en bleu
Range(Cells(Irow, Icol - 2), Cells(Irow, Icol + 2)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With




'J'initialise la variable
nouvelimprevu = 0
TitreImprevu = 0


'Je met la valeur dans une variable
nouvelimprevu = Cells(Irow, Icol).Value
TitreImprevu = Cells(Irow, Icol - 1).Value



Sheets("Budget-2015").Select

premierrang = 40
Set TitreImprevuBudget = ActiveSheet.Cells(premierrang, 2)

If Not IsEmpty(TitreImprevuBudget) Then
Rows(premierrang + 1).Insert shift:=xlDown

ActiveSheet.Cells(premierrang + 1, 2) = TitreImprevu
ActiveSheet.Cells(premierrang + 1, mois + 3) = nouvelimprevu

Else
ActiveSheet.Cells(premierrang, mois + 3).Value = nouvelimprevu
ActiveSheet.Cells(premierrang, 2).Value = TitreImprevu



End If
End If

End Sub
 

Paf

XLDnaute Barbatruc
Re : VBa : sélectionner une ligne entière par variables

Re,

Private Sub Worksheet_Change(ByVal Target As Range) se déclenche à la modifications du contenu de cellules.

Si Target = "imprevu" alors on déroule le code, dans lequel on trouve des mise à jour de cellule ... qui redéclenche Private Sub Worksheet_Change


pour éviter cela , placer juste après ElseIf Target = "imprevu" Then
Code:
Application.EnableEvents = False  ' pour désactiver le déclenchement événementiel
et juste avant End Sub
Code:
Application.EnableEvents = True ' pour réactiver le déclenchement événementiel

S'il y avait encore des soucis, joignez un classeur avec des données non confidentielles

A+
 

Phillip

XLDnaute Occasionnel
Re : VBa : sélectionner une ligne entière par variables

Re,

Private Sub Worksheet_Change(ByVal Target As Range) se déclenche à la modifications du contenu de cellules.

Si Target = "imprevu" alors on déroule le code, dans lequel on trouve des mise à jour de cellule ... qui redéclenche Private Sub Worksheet_Change


pour éviter cela , placer juste après ElseIf Target = "imprevu" Then
Code:
Application.EnableEvents = False  ' pour désactiver le déclenchement événementiel
et juste avant End Sub
Code:
Application.EnableEvents = True ' pour réactiver le déclenchement événementiel

S'il y avait encore des soucis, joignez un classeur avec des données non confidentielles

A+


Re-bonjour,

Application.enable ne change rien...Ca ne m'insère pas de ligne ne dessous de la 40.

Donc je joins un fichier test. C'est un fichier de suivi de budget dans lequel je rentre des dépenses dans la colonne C (exemple ligne 11). Si cette dépense n'était pas prévue dans mon budget, j'écris imprevu dans la colonne A et cela déclenche le code (mettre ligne en bleu, aller sur la feuille budget et lister mes dépenses imprévues à partir de la ligne 40) Mot de passe du classeur : chiklop

merci de tes lumières

Cordialement

Phillip
 

Pièces jointes

  • TEST.xlsm
    62 KB · Affichages: 42
  • TEST.xlsm
    62 KB · Affichages: 44

Paf

XLDnaute Barbatruc
Re : VBa : sélectionner une ligne entière par variables

Re,

dans la partie "ecriture, insertion" de la macro, en référençant explicitement sur la feuille Budget-2015, ça fonctionne

Code:
    With Sheets("Budget-2015")
    premierrang = 40
    Set TitreImprevuBudget = .Cells(premierrang, 2)

    If Not IsEmpty(TitreImprevuBudget) Then
        .Rows(premierrang + 1).Insert shift:=xlDown
        .Cells(premierrang + 1, 2) = TitreImprevu
        .Cells(premierrang + 1, mois + 3) = nouvelimprevu
    Else
        .Cells(premierrang, mois + 3).Value = nouvelimprevu
        .Cells(premierrang, 2).Value = TitreImprevu
    End If
    End With

A+
 

Phillip

XLDnaute Occasionnel
Re : VBa : sélectionner une ligne entière par variables

Re,

dans la partie "ecriture, insertion" de la macro, en référençant explicitement sur la feuille Budget-2015, ça fonctionne

Code:
    With Sheets("Budget-2015")
    premierrang = 40
    Set TitreImprevuBudget = .Cells(premierrang, 2)

    If Not IsEmpty(TitreImprevuBudget) Then
        .Rows(premierrang + 1).Insert shift:=xlDown
        .Cells(premierrang + 1, 2) = TitreImprevu
        .Cells(premierrang + 1, mois + 3) = nouvelimprevu
    Else
        .Cells(premierrang, mois + 3).Value = nouvelimprevu
        .Cells(premierrang, 2).Value = TitreImprevu
    End If
    End With

A+

Bonjour,

ben non ça ne pas...Ca sort du if ici
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then
Exit Sub

Et je ne comprends pas cette commande
Application.EnableEvents = False

Si elle est présente, ça ne se déclenche pas, alors comment ça marche...

Je suis perdu maintenant...

Cordialement
 

Phillip

XLDnaute Occasionnel
Re : VBa : sélectionner une ligne entière par variables

Bonjour,

ben non ça ne pas...Ca sort du if ici
If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then
Exit Sub

Et je ne comprends pas cette commande
Application.EnableEvents = False

Si elle est présente, ça ne se déclenche pas, alors comment ça marche...

Je suis perdu maintenant...

Cordialement

Bon j'ai enlevé les application.enableevent false et true, et ça marche !

Merci de ton aide

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat