Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Enregistrement Tableau via VBA

11 réponses
Avatar
Corent38
Bonjour,

Je vais essayer d'être le plus précis possible pour ne pas avoir à joindre mon fichier Excel qui contient trop de données sensible..

Je travaille sur un fichier Excel (que je n'ai pas créé) assez complexe avec beaucoup de VBA.

Sur ce fichier, il y a plusieurs feuilles dont une qui s'appelle "feuille enregistrement" où l'on va enregistrer plusieurs informations à partir de liste définie avant d'appuyer sur un bouton enregistrement et une autre feuille qui s'appelle "Contrôles" où l'on va retrouver toutes les informations qui ont été enregistrées, ligne par ligne.

Le problème survient lorsque je vais dans la feuille "Contrôles" et que je supprime toutes les données.
Les données sont supprimées mais lorsque j'effectue un nouvel enregistrement, au lieu de redémarrer le tableau à la ligne 2, le tableau commence à la ligne 1500, à la suite du précédent qui vient d'être supprimé...

Quels solutions ?

Voici le début de la macro. Je suppose que c'est par ici qu'il y a des modifications à effectuer..

Sub Enregistrement()
'

Application.ScreenUpdating = False

Sheets("Contr?les").Select

Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1

Merci d'avance pour vos réponses !

10 réponses

1 2
Avatar
Jacquouille
Bonjour Corent
Deus feuilles:
1) enregistrement
2) contrôle
Un bouton qui est situé dans la feuille enregistrement, et qui, via une
macro, enregistre les données dans contrôle.
- AMHA, voir dans cette macro s'il n'y a pas une donnée "dernière ligne de
la feuille contrôle" qui faudrait réinitialiser avec nouvel enregistrement
- Voir peut-être si tout est bien effacé. peut-être supprimer les lignes
entières au lieu d'effacer les données. parfois, il reste un petit espace,
invisible.... qui emm*** le truc.
- Eventuellement, faire une copie du dossier, puis effacer les données dans
contrôle (travail sur la copie), puis vérifier si toutes les cel sont bien
vides.
- Si ça va pô, prendre un plus gros marteau.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Corent38" a écrit dans le message de groupe de discussion :
Bonjour,
Je vais essayer d'être le plus précis possible pour ne pas avoir à joindre
mon
fichier Excel qui contient trop de données sensible..
Je travaille sur un fichier Excel (que je n'ai pas créé) assez complexe avec
beaucoup de VBA.
Sur ce fichier, il y a plusieurs feuilles dont une qui s'appelle "feuille
enregistrement" où l'on va enregistrer plusieurs informations à partir de
liste
définie avant d'appuyer sur un bouton enregistrement et une autre feuille
qui
s'appelle "Contrôles" où l'on va retrouver toutes les informations qui ont
été
enregistrées, ligne par ligne.
Le problème survient lorsque je vais dans la feuille "Contrôles" et que je
supprime toutes les données.
Les données sont supprimées mais lorsque j'effectue un nouvel
enregistrement, au
lieu de redémarrer le tableau à la ligne 2, le tableau commence à la ligne
1500,
à la suite du précédent qui vient d'être supprimé...
Quels solutions ?
Voici le début de la macro. Je suppose que c'est par ici qu'il y a des
modifications à effectuer..
Sub Enregistrement()
'
Application.ScreenUpdating = False
Sheets("Contr?les").Select
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Merci d'avance pour vos réponses !
Avatar
Jc
Après mûre réflexion, Corent38 a écrit :
Bonjour,
Je vais essayer d'être le plus précis possible pour ne pas avoir à joindre
mon fichier Excel qui contient trop de données sensible..
Je travaille sur un fichier Excel (que je n'ai pas créé) assez complexe avec
beaucoup de VBA.
Sur ce fichier, il y a plusieurs feuilles dont une qui s'appelle "feuille
enregistrement" où l'on va enregistrer plusieurs informations à partir de
liste définie avant d'appuyer sur un bouton enregistrement et une autre
feuille qui s'appelle "Contrôles" où l'on va retrouver toutes les
informations qui ont été enregistrées, ligne par ligne.
Le problème survient lorsque je vais dans la feuille "Contrôles" et que je
supprime toutes les données.
Les données sont supprimées mais lorsque j'effectue un nouvel enregistrement,
au lieu de redémarrer le tableau à la ligne 2, le tableau commence à la ligne
1500, à la suite du précédent qui vient d'être supprimé...

Bonjour,
J'ai déja rencontré un problème de ce type même si le contexre n'est
pas le même.
Effacer ne suffisait pas, il me fallait supprimer les lignes
concernées.
Peut-être une piste.
--
______________________________________________
Jc
Avatar
corent38
Le jeudi 20 Décembre 2018 à 16:07 par Corent38 :
Bonjour,
Je vais essayer d'être le plus précis possible pour ne pas avoir
à joindre mon fichier Excel qui contient trop de données
sensible..
Je travaille sur un fichier Excel (que je n'ai pas créé) assez
complexe avec beaucoup de VBA.
Sur ce fichier, il y a plusieurs feuilles dont une qui s'appelle "feuille
enregistrement" où l'on va enregistrer plusieurs informations
à partir de liste définie avant d'appuyer sur un bouton
enregistrement et une autre feuille qui s'appelle "Contrôles"
où l'on va retrouver toutes les informations qui ont été
enregistrées, ligne par ligne.
Le problème survient lorsque je vais dans la feuille
"Contrôles" et que je supprime toutes les données.
Les données sont supprimées mais lorsque j'effectue un nouvel
enregistrement, au lieu de redémarrer le tableau à la ligne 2, le
tableau commence à la ligne 1500, à la suite du
précédent qui vient d'être supprimé...
Quels solutions ?
Voici le début de la macro. Je suppose que c'est par ici qu'il y a des
modifications à effectuer..
Sub Enregistrement()
'
Application.ScreenUpdating = False
Sheets("Contr?les").Select
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Merci d'avance pour vos réponses !
Bonjour,
Merci pour vos réponses rapides !
En effet, supprimer les lignes résout le problème.
Mais la source de données des tableaux croisés dynamique d'une 3ème feuille n'est plus à jour et la macro d'une 4ème feuille ne fonctionne plus…
Je m'y connais pas assez en VBA pour travailler dessus..
Avatar
MichD
A )
Est-ce que l'extension du fichier est .xls ou .xlsm ?
B )
Par quelle manipulation effaces-tu les données? Est-ce que la feuille
est totalement vide?
C )
Est-ce que cette plage de données est définie comme étant un "TABLEAU" ?
D )
Dans la macro, lorsque tu as effacé les données, quelle est la valeur
de la variable "DernLigne ?
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Msgbox DernLigne
D )
Dans un fichier où il y a plusieurs macros, sans voir ces dernières, il
est difficile de savoir si l'une d'entre elles interfère avec ce que tu
tentes de faire!
MichD
Avatar
corent38
Le vendredi 21 Décembre 2018 à 12:31 par MichD :
A )
Est-ce que l'extension du fichier est .xls ou .xlsm ?
B )
Par quelle manipulation effaces-tu les données? Est-ce que la feuille
est totalement vide?
C )
Est-ce que cette plage de données est définie comme étant
un "TABLEAU" ?
D )
Dans la macro, lorsque tu as effacé les données, quelle est la
valeur
de la variable "DernLigne ?
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Msgbox DernLigne
D )
Dans un fichier où il y a plusieurs macros, sans voir ces
dernières, il
est difficile de savoir si l'une d'entre elles interfère avec ce que tu
tentes de faire!
MichD
Pour répondre à tes questions :
A) L'extension du fichier est .xlsm.
B) J'ai utilisé 2 manipulations différentes pour effacer les données pour le même résultat. Soit j'efface les lignes soit je sélectionne les données que je veux supprimer et j'efface. La feuille n'est pas vide. Il reste au moins la 1ère ligne avec les en têtes de colonnes et pour la seconde manipulation, il reste aussi 2 formules dans 2 colonnes.
C) La plage de données est bien un tableau. Lorsque j'efface les données et que j'en enregistre de nouvelle, elles viennent se coller à la première ligne à l'extérieur du tableau.
D) La variable de la dernière ligne est la suivante :
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
E) Je sais bien que c'est compliqué voir infaisable sans voir les macros mais je ne peux vraiment pas le mettre en ligne.
Merci de ton aide, je vais continuer à creuser de mon côté ! :)
Avatar
MichD
Le 26/déc./2018 à 05:54, corent38 a écrit :
Le vendredi 21 Décembre 2018 à 12:31 par MichD :
A )
Est-ce que l'extension du fichier est .xls ou .xlsm ?
B )
Par quelle manipulation effaces-tu les données? Est-ce que la feuille
est totalement vide?
C )
Est-ce que cette plage de données est définie comme étant
un "TABLEAU" ?
D )
Dans la macro, lorsque tu as effacé les données, quelle est la
valeur
de la variable "DernLigne ?
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Msgbox DernLigne
D )
Dans un fichier où il y a plusieurs macros, sans voir ces
dernières, il
est difficile de savoir si l'une d'entre elles interfère avec ce que tu
tentes de faire!
MichD

Pour répondre à tes questions :
A) L'extension du fichier est .xlsm.
B) J'ai utilisé 2 manipulations différentes pour effacer les données pour le
même résultat. Soit j'efface les lignes soit je sélectionne les données que je
veux supprimer et j'efface. La feuille n'est pas vide. Il reste au moins la 1ère
ligne avec les en têtes de colonnes et pour la seconde manipulation, il reste
aussi 2 formules dans 2 colonnes.
C) La plage de données est bien un tableau. Lorsque j'efface les données et que
j'en enregistre de nouvelle, elles viennent se coller à la première ligne à
l'extérieur du tableau.
D) La variable de la dernière ligne est la suivante :
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
E) Je sais bien que c'est compliqué voir infaisable sans voir les macros mais je
ne peux vraiment pas le mettre en ligne.
Merci de ton aide, je vais continuer à creuser de mon côté ! :)

En VBA,
'Pour supprimer toutes les lignes de données contenues dans le tableau.
'Ce ne sont pas les lignes complètes de la feuille qui sont supprimées
'mais seulement les colonnes du tableau (table)
Worksheets("Feuil2).ListObjects("Tableau1").DataBodyRange.Rows.Delete
'Ccompte le nombre de ligne de données dans un tableau
X = Worksheets("Feuil2).ListObjects("Tableau1").ListRows.Count
'Détermine la dernière ligne du tableau qu'il y ait une donnée ou non.
With Worksheets("Feuil2)
X = .Range("A" & .Rows.Count).End(xlUp).Row
End With
Désolé, je n'ai jamais eu à traiter un classeur ayant la problématique
que tu rencontres.
MichD
Avatar
corent38
Le mercredi 26 Décembre 2018 à 19:14 par MichD :
Le 26/déc./2018 à 05:54, corent38 a écrit :
Le vendredi 21 Décembre 2018 à 12:31 par MichD :
A )
Est-ce que l'extension du fichier est .xls ou .xlsm ?
B )
Par quelle manipulation effaces-tu les données? Est-ce que la feuille
est totalement vide?
C )
Est-ce que cette plage de données est définie comme
étant
un "TABLEAU" ?
D )
Dans la macro, lorsque tu as effacé les données, quelle est la
valeur
de la variable "DernLigne ?
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Msgbox DernLigne
D )
Dans un fichier où il y a plusieurs macros, sans voir ces
dernières, il
est difficile de savoir si l'une d'entre elles interfère avec ce que
tu
tentes de faire!
MichD
Pour répondre à tes questions :
A) L'extension du fichier est .xlsm.
B) J'ai utilisé 2 manipulations différentes pour effacer les
données pour le
même résultat. Soit j'efface les lignes soit je
sélectionne les données que je
veux supprimer et j'efface. La feuille n'est pas vide. Il reste au moins la
1ère
ligne avec les en têtes de colonnes et pour la seconde manipulation, il
reste
aussi 2 formules dans 2 colonnes.
C) La plage de données est bien un tableau. Lorsque j'efface les
données et que
j'en enregistre de nouvelle, elles viennent se coller à la
première ligne à
l'extérieur du tableau.
D) La variable de la dernière ligne est la suivante :
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
E) Je sais bien que c'est compliqué voir infaisable sans voir les
macros mais je
ne peux vraiment pas le mettre en ligne.
Merci de ton aide, je vais continuer à creuser de mon côté
! :)
En VBA,
'Pour supprimer toutes les lignes de données contenues dans le tableau.
'Ce ne sont pas les lignes complètes de la feuille qui sont
supprimées
'mais seulement les colonnes du tableau (table)
Worksheets("Feuil2).ListObjects("Tableau1").DataBodyRange.Rows.Delete
'Ccompte le nombre de ligne de données dans un tableau
X = Worksheets("Feuil2).ListObjects("Tableau1").ListRows.Count
'Détermine la dernière ligne du tableau qu'il y ait une
donnée ou non.
With Worksheets("Feuil2)
X = .Range("A" & .Rows.Count).End(xlUp).Row
End With
Désolé, je n'ai jamais eu à traiter un classeur ayant la
problématique
que tu rencontres.
MichD
Si j'ai bien compris, la ligne (ci-dessous) permet de déterminer la dernière ligne du tableau qu'il y ait une donnée ou non.
X = .Range("A" & .Rows.Count).End(xlUp).Row
Est-ce que le problème ne viendrai pas de là ? Moi je souhaite savoir quelle est la 1ère ligne vide du tableau (à partir de la cellule A éventuellement) pour pouvoir y coller mes données ?
Si ça peut t'aider, je peux coller la macro (qui est très longue) dans un post..
Avatar
MichD
Si j'ai bien compris, la ligne (ci-dessous) permet de déterminer la dernière
ligne du tableau qu'il y ait une donnée ou non.
X = .Range("A" & .Rows.Count).End(xlUp).Row

Effectivement, si tu ajoutes 1, tu auras la première ligne vide sous le
tableau. X = .Range("A" & .Rows.Count).End(xlUp).Row + 1
Est-ce que le problème ne viendrai pas de là ? Moi je souhaite savoir quelle est
la 1ère ligne vide du tableau (à partir de la cellule A éventuellement) pour
pouvoir y coller mes données ?

As-tu essayé de supprimer toutes les données du tableau en utilisant
une ligne de code ressemblant à :
Worksheets("Feuil2).ListObjects("Tableau1").DataBodyRange.Rows.Delete
Si tu effectues un test par la suite pour connaître la première ligne
vide sous le tableau en utilisant, si le résultat attendu n'est pas au
rendez-vous, la suppression des données du tableau est problématique!
'--------------------------
With Worksheets("Feuil2)
X = .Range("A" & .Rows.Count).End(xlUp).Row
End With
'--------------------------
Si ça peut t'aider, je peux coller la macro (qui est très longue) dans un post..

Si tu le désires, publie ton classeur (seulement la feuille de calcul
contenant ledit tableau. Tu peux effacer les données, mais non supprimer
les lignes. Évidemment, le classeur doit contenir le code utilisé.
Emploie le site Cjoint.com pour publier ton fichier et retourne-nous
l'adresse obtenue ici.
Quelle est ta version d'Excel? Est-ce que les mises à jour ont été
effectuées?
MichD
Avatar
Fredo P.
Le 27/12/2018 à 12:28, corent38 a écrit :
Bonjour Corent
Pour voir: Essaye cette ligne: X = .Range("A1499").End(xlUp).Row
à la place de: X = .Range("A" & .Rows.Count).End(xlUp).Row
Le mercredi 26 Décembre 2018 à 19:14 par MichD :
Le 26/déc./2018 à 05:54, corent38 a écrit :
Le vendredi 21 Décembre 2018 à 12:31 par MichD :
A )
Est-ce que l'extension du fichier est .xls ou .xlsm ?
B )
Par quelle manipulation effaces-tu les données? Est-ce que la feuille
est totalement vide?
C )
Est-ce que cette plage de données est définie comme
étant
un "TABLEAU" ?
D )
Dans la macro, lorsque tu as effacé les données, quelle est la
valeur
de la variable "DernLigne ?
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Msgbox DernLigne
D )
Dans un fichier où il y a plusieurs macros, sans voir ces
dernières, il
est difficile de savoir si l'une d'entre elles interfère avec ce que
tu
tentes de faire!
MichD

Pour répondre à tes questions :
A) L'extension du fichier est .xlsm.
B) J'ai utilisé 2 manipulations différentes pour effacer les
données pour le
même résultat. Soit j'efface les lignes soit je
sélectionne les données que je
veux supprimer et j'efface. La feuille n'est pas vide. Il reste au moins la
1ère
ligne avec les en têtes de colonnes et pour la seconde manipulation, il
reste
aussi 2 formules dans 2 colonnes.
C) La plage de données est bien un tableau. Lorsque j'efface les
données et que
j'en enregistre de nouvelle, elles viennent se coller à la
première ligne à
l'extérieur du tableau.
D) La variable de la dernière ligne est la suivante :
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
E) Je sais bien que c'est compliqué voir infaisable sans voir les
macros mais je
ne peux vraiment pas le mettre en ligne.
Merci de ton aide, je vais continuer à creuser de mon côté
! :)

En VBA,
'Pour supprimer toutes les lignes de données contenues dans le tableau.
'Ce ne sont pas les lignes complètes de la feuille qui sont
supprimées
'mais seulement les colonnes du tableau (table)
Worksheets("Feuil2).ListObjects("Tableau1").DataBodyRange.Rows.Delete
'Ccompte le nombre de ligne de données dans un tableau
X = Worksheets("Feuil2).ListObjects("Tableau1").ListRows.Count
'Détermine la dernière ligne du tableau qu'il y ait une
donnée ou non.
With Worksheets("Feuil2)
X = .Range("A" & .Rows.Count).End(xlUp).Row
End With
Désolé, je n'ai jamais eu à traiter un classeur ayant la
problématique
que tu rencontres.
MichD

Si j'ai bien compris, la ligne (ci-dessous) permet de déterminer la dernière
ligne du tableau qu'il y ait une donnée ou non.
X = .Range("A" & .Rows.Count).End(xlUp).Row
Est-ce que le problème ne viendrai pas de là ? Moi je souhaite savoir quelle est
la 1ère ligne vide du tableau (à partir de la cellule A éventuellement) pour
pouvoir y coller mes données ?
Si ça peut t'aider, je peux coller la macro (qui est très longue) dans un post..

--
Fredo P.
http://cdrm4f.jimdo.com
Avatar
Fredo P.
Le 27/12/2018 à 12:28, corent38 a écrit :
Bonjour Corent
Pour voir: Essaye cette ligne: X = .Range("A1499").End(xlUp).Row
à la place de: X = .Range("A" & .Rows.Count).End(xlUp).Row
Le mercredi 26 Décembre 2018 à 19:14 par MichD :
Le 26/déc./2018 à 05:54, corent38 a écrit :
Le vendredi 21 Décembre 2018 à 12:31 par MichD :
A )
Est-ce que l'extension du fichier est .xls ou .xlsm ?
B )
Par quelle manipulation effaces-tu les données? Est-ce que la feuille
est totalement vide?
C )
Est-ce que cette plage de données est définie comme
étant
un "TABLEAU" ?
D )
Dans la macro, lorsque tu as effacé les données, quelle est la
valeur
de la variable "DernLigne ?
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
Msgbox DernLigne
D )
Dans un fichier où il y a plusieurs macros, sans voir ces
dernières, il
est difficile de savoir si l'une d'entre elles interfère avec ce que
tu
tentes de faire!
MichD

Pour répondre à tes questions :
A) L'extension du fichier est .xlsm.
B) J'ai utilisé 2 manipulations différentes pour effacer les
données pour le
même résultat. Soit j'efface les lignes soit je
sélectionne les données que je
veux supprimer et j'efface. La feuille n'est pas vide. Il reste au moins la
1ère
ligne avec les en têtes de colonnes et pour la seconde manipulation, il
reste
aussi 2 formules dans 2 colonnes.
C) La plage de données est bien un tableau. Lorsque j'efface les
données et que
j'en enregistre de nouvelle, elles viennent se coller à la
première ligne à
l'extérieur du tableau.
D) La variable de la dernière ligne est la suivante :
DernLigne = Range("A" & Rows.Count).End(xlUp).Row + 1
E) Je sais bien que c'est compliqué voir infaisable sans voir les
macros mais je
ne peux vraiment pas le mettre en ligne.
Merci de ton aide, je vais continuer à creuser de mon côté
! :)

En VBA,
'Pour supprimer toutes les lignes de données contenues dans le tableau.
'Ce ne sont pas les lignes complètes de la feuille qui sont
supprimées
'mais seulement les colonnes du tableau (table)
Worksheets("Feuil2).ListObjects("Tableau1").DataBodyRange.Rows.Delete
'Ccompte le nombre de ligne de données dans un tableau
X = Worksheets("Feuil2).ListObjects("Tableau1").ListRows.Count
'Détermine la dernière ligne du tableau qu'il y ait une
donnée ou non.
With Worksheets("Feuil2)
X = .Range("A" & .Rows.Count).End(xlUp).Row
End With
Désolé, je n'ai jamais eu à traiter un classeur ayant la
problématique
que tu rencontres.
MichD

Si j'ai bien compris, la ligne (ci-dessous) permet de déterminer la dernière
ligne du tableau qu'il y ait une donnée ou non.
X = .Range("A" & .Rows.Count).End(xlUp).Row
Est-ce que le problème ne viendrai pas de là ? Moi je souhaite savoir quelle est
la 1ère ligne vide du tableau (à partir de la cellule A éventuellement) pour
pouvoir y coller mes données ?
Si ça peut t'aider, je peux coller la macro (qui est très longue) dans un post..

--
Fredo P.
http://cdrm4f.jimdo.com
1 2