VBA insertion ligne dans tableau

Résolu/Fermé
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 - 9 févr. 2008 à 16:40
 nus - 26 mars 2008 à 16:19
Bonjour,
Je voudrais savoir s'il est possible de réaliser une macro pour :
Tableau de départ sous cette forme
colonne A
CHIEN
CHIEN
CHIEN
CHAT
CHAT
LAPIN

Le but est d'insérer une ligne vierge à chaque fois qu'il y a changement de la valeur de la colonne A
Tableau après macro
CHIEN
CHIEN
CHIEN
ligne vierge
CHAT
CHAT
ligne vierge
LAPIN

J'ai cherché mais je n'ai pas trouvé de solution.
Merci de votre aide
Linette44
A voir également:

10 réponses

linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3
9 févr. 2008 à 19:42
je viens de trouver la formule qui convient en ajoutant le fait qu'elle va chercher des lignes sur la feuille 2 et qu'elle les copie en colonne B à la place de la ligne vierge

Sub insertA()
Dim cellule As Variant

'se positionne au bas de la colonne et remonte
For i = Range("a65536").End(xlUp).Row To 2 Step -1

'selectionne la ligne lors du changement de valeur et ajoute une ligne en dessous
If cells(i, 1).Value <> cells(i + 1, 1).Value Then Rows(i + 1).EntireRow.insert Shift:=x1Down

'va sur la feuille 2 pour copier et sur feuille 1 pour coller
Sheets("Feuil2").Select
Rows("6:9").Select
Selection.Copy
Sheets("Feuil1").Select

Next

SUITE 1 : Par contre, j'ai un problème la macro n'insère pas de ligne après ma dernière ligne (LAPIN), il n'y a donc pas de copier /coller des cellules de la feuille 2 après LAPIN. Y a-t-il une solution ?

Voici le résultat :
CHIEN
CHIEN
CHIEN
GRIS
CHAT
CHAT
JAUNE
LAPIN

SUITE 2 : Les informations de la feuille 2 (GRIS, ...) ont été collées en colonne B. Je voudrais que les informations de la ligne précédente soit copiées en colonne A
résultat
CHIEN
CHIEN
CHIEN
CHIEN GRIS
CHAT
CHAT
CHAT JAUNE
etc.....
En espérant trouver de l'aide
Linette44
0
bonjour à tous

je souhaiterais savoir si il existe une macro pour autoriser l'utilisation d'un classeur excel par plusieurs et une fois le fichier enregistrer insérer automatiquement les lignes qui ont étaient saisies par d'autre personne.

merci
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
11 mars 2008 à 11:13
Bonjour Nus,
est-ce que les options de partage du classeur ne suffiraient pas ?
outils/partager le classeur
0
nus > Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008
11 mars 2008 à 14:40
Bonjour Ivan-hoe

non j'ai déjà essayé en ouvrant le fichier sur 2 postes différents!!

sinon j'ai un autre problème au niveau du userform que j'ai crée, lorsque je lance la macro, il me sort le message suivant:
erreur 424, objet requis ??
le débogeur me sélectionne la ligne nouvelleActionForm.show dans la macro suivante:

Private Sub Afficher_nouvelleActionForm()

nouvelleActionForm.Show

End Sub

je ne comprend pas le problème

merci d'avance
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309 > nus
11 mars 2008 à 14:57
Vérifie que ton userform s'appelle bien "nouvelleActionForm" et qu'il se trouve dans le même fichier que ta macro.
Si ce n'est pas ça, alors je ne sais pas ...
0
Bonjour,

j'ai toujours un problème avec mon userform
quand je clique sur le bouton affecté à la macro sur ma feuille de calcul, pas de problème le userform apparaît mais quand je le remplis et que je valide avec un bouton, rien ne s'inscrit dans ma feuille car je veux que les infos du userform s'inscrive dans une ligne. actuellement les données sont rentrées directement dans la feuille excel mais mon chef préfère une userform. comment je peux régler ce problème. j'aimerai vous poster le fichier mais c'est confidentiel!!

merci
0
bonjour à tous

j'ai crée un userform et lorsque je valide avec mon bouton OK, tous les données de mon userform n'apparaissent pas sur ma feuille. Je souhaiterai savoir si quelqu'un connait une macro pour que le texte que je rentre par exemple dans la textbox1 s'inscrive dans la case B7. Je cherche également à faire en sorte que si je rempli à nouveau mon userform, les données s'inscrivent à la suite de la dernière complétée dans la feuille

merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 mars 2008 à 13:36
Salut Nus, il faut que les instructions nécessaires à la recopie des données de ton userform vers ta feuille excel apparaissent dans le code de ton bouton OK
quelquechose du genre :

Private Sub BoutonOK_Click()

activesheet.range("b7").value = me.textbox1.value

unload me
End Sub

Sans passer par un userform et des macros, est-ce que ton problème ne pourrait pas être résolu par Excel avec Données/Formulaire ? C'est un formulaire tout prêt qui te permet de remplir ta feuille de données de manière pratique.

A suivre...
0
Merci Ivna-Hoe ça marche.

Un autre petite question, toutes les données inscrites dans mes textbox et combobox sont insérées à la ligne 4 grâce à l'instruction suivante:

Feuil1.Range("B4") = affaireComboBox2
Feuil1.Range("C4") = dateEmissionTextBox
Feuil1.Range("D4") = origineTextBox
Feuil1.Range("E4") = emmetteurTextBox
Feuil1.Range("F4") = libelleActionTextBox
Feuil1.Range("G4") = respActionComboBox
Feuil1.Range("H4") = delaiSouhaiteTextBox
Feuil1.Range("I4") = criticiteTextBox
Feuil1.Range("J4") = statutComboBox
Feuil1.Range("L4") = commentaireTextBox
Feuil1.Range("M4") = avancementTextBox

Maintenant si je rempli à nouveau mon userform, les nouvelles données effacent les précédentes toujours sur la ligne 4.
comment faire pour conserver les données de la ligne 4 et insérer les nouvelles données sur la ligne suivante.
le problème étant que si par exemple j'ai déjà disons 22 lignes complétées, la 23° vienne à la suite de la 22ième et ainsi de suite.

désolé mais je découvre visual et ma boite ne veux pas investir pour ma formation!!

merci
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 mars 2008 à 16:01
Alors,
on est bien d'accord que c'est le 4 de "B4" qu'on aimerait faire varier ?
on va donc l'appeler i, par exemple.
Tes instructions deviennent donc :
Feuil1.Range("B" & i) = affaireComboBox2
Feuil1.Range("C" & i) = dateEmissionTextBox
etc.

au début de ta procédure, il faut aussi rajouter les instructions suivantes

Dim i as long
i = range("B4").end(xldown).row +1
'(i prend la valeur du numéro de la dernière ligne de données + 1)

Quand au problème de la formation en entreprise ... c'est un autre débat !!

A suivre...
0
bon je viens de tester ton code mais il m'affiche un message d'erreur: "la méthode 'Range' de l'objet requis '_worksheet' a échoué" !! et il sélectionne en jaune la 1ère ligne :Feuil1.Range("B"&i)=affaireComboBox2 ??

Dim i As Long
i = Range("B4").End(xlDown).Row + 1
'i prend la valeur du numéro de la dernière ligne de données +1

Feuil1.Range("B" & i) = affaireComboBox2
Feuil1.Range("C" & i) = dateEmissionTextBox
Feuil1.Range("D" & i) = origineTextBox
Feuil1.Range("E" & i) = emmetteurTextBox
Feuil1.Range("F" & i) = libelleActionTextBox
Feuil1.Range("G" & i) = respActionComboBox
Feuil1.Range("H" & i) = delaiSouhaiteTextBox
Feuil1.Range("I" & i) = criticiteTextBox
Feuil1.Range("J" & i) = statutComboBox
Feuil1.Range("L" & i) = commentaireTextBox
Feuil1.Range("M" & i) = avancementTextBox

on ne peut pas joindre de fichier sinon??

merci
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 mars 2008 à 17:19
l'objet requis '_worksheet' , ça veut que la feuille n'est pas identifiée.
Comment s'appelle la feuille dans laquelle tu veux écrire ?
Transforme la ligne de code comme suit :
Sheets("Nomdetafeuille").Range("B" & i) = affaireComboBox2.value
est-ce que c'est mieux ?
0
bonjour Ivan-hoe

j'ai encore une erreur qui apparait: erreur définie par l'application ou par l'objet. cette ligne est sélectionée en jaune:

Sheets("en_cours").Range("B" & i) = affaireComboBox2

que faire??

merci
0
salut ivan

je me suis inspiré d'un fichier existant et mis en place le code suivant:

Dim i As Integer
Dim konteur As Integer
Dim NBaction As Integer

'début de programme
NBaction = 4

'comptage des cellules dans l'onglet en_cours
ActiveWorkbook.Worksheets("en_cours").Activate
For konteur = 4 To 4000
If Range(Cells(konteur, 1), Cells(konteur, 1)) <> "" Or Range(Cells(konteur, 2), Cells(konteur, 2)) <> "" Then
NBaction = NBaction + 1
End If
Next konteur

Feuil1.Range("B" & NBaction) = affaireComboBox2
Feuil1.Range("C" & NBaction) = dateEmissionTextBox
Feuil1.Range("D" & NBaction) = origineTextBox
Feuil1.Range("E" & NBaction) = emmetteurTextBox
Feuil1.Range("F" & NBaction) = libelleActionTextBox
Feuil1.Range("G" & NBaction) = respActionComboBox
Feuil1.Range("H" & NBaction) = delaiSouhaiteTextBox
Feuil1.Range("I" & NBaction) = criticiteTextBox
Feuil1.Range("J" & NBaction) = statutComboBox
Feuil1.Range("L" & NBaction) = commentaireTextBox
Feuil1.Range("M" & NBaction) = avancementTextBox


cette fois-ci quand je remplis mon userform, les lignes s'insérent à la suite des autres mais à la fin de mon tableau.
comment faire pour détecter la 1ère ligne vide du tableau (la 4 si je part d'un tableau vide ou alors la nième)!!

merci

et désolé je sais je suis un peu chiant, mais on se renseigne comme on peut
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
14 mars 2008 à 12:47
Bonjour Nus,
1 - tu n'est pas chiant, tu es persévérant. Nuance.
2 - tu fais au moins l'effort de chercher par toi-même et de proposer tes propres solutions, c'est très louable
3 - je ne comprends pas pourquoi ça t'écrit les données à la fin de ton tableau. Le code que tu proposes (même s'il est un peu lourd) écrit bien les données en ligne 4,puis 5 puis 6 , etc.
Vérifie donc si tu n'as pas des cochonneries qui trainent à la fin de ton tableau (genre : des espaces, un point, une lettre, un n'importe quoi qui fait qu'une plage non vide est détectée en fin de tableau)
A suivre !
I.
0
Salut Ivan-hoe

j'ai une nouvelle question sur mon UserForm
tous fonctionne bien mais j'aurai besoin d'ajouter un contrôle.
j'ai une instruction qui fonctionne et qui me permet de vérifier si les dates sont au format jj/mm/aaaa
si la date est incorrect la MsgBox apparait bien lorsque je clique sur la touche OK de mon userform. Elle se ferme et inscrit quand même le mauvais format de date dans la case prévue à cette effet!!

Comment faire pour que, si le format de date est incorrect et que l'on clique sur le bouton OK, la userform reste ouverte tant que la date n'a pas été modifier.

merci
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
19 mars 2008 à 16:30
Salut Nus,
je suppose qu'il suffirait d'interrompre ta procédure (avec Exit Sub) après la boîte message qui indique l'erreur et avant l'instruction qui ferme ton userform.
exemple :
private sub BoutonOK_Click()
if [test sur ton format de dates] then
Msgbox "Erreur sur le format des dates"
Exit Sub
end if

Me.Hide
[suite de ta procédure]

Unload Me
end sub

Pour une réponse plus précise, pourrais-tu envoyer le code que tu utilises ?
I.
0
Salut Ivan-hoe,

j'ai mis eu peu de temps à répondre mais merci pour ton aide

j'ai encore une question !!

dans le même fichier, le nom des agents méthodes se trouve dans la colonne G, puis un pourcentage dans la colonne M.

Comment faire sous VBA pour que par exemple dans la colonne G si le nom de la personne est Mr X, la macro fasse la somme des % dans la colonne M (car chaque personne à plusieurs actions en cours) puis diviser cette somme par le nombre de valeurs de cette même personne. je ne sais pas si c'est très clair.

je pensais commencer comme ça, mais je ne suis pas très doué:

private sub .....
If Range("G65536") = "Mr X" Then
...
merci
0
Salut Ivan

oublions la question précédente !!

cette instruction me permet de copier les données d'une ligne dans un autre onglet lorsque le mot "Soldée" apparait dans une case de la colonne J.

Sub solder_actions()
Dim i As Integer
Dim konteur As Integer
Dim NBsold As Integer

NBsold = 4

'comptage des cellules dans l'onglet "soldées"

ActiveWorkbook.Worksheets("soldées ").Activate
For konteur = 4 To 4000

If Range(Cells(konteur, 1), Cells(konteur, 1)) <> "" Or Range(Cells(konteur, 2), Cells(konteur, 2)) <> "" Then

NBsold = NBsold + 1
End If

Next konteur

ActiveWorkbook.Worksheets("en_cours").Activate

For i = 4 To 1000

If Range(Cells(i, 10), Cells(i, 10)) = "Soldée" Then
Range(Cells(i, 1), Cells(i, 10)).Copy ActiveWorkbook.Worksheets("soldées ").Cells(NBsold, 1)

'suppression de la ligne
ActiveWorkbook.Worksheets("en_cours").Activate
Range(Cells(i, 1), Cells(i, 15)).Select
Selection.Delete Shift:=xlUp

NBsold = NBsold + 1

'on reste sur la même ligne
i = i - 1
Cells(i, 1).Activate
Else
End If

Next i
ActiveWorkbook.Worksheets("en_cours").Activate

End Sub


J'ai essayé plusieurs modification car en fait je souhaite copier les données de chaque ligne dans l'autre onglet sauf la donnée de la colonne K, car il s'agit d'un compte à rebours mais j'ai inscrit automatiquement la valeur 0 dans toute la colonne du second onglet (onglet où sont donc stocker des actions quand elles sont terminées : 100% inscrit dans la colonne M ou colonne 13 dans le code)

Merci
0