Dernière ligne

Bonsoir à tous

Je ne trouve pas la solution pour pouvoir avoir le texte qui vient d'une cbo " zone 1" dans la cellule "A4"

Cela fonctionne uniquement si j'ai au préalable sélectionner la cellule "A4" avant de lancer la macro

Une idée du pourquoi svp

Merci pour votre aide

Cdt

Ledzep

capture
Private Sub BtnAjout_Click()

Dim Derligne As Long
Dim f As Worksheet

Set f = ThisWorkbook.Sheets("LISTING")

        'PROCEDURE AJOUT ENREGISTREMENT DANS LA BASE

        Sheets("LISTING").Activate

        Derligne = f.Range("A" & Rows.Count).End(xlUp).Row 'On se Positionne sur la dernière Ligne non Vide

        Selection.Offset(1, 0).Select             'On se Décale d'une ligne vers le bas

        ActiveCell = CboSecteur_Exploitation.Value
        ActiveCell.Offset(0, 1).Value = CboEquipement
        ActiveCell.Offset(0, 2).Value = CboSocInt
        ActiveCell.Offset(0, 3).Value = CboSocExt
        ActiveCell.Offset(0, 4).Value = TxtNomContact
        ActiveCell.Offset(0, 5).Value = TxtNumTel
        ActiveCell.Offset(0, 6).Value = TxtEmail
        ActiveCell.Offset(0, 7).Value = TxtDDO
        ActiveCell.Offset(0, 8).Value = TxtDFO

End Sub

Bonsoir Ledzep,

essaye ce code VBA :

Option Explicit

Private Sub BtnAjout_Click()
  Dim lig&
  Worksheets("LISTING").Activate
  Application.ScreenUpdating = 0
  'PROCEDURE AJOUT ENREGISTREMENT DANS LA BASE
  lig = Cells(Rows.Count, 1).End(3).Row
  Do While Cells(lig, 1) = "": lig = lig - 1: Loop
  With Cells(lig + 1, 1)
    .Value = CboSecteur_Exploitation.Value
    .Offset(, 1).Value = CboEquipement
    .Offset(, 2).Value = CboSocInt
    .Offset(, 3).Value = CboSocExt
    .Offset(, 4).Value = TxtNomContact
    .Offset(, 5).Value = TxtNumTel
    .Offset(, 6).Value = TxtEmail
    .Offset(, 7).Value = TxtDDO
    .Offset(, 8).Value = TxtDFO
  End With
End Sub

dhany

autre code VBA :

Option Explicit

Private Sub BtnAjout_Click()
  Dim lig&
  Worksheets("LISTING").Activate
  Application.ScreenUpdating = 0
  'PROCEDURE AJOUT ENREGISTREMENT DANS LA BASE
  lig = 4: Do While Cells(lig, 1) <> "": lig = lig + 1: Loop
  With Cells(lig, 1)
    .Value = CboSecteur_Exploitation.Value
    .Offset(, 1).Value = CboEquipement
    .Offset(, 2).Value = CboSocInt
    .Offset(, 3).Value = CboSocExt
    .Offset(, 4).Value = TxtNomContact
    .Offset(, 5).Value = TxtNumTel
    .Offset(, 6).Value = TxtEmail
    .Offset(, 7).Value = TxtDDO
    .Offset(, 8).Value = TxtDFO
  End With
End Sub

si un de mes 2 codes VBA a réglé ton problème : merci de passer le sujet en résolu.

sinon, envoie ton fichier (et pas une copie d'écran )

dhany

Bonjour,

A tester :

Private Sub BtnAjout_Click()

    Dim Lig As Long
    Dim f As Worksheet

    Set f = ThisWorkbook.Sheets("LISTING")

    'PROCEDURE AJOUT ENREGISTREMENT DANS LA BASE
    Lig = f.Cells(Rows.Count, 1).End(xlUp).Row + 1 'On défini la 1ère Ligne Vide (+1) sur colonne A

    f.Cells(Lig, 1).Value = CboSecteur_Exploitation.Value
    f.Cells(Lig, 2).Value = CboEquipement
    f.Cells(Lig, 3).Value = CboSocInt
    f.Cells(Lig, 4).Value = CboSocExt
    f.Cells(Lig, 5).Value = TxtNomContact
    f.Cells(Lig, 6).Value = TxtNumTel
    f.Cells(Lig, 7).Value = TxtEmail
    f.Cells(Lig, 8).Value = TxtDDO
    f.Cells(Lig, 9).Value = TxtDFO

End Sub

Bonjour à tous

Merci pour votre aide

J'ai utiliser les 3 méthodes, ce qui m'a permis de continuer mon apprentissage (je suis encore très loin de vous).

J'ai oublié de vous précisez ds feuille ThisWorkbook.Sheets("LISTING") le tableau est déclaré ( PJ déclaration données)

Donc la dernière ligne s'incrémente en dehors du tableau.

Une idée Theze

Pour les 2 propositions de dhany , j'ai essayé les 2 méthodes, mais je suis encore dessus (le tps me manque pour la vérification horaires décalés)

Ds tout les cas votre aide est précieuse pour mon apprentissage, puisque j'ai 3 méthodes à analysées

Merci à vous

Et bonne fin de journée à tous

Ledzep

theze declaration donnees

Bonjour ledzep,

tu a écrit :

le tableau est déclaré ... Donc la dernière ligne s'incrémente en dehors du tableau.

pour que la dernière ligne ajoutée fasse partie de ton tableau structuré, regarde cette option d'Excel :

etendre les formules

attention : regarde aussi ces 2 autres options de la vérification d'orthographe :

tableaux

c'est selon Excel 2007 ; à toi d'trouver l'équivalent sur ton Excel 2010.

dhany

Bonjour,

Essaie ainsi :

Private Sub BtnAjout_Click()
Dim lo As ListObject
Dim rCell As Range
Dim bAutoExpand As Boolean, bAutoFill As Boolean
    With Application.AutoCorrect
        bAutoExpand = .AutoExpandListRange
        bAutoFill = .AutoFillFormulasInLists
        .AutoExpandListRange = True
        .AutoFillFormulasInLists = True
    End With
    Set lo = Worksheets("LISTING").ListObjects("Tableau7")
    With lo
        If .InsertRowRange Is Nothing Then
            Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            Set rCell = .InsertRowRange.Cells(1)
        End If
    End With
    With rCell
        .Value = CboSecteur_Exploitation.Value
        .Offset(, 1).Value = CboEquipement
        .Offset(, 1).Value = CboSocInt
        .Offset(, 1).Value = CboSocExt
        .Offset(, 1).Value = TxtNomContact
        .Offset(, 1).Value = TxtNumTel
        .Offset(, 1).Value = TxtEmail
        .Offset(, 1).Value = TxtDDO
        .Offset(, 1).Value = TxtDFO
    End With
    With Application.AutoCorrect
        .AutoExpandListRange = bAutoExpand
        .AutoFillFormulasInLists = bAutoFill
    End With
End Sub

Bonsoir à tous

Dhany

J'ai vérifié mes options , tout est comme tu le demandes.

Jean-Eric

Corrige le soucis lié au tableau que j'avais déclaré.

Par contre, je vais dire wah si tu as le tps stp pour me décrire ton code, je te remercie d'avance.

Pour les trois premières propositions , cela fonctionne s'il n'y a pas de tableau déclaré.

Donc merci à vous pour cette aide.

Bonne soirée à vous (tous)

A plus sur le forum

Ledzep

Bonjour,

est ce suffisant ?

Option Explicit

Private Sub BtnAjout_Click()
'déclaration des variables
Dim lo As ListObject
Dim rCell As Range
Dim bAutoExpand As Boolean, bAutoFill As Boolean
    'options de l'application pour la correction automatique
    '(Options Excel, Vérification...)
    With Application.AutoCorrect
        'on mémorise l'état des 2 propriétés
        bAutoExpand = .AutoExpandListRange      'insertion de lignes dans les listes ou tables (tableaux)
        bAutoFill = .AutoFillFormulasInLists    'formules de remplissage colonnes calculées
        .AutoExpandListRange = True             'on autorise...
        .AutoFillFormulasInLists = True         'on autorise...
    End With
    'initialisation de la table (tableau)
    Set lo = Worksheets("LISTING").ListObjects("Tableau7")
    With lo
        'si la table comporte des données
        If .InsertRowRange Is Nothing Then
            '1ère. cellule vide (colonne 1 de la table,nombre de lignes de la table+1)
            Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            '1ère cellule colonne 1 de la table
            Set rCell = .InsertRowRange.Cells(1)
        End If
    End With
    'restitution des données dans la feuille de calcul
    With rCell
        .Value = CboSecteur_Exploitation.Value
        .Offset(, 1).Value = CboEquipement
        .Offset(, 2).Value = CboSocInt
        .Offset(, 3).Value = CboSocExt
        .Offset(, 4).Value = TxtNomContact
        .Offset(, 5).Value = TxtNumTel
        .Offset(, 6).Value = TxtEmail
        .Offset(, 7).Value = TxtDDO
        .Offset(, 8).Value = TxtDFO
    End With
    'on rétablit les valeurs des 2 propriétés de la correction automatique
    With Application.AutoCorrect
        .AutoExpandListRange = bAutoExpand
        .AutoFillFormulasInLists = bAutoFill
    End With
End Sub

Bonjour,

Ou avec ListRow :

Private Sub générer_Click()

    Dim Lig As ListRow

    With Worksheets("LISTING").ListObjects("Tableau7")

        Set Lig = .ListRows.Add 'ajout d'une ligne

        'entrée des données
        Lig.Range(, 1).Value = CboSecteur_Exploitation.Value
        Lig.Range(, 2).Value = CboEquipement
        Lig.Range(, 3).Value = CboSocInt
        Lig.Range(, 4).Value = CboSocExt
        Lig.Range(, 5).Value = TxtNomContact
        Lig.Range(, 6).Value = TxtNumTel
        Lig.Range(, 7).Value = TxtEmail
        Lig.Range(, 8).Value = TxtDDO
        Lig.Range(, 9).Value = TxtDFO

    End With

End Sub

Bonjour à tous

Jean-Eric

Merci pour ton explication, je t'avoue que c'est plus clair pour moi maintenant.

La procédure est pour moi plus complexe mais le détail va me permettre de la comprendre plus facilement.

Theze

La nouvelle procédure fonctionne comme la précédente que tu m'as proposé.

La chose importante pour moi, c que cette nouvelle procédure garde le format "texte" déclarée ds les propriétés de chaque textbox ou autres de l'userform.

Dhany

Je ne vous ai pas oublié.

Merci Pour vos propositions.

Merci de votre aide qui va me permette d'avancer ds ma réalisation.

A plus sur le forum

Ledzep

Pour la mettre en résolu , j'attends mercredi matin

ok, ça peut attendre.

Bonsoir à tous

Voila je valide ce post en résolu

Merci à ceux qui mon aidé

A plus sur le forum

Ledzep

merci pour avoir passé le sujet en résolu !

dhany

Rechercher des sujets similaires à "derniere ligne"