Arrêter l'ajout de lignes de la VBA

Bonjour à tous!

Je suis novice en VBA...

J'ai voulu créer une VBA pour que des lignes se crée dès qu'une valeur est saisie dans une colonne et pour que la VBA s'exécute automatiquement. Cependant, et c'est le problème, la VBA s'exécute à chaque fois que je clique sur une case. Je voudrais qu'elle ne s'exécute que quand je rentre une valeur dans la colonne G.

Voici le code que j'ai utilisé:

Sub AjouterLignes_Fusionnercells()
Dim ws As Worksheet
  Dim lastRow As Long
  Dim numRows As Long
  Dim i As Long
  Dim currentCellValue As Variant
  ' Spécifie la feuille de calcul
  Set ws = ThisWorkbook.Sheets("EVENTS") ' Assurez-vous que le nom de votre feuille est correct
  ' Trouve la dernière ligne avec des données dans la colonne G
  lastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
  ' Vérifie si la dernière cellule de la colonne G contient une valeur numérique
  currentCellValue = ws.Cells(lastRow, "G").Value
  If IsNumeric(currentCellValue) Then
      ' Récupère le nombre de lignes à ajouter
      numRows = currentCellValue - 1 ' Ajoute n-1 lignes
      ' Insère les lignes à partir de la dernière cellule de la colonne G
      For i = 1 To numRows
          ws.Rows(lastRow + i).Insert Shift:=xlDown
          ' Fusionne les cellules de la colonne G pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "G"), ws.Cells(lastRow, "G")).Merge
          ' Fusionne les cellules de la colonne F pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "F"), ws.Cells(lastRow, "F")).Merge
               ' Fusionne les cellules de la colonne E pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "E"), ws.Cells(lastRow, "E")).Merge
               ' Fusionne les cellules de la colonne D pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "D"), ws.Cells(lastRow, "D")).Merge
               ' Fusionne les cellules de la colonne C pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "C"), ws.Cells(lastRow, "C")).Merge
               ' Fusionne les cellules de la colonne B pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "B"), ws.Cells(lastRow, "B")).Merge
               ' Fusionne les cellules de la colonne A pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "A"), ws.Cells(lastRow, "A")).Merge
               ' Fusionne les cellules de la colonne T pour chaque ligne ajoutée
               ws.Range(Cells(lastRow + i, "T"), ws.Cells(lastRow, "T")).Merge
      Next i
       End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
AjouterLignes_Fusionnercells
End Sub

Bonjour

Je suppose que votre souci concerne Excel car votre profil mentionne GOOGLE SHEETS.


Je voudrais qu'elle ne s'exécute que quand je rentre une valeur dans la colonne G.

Remplacez votre code SelcctionChange par celui ci-dessous

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("G:G")) Is Nothing Then
    AjouterLignes_Fusionnercells
End If
End Sub

Rem : maintenant je ne connais pas votre fichier mais les fusions ...VBA aime pas. Vous risquez souvent des soucis.

Cordialement

Merci de votre aide Dan! Ca fonctionne!!

C'est la seule solution que j'ai trouvé pour n'ajouter des lignes que sur certaines colonnes, Vous avez d'autres solutions à me proposer qui m'éviteraient des soucis à venir?

Bonjour

Pourquoi avoir dupliqué le fil ? --> https://forum.excel-pratique.com/excel/arreter-l-ajout-de-lignes-de-la-vba-192357


C'est la seule solution que j'ai trouvé pour n'ajouter des lignes que sur certaines colonnes, Vous avez d'autres solutions à me proposer qui m'éviteraient des soucis à venir?

Vous parlez des fusions ?
Si oui, il faudrait comprendre pourquoi vous fusionnez.
Mais sans voir le fichier je ne peux pas vous en dire plus.
Si vous le postez, veillez à ne pas laisser de données sensibles

Crdlt

Si terminé pensez à

Edit : ce que vous devez comprendre c'est que si par exemple vous fusionnez E1 et E2, Excel considère toujours E1 comme étant la référence à utiliser. Donc si vous faites référence à E2 dans VBA ou une formule, Excel verra une cellule vide. Du coup, cela peut parfois vous posez des soucis à l'utilisation.

Bonjour Dan,

Je n'ai pas fait exprès de dupliquer le fil et je n'ai pas réussi à en supprimer un...

Concernant ma VBA, tout est OK je vous remercie. Mais j'aimerais que quand je supprime le chiffre de la colonne G les lignes créées se suppriment aussi, c'est possible?

Bonjour,

Je n'ai pas fait exprès de dupliquer le fil et je n'ai pas réussi à en supprimer un...

Vous ne pouvez pas supprimer un fil. Si tel est le cas, vous pouvez demander à un Modérateur ou à l'administrateur. Seuls eux peuvent le faire.

Je supprimerai l'autre fil.

Pour votre question, vous supprimez un chiffre où sur votre feuille ...à la dernière ligne en colonne G ou ailleurs ?
sans voir le fichier .... j'ai besoin de plus d'explications
exemple : vous supprimez par exemple le chiffre en G10 ou en G20, comment on peut savoir quelle sont les lignes à supprimer. Après G10 ou avant ??

Cordialement

Bonjour Dan,

Merci d'avoir supprimé l'autre fil.

Cependant je n'ai plus besoin de supprimer les lignes quand le chiffre de la colonne G change, je préfère qu'elles soient supprimées manuellement.

En revanche, j'ai un autre souci, est-il possible que la sélection d'un nom dans la colonne H de l'onglet "events" enclenche le copie/colle des informations entrées dans les cellules I à S au tableau correspondant de l'onglet "contract FU"?

Je vous joins le fichier pour que vous puissiez comprendre ce que je veux dire.

En vous remerciant,

Bonjour

Cependant je n'ai plus besoin de supprimer les lignes quand le chiffre de la colonne G change, je préfère qu'elles soient supprimées manuellement.

En revanche, j'ai un autre souci, est-il possible que la sélection d'un nom dans la colonne H de l'onglet "events" enclenche le copie/colle des informations entrées dans les cellules I à S au tableau correspondant de l'onglet "contract FU"?

Oui mais on copie I à S vers quelle colonne dans contrat FU et est-ce que cela doit remplacer les info déjà présentes ?
désolé mais votre fichier est sans données. Donc pas facile à comprendre

Autre point :dans votre feuille events, il y a plusieurs tableaux en colonne H, votre demande concerne toutes les lignes de chaque tableau ?

Rem :
- EVENTS : Ce n'est pas une bonne idée d'utiliser des noms existants en VBA pour nommer vos feuilles. Pour moi éviter...
- vous avez un code Private Sub Worksheet_Change(ByVal Target As Range) dans le module 1. Là c'est à supprimer absolument
- idéalement la sub AjouterLignes_Fusionnercells() doit se trouver dans un module et pas dans la feuille Events. donc à supprimer en fonction de ce que vous écrivez dans votre dernier post
- userform1, --> ne sert à rien dans votre projet. Qui plus est vous avez de nouveau le code Private Sub Worksheet_Change(... A supprimer

OK je vois ce que vous voulez dire.

J'ai utilisé cette VBA du coup pour répondre à ma question mais il y a 2 choses qui me bloquent:

- la copie ne se fait pas automatiquement une fois la ligne coller dans contract fu.

-ça ne copie pas toutes les lignes portant le nom du médecin correspondant l'une après l'autre .

Sub CopierDonnees()

    Dim wsEvent As Worksheet
    Dim wsContraFu As Worksheet
    Dim lastRowEvent As Long
    Dim lookupName As String
    Dim i As Long, j As Long
    Dim copyRange As Range
    Dim destRow As Long
    Dim tableRange As Range
    Dim tableName As String

    ' Définir les feuilles de travail
    Set wsEvent = ThisWorkbook.Sheets("Event")
    Set wsContraFu = ThisWorkbook.Sheets("CONTRACT-FU")

    ' Trouver la dernière ligne avec des données dans la feuille Event
    lastRowEvent = wsEvent.Cells(wsEvent.Rows.Count, "I").End(xlUp).Row

    ' Parcourir les lignes de la feuille Event pour copier les données correspondantes
    For i = 2 To lastRowEvent ' Commencer à la ligne 2, en supposant les données commencent à la ligne 2

        ' Obtenir le nom sélectionné dans la colonne I de la feuille Event
        lookupName = wsEvent.Cells(i, "I").Value

        ' Vérifier si le nom existe dans la feuille CONTRACT-FU et identifier le tableau correspondant
        On Error Resume Next
        tableName = wsContraFu.Range("A:A").Find(lookupName, LookIn:=xlValues, LookAt:=xlWhole).Value
        On Error GoTo 0

        If tableName <> "" Then ' Si le nom correspond à un tableau dans CONTRACT-FU

            ' Déterminer la plage à copier dans la feuille Event (de la colonne I jusqu'à la fin de la ligne)
            Set copyRange = wsEvent.Range(wsEvent.Cells(i, "I"), wsEvent.Cells(i, wsEvent.Columns.Count).End(xlToLeft))

            ' Trouver la première ligne vide dans le tableau correspondant dans la feuille CONTRACT-FU
            Set tableRange = wsContraFu.Range("A:A").Find(tableName, LookIn:=xlValues, LookAt:=xlWhole).Offset(1, 0).EntireRow
            destRow = tableRange.Row

            ' Copier les données vers la feuille CONTRACT-FU
            copyRange.Copy wsContraFu.Cells(destRow, "A") ' Coller les données à partir de la colonne A dans CONTRACT-FU

            ' Mise à jour de la plage de données dans CONTRACT-FU
            Set tableRange = wsContraFu.Range("A:A").Find(tableName, LookIn:=xlValues, LookAt:=xlWhole).EntireRow
            Set tableRange = wsContraFu.Range(tableRange.Cells(1, 1), wsContraFu.Cells(tableRange.Row, wsContraFu.Columns.Count).End(xlToLeft))
            tableRange.Copy wsContraFu.Cells(destRow, "A")

        End If
    Next i

    ' Nettoyer le presse-papiers après la copie
    Application.CutCopyMode = False

    ' Message de confirmation
    MsgBox "Les données ont été copiées avec succès dans les tableaux correspondants de CONTRACT-FU.", vbInformation

End Sub

En vous remerciant,

re

Je m'étonne de votre question quand je vois les codes que vous mettez ici... d'autant que vous dites être novice... mé bon

Votre fichier ne contient pas assez de données pour effectuer un test à ce sujet.

A moins que je ne me trompe, vous avez ma réponse ici --> https://forum.excel-pratique.com/s/goto/1195512
Il suffit de remplacer G par H

Maintenant si c'est pour copier une série de données de la feuille Contrat vers Event, vous pourriez utiliser un filtre plutot qu'une boucle

Crdlt

Rechercher des sujets similaires à "arreter ajout lignes vba"