Problème code VBA copier-coller

DIDIER 19

Nouveau membre
Bonjour,
Débutant, je me lance dans la programmation.

J' ai un fichier dont la première feuille est nommé "all".
D'après cette feuille est extrait chaque fournisseur avec sa commande dans un onglet nominatif à chaque fois que j’inscris le nom du fournisseur dans la cellule B.
Ici commence le problème. Tous ce qui se trouve avant la cellule B se copie dans l'onglet attitré au fournisseur mais après impossible de résoudre le problème.
J'ai essayé de changer l'emplacement de le cellule fournisseur mais le problème reste inchangé ci ce n'est que je copie plus de cellule de la même ligne .

Je souhaiterai donc que lorsque je rentre mon fournisseur en cellule B, que les cellules qui se trouve avant et après sur la même ligne soit copier dans l' onglet fournisseur.

Le code que j' ai écrit est le suivant.

C++:
Private Sub Worksheet_Change(ByVal sel As Range)
  If sel.Count > 1 Then Exit Sub
If Not Intersect(sel, Range("B:B")) Is Nothing Then
Dim lig As Long
On Error Resume Next
    lig = Sheets(sel.Text).Cells(Rows.Count, 1).End(xlUp).Row + 1
    If Err.Number <> 0 Then
        MsgBox "Votre état saisi ne correspond à aucune feuille"
        Err.Clear
        Exit Sub
    End If
    Rows(sel.Row).Copy Destination:=Sheets(sel.Text).Rows(lig)
On Error GoTo 0
End If
End Sub

Merci à ceux qui pourront m' aider
 

drul

Obscur pro du hardware
Staff
Oula, pas top tout ça, mais bon on commence déjà par clarifier le problème stp, parceque la j'ai pas tout compris, c'est quoi pour toi "avant" et "après", Que veux-tu exactement copier, et qu'est-ce qui est exactement copier ?

STP utilises la balise "CODE" pour placer ton code, sinon c'est illisible.
 

DIDIER 19

Nouveau membre


Lorsque je rempli ma feuille appelée "all", je veux que mes fournisseur soit trier automatiquement dans chaque onglet et que les lignes soit copier comme lors de la saisie initiale.
Le code fonctionne comme je le souhaite au niveau du copier/coller mais ne prend pas le ligne complète,il copie seulement les cellules placé avant la cellule fournisseur et ce même si je change la cellule de place sur la ligne.

Pour essayé d'être plus clair j'ai mis mon fichier en lien.


[strike] [/strike]
 

drul

Obscur pro du hardware
Staff
Dsl, je ne vais pas ouvrir ton fichier (règle du forum, pour des questions évidentes de sécurité).
J'ai essayé ton code et il marche parfaitement chez moi (Avec un workbook de test).
Essaye de faire du pas à pas pour voir quand ça coince, à mon avis qqch réécris par dessus tes cellules, car la ligne de copie est correct.
 

zeb

Modérateur
Plop,

Comme je n'aime pas beaucoup le fait de déclencher des erreurs exprès, je me permets de réécrire la code.
Pour ne pas me perdre dans des systèmes de coordonnées, je garde les objets "ligne" pour ce qu'ils sont.
Et j'obtiens en oubliant le message d'erreur :
Code:
Function SheetExists(ByVal sname As String) As Boolean
	Dim ws As Worksheet
	SheetExists = False
	For Each ws In Worksheets
		If ws.Name = sname Then
			SheetExists = True
			Exit Function
		End If
	Next
End Function

Sub Worksheet_Change(ByVal sel As Range)
	If sel.Count > 1 Then Exit Sub
	If Not SheetExists(sel.Text) Then Exit Sub
	With Worksheets(sel.Text)
		sel.EntireRow.Copy Destination:=.Cells(.Rows.Count, 2).End(xlUp).Offset(1).EntireRow
	End With
End Sub

Aucune cellule ne devrait être oubliée, puisque j'utilise EntireRow.
 

drul

Obscur pro du hardware
Staff
:hello: Zeb
En l'occurence, l'erreur sera plus efficace, mais je comprends ton raisonnement.


Euh question con, mais il sert à quoi le with ? à part a rajouter deux lignes ?
 

zeb

Modérateur
Argggggggggggh!
Non, on ne provoque pas des erreurs pour rien en espérant que s'il y a une erreur récupérée, ce sera celle qu'on aura provoquée.
Et en l'occurrence, je voudrais bien voir un bench des performances comparées entre ma petite boucle qui sait s'interrompre au plus tôt et la gestion des erreurs par VB.
:fou:

Réponse encore plus con : A rien... Rows.Count de la feuille en cours a la même valeur que Rows.Count de n'importe quelle autre feuille. Je ne le fais que par principe. Par ailleurs, Worksheets(sel.Text), ça fait 21 caractères, alors en cette période de crise, j'économise sur la frappe au clavier.
:sarcastic:
 

DIDIER 19

Nouveau membre


Ok, merci pour ton aide.
J' essaye le pas à pas sur un fichier vierge et je verrais bien si ça marche.
Encore merci
A bientôt
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 069
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut