Revenir à la cellule de départ

tactic6

XLDnaute Impliqué
Bonjour le forum
dans mon appli j'ai crée une macro qui me permet d'insérer une ligne
voici son code
Code:
Sub nouvelleligne1()
    Dim iR&, i&, k&, Ak&
  Application.ScreenUpdating = False
  Worksheets("SAISIE").Unprotect
    iR = ActiveCell.Row
    Rows(iR).Insert
    For a = 15 To 42
        If IsEmpty(Cells(a, 3)) Then
        Cells(a, 3).FormulaLocal = "=SI(NON(ESTVIDE(B" & a & "));RECHERCHEV(B" & a & ";'liste des articles'!$A$2:$D$10000;2;FAUX);"""")"
        End If
Next
      For Z = 15 To 42
        If IsEmpty(Cells(Z, 9)) Then
        Cells(Z, 9).FormulaLocal = "=SI(NON(ESTVIDE(B" & Z & "));RECHERCHEV(B" & Z & ";'liste des articles'!$A$1:$D$10000;4;FAUX);"""")"
        End If
Next
      For j = 15 To 42
        If IsEmpty(Cells(j, 11)) Then
        Cells(j, 11).FormulaLocal = "=SI(NON(ESTVIDE(B" & j & "));RECHERCHEV(B" & j & ";'liste des articles'!$A$1:$D$10000;3;FAUX);"""")"
        End If
Next
    Range("B51:K51").Select
    Selection.Delete Shift:=xlUp
    Worksheets("SAISIE").Protect
    Application.ScreenUpdating = True

    End Sub
Cette macro me rajoute une ligne sur la cellule qui est sélectionnée et ensuite réécrit les formules et pour finir pour que mon tableau reste à la même taille me supprime une ligne en fin de tableau

Mes requêtes sont les suivantes :
-Comment faire pour que je revienne directement sur la cellule sélectionnée avant insertion de ligne
-Comment limiter l'insertion de ligne uniquement si la cellule sélectionnée est comprise entre B15 et B50
-Comment limiter l'insertion aux colonnes B à K ceci parce que j'ai des boutons de commande à droite de mon tableau et qu'actuellement à chaque insertion de ligne mes boutons descendent aussi

Merci et bonne journée
 

Banzai64

XLDnaute Accro
Re : Revenir à la cellule de départ

Bonjour

sans test essayes ce code

Code:
Sub nouvelleligne1()
  Dim iR&, i&, k&, Ak&
  If ActiveCell.Row < 15 Or ActiveCell.Row > 50 And ActiveCell.Column <> 2 Then Exit Sub
  Application.ScreenUpdating = False
  Worksheets("SAISIE").Unprotect
    iR = ActiveCell.Row
    Range("B" & iR & ":K" & iR).Insert Shift:=xlDown
    'Rows(iR).Insert
    For a = 15 To 42
        If IsEmpty(Cells(a, 3)) Then
        Cells(a, 3).FormulaLocal = "=SI(NON(ESTVIDE(B" & a & "));RECHERCHEV(B" & a & ";'liste des articles'!$A$2:$D$10000;2;FAUX);"""")"
        End If
    Next
    For Z = 15 To 42
      If IsEmpty(Cells(Z, 9)) Then
      Cells(Z, 9).FormulaLocal = "=SI(NON(ESTVIDE(B" & Z & "));RECHERCHEV(B" & Z & ";'liste des articles'!$A$1:$D$10000;4;FAUX);"""")"
      End If
    Next
    For j = 15 To 42
      If IsEmpty(Cells(j, 11)) Then
      Cells(j, 11).FormulaLocal = "=SI(NON(ESTVIDE(B" & j & "));RECHERCHEV(B" & j & ";'liste des articles'!$A$1:$D$10000;3;FAUX);"""")"
      End If
    Next
    Range("B51:K51").Delete Shift:=xlUp
    Worksheets("SAISIE").Protect
    Application.ScreenUpdating = True
End Sub
 

Fred0o

XLDnaute Barbatruc
Re : Revenir à la cellule de départ

Bonjour tactic et Banzai,

Puisque j'ai testé, je propose :
Code:
Sub nouvelleligne1()
    Dim iR, i&, k&, Ak&, a, j, Z, CDep
    Application.ScreenUpdating = False
    Worksheets("SAISIE").Unprotect
    CDep = ActiveCell.Address
    iR = Range(Cells(ActiveCell.Row, 2), Cells(ActiveCell.Row, 11)).Address
    If ActiveCell.Row >= 15 And activecelle.Row <= 50 Then
        Range(iR).Insert Shift:=xlDown
        Range("B51:K51").Delete Shift:=xlUp
        Range(CDep).Select
    End If
    For a = 15 To 42
        If IsEmpty(Cells(a, 3)) Then
            Cells(a, 3).FormulaLocal = "=SI(NON(ESTVIDE(B" & a & "));RECHERCHEV(B" & a & ";'liste des articles'!$A$2:$D$10000;2;FAUX);"""")"
        End If
    Next
      For Z = 15 To 42
        If IsEmpty(Cells(Z, 9)) Then
            Cells(Z, 9).FormulaLocal = "=SI(NON(ESTVIDE(B" & Z & "));RECHERCHEV(B" & Z & ";'liste des articles'!$A$1:$D$10000;4;FAUX);"""")"
        End If
    Next
      For j = 15 To 42
        If IsEmpty(Cells(j, 11)) Then
            Cells(j, 11).FormulaLocal = "=SI(NON(ESTVIDE(B" & j & "));RECHERCHEV(B" & j & ";'liste des articles'!$A$1:$D$10000;3;FAUX);"""")"
        End If
    Next
    Worksheets("SAISIE").Protect
    Application.ScreenUpdating = True

End Sub

A+
 
Dernière édition:

tactic6

XLDnaute Impliqué
Re : Revenir à la cellule de départ

Banzai une fois encore ton code me convient parfaitement
j'ai l'impression que tu arrives à lire dans mon esprit
@Fred0o
Merci infiniment pour ton aide
ton code est intéressant je vais tacher de m'instruire avec
 

tactic6

XLDnaute Impliqué
Re : Revenir à la cellule de départ

Bonsoir le forum
Je fais remonter le fil car j'ai un petit probleme
Il se trouve que dans la colonne J j'ai une formule
Code:
=SI(Iu<>"";Hu*Iu;"")
u étant le numéro de la ligne selectionnée
Exemple: pour la ligne 18 on aurait
Code:
=SI(I18<>"";H18*I18;"")

j'ai voulu modifier le code de Banzai ci dessus pour en tenir compte
j'y ai donc ajouté ce bout de code
Code:
For u = 15 To 42
      If IsEmpty(Cells(u, 10)) Then
      [COLOR="red"]Cells(u, 10).FormulaLocal = "=SI(I" & u & "<>"";H" & u & "*I" & u & ")"[/COLOR]
      End If
 Next
mais j'ai une erreur 1004 à la ligne en rouge

pourriez vous m'aiguiller svp

Merci
Bonne soirée
 

Fred0o

XLDnaute Barbatruc
Re : Revenir à la cellule de départ

Bonjour Tactic,

Essaie en remplaçant le SI par IF, comme ceci :
Code:
[COLOR=red][COLOR=blue]Cells(u, 10).FormulaLocal = "=[/COLOR]IF[COLOR=blue](I" & u & "<>"";H" & u & "*I" & u & ")"[/COLOR][/COLOR]

A+
 

Fred0o

XLDnaute Barbatruc
Re : Revenir à la cellule de départ

Re-Bonsoir,

Je viens de tester et en effet cela ne fonctionnait pas. Voici la modification qui fonctionne chez moi (Là, j'ai testé !)

Code:
Range("J" & u).FormulaLocal = "=SI(I" & u & "<>"""";H" & u & "*I" & u & ";"""")"

A+
 

Fred0o

XLDnaute Barbatruc
Re : Revenir à la cellule de départ

Re-bonsoir,

Là, c'est difficile de te répondre avec juste une instruction de la macro.

Postes-nous la macro complète et on pourra voir pourquoi tu ne reviens pas à la cellule de départ. Les instructions que je t'ai données ne modifient pas la position actuelle du pointeur.

A+
 

tactic6

XLDnaute Impliqué
Re : Revenir à la cellule de départ

Re
Voici donc le code complet
Code:
Sub nouvelleligne1()
    Dim iR&, i&, k&, Ak&
  Application.ScreenUpdating = False
  If ActiveCell.Row < 15 Or ActiveCell.Row > 50 And ActiveCell.Column <> 2 Then Exit Sub
  Application.ScreenUpdating = False
  Worksheets("SAISIE").Unprotect
    iR = ActiveCell.Row
    Range("B" & iR & ":K" & iR).Insert Shift:=xlDown
      For a = 15 To 50
        If IsEmpty(Cells(a, 3)) Then
        Cells(a, 3).FormulaLocal = "=SI(NON(ESTVIDE(B" & a & "));RECHERCHEV(B" & a & ";'liste des articles'!$A$2:$D$10000;2;FAUX);"""")"
        End If
    Next
    For Z = 15 To 50
      If IsEmpty(Cells(Z, 9)) Then
      Cells(Z, 9).FormulaLocal = "=SI(NON(ESTVIDE(B" & Z & "));RECHERCHEV(B" & Z & ";'liste des articles'!$A$1:$D$10000;4;FAUX);"""")"
      
      
      End If
    Next
    For j = 15 To 50
      If IsEmpty(Cells(j, 11)) Then
      Cells(j, 11).FormulaLocal = "=SI(NON(ESTVIDE(B" & j & "));RECHERCHEV(B" & j & ";'liste des articles'!$A$1:$D$10000;3;FAUX);"""")"
      End If
    Next
    [COLOR="sienna"]For u = 15 To 50
      If IsEmpty(Cells(u, 10)) Then
      Cells(u, 10).FormulaLocal = "=SI(I" & u & "<>"""";H" & u & "*I" & u & ";"""")"
      End If
    Next[/COLOR]
    Range("B51:K51").Delete Shift:=xlUp
    Range("B15").Select
    Worksheets("SAISIE").Protect
    Application.ScreenUpdating = True

End Sub

Bien sur c'est pareil avec
Code:
Sub nouvelleligne1()
    Dim iR&, i&, k&, Ak&
  Application.ScreenUpdating = False
  If ActiveCell.Row < 15 Or ActiveCell.Row > 50 And ActiveCell.Column <> 2 Then Exit Sub
  Application.ScreenUpdating = False
  Worksheets("SAISIE").Unprotect
    iR = ActiveCell.Row
    Range("B" & iR & ":K" & iR).Insert Shift:=xlDown
     For a = 15 To 50
        If IsEmpty(Cells(a, 3)) Then
        Cells(a, 3).FormulaLocal = "=SI(NON(ESTVIDE(B" & a & "));RECHERCHEV(B" & a & ";'liste des articles'!$A$2:$D$10000;2;FAUX);"""")"
        End If
    Next
    For Z = 15 To 50
      If IsEmpty(Cells(Z, 9)) Then
      Cells(Z, 9).FormulaLocal = "=SI(NON(ESTVIDE(B" & Z & "));RECHERCHEV(B" & Z & ";'liste des articles'!$A$1:$D$10000;4;FAUX);"""")"
      
      
      End If
    Next
    For j = 15 To 50
      If IsEmpty(Cells(j, 11)) Then
      Cells(j, 11).FormulaLocal = "=SI(NON(ESTVIDE(B" & j & "));RECHERCHEV(B" & j & ";'liste des articles'!$A$1:$D$10000;3;FAUX);"""")"
      End If
    Next
   [COLOR="sienna"] For u = 15 To 50
      Range("J" & u).FormulaLocal = "=SI(I" & u & "<>"""";H" & u & "*I" & u & ";"""")"
    Next[/COLOR]
    Range("B51:K51").Delete Shift:=xlUp
    Range("B15").Select
    Worksheets("SAISIE").Protect
    Application.ScreenUpdating = True

End Sub

Merci
 

Discussions similaires