Débutant VBA - Pb urgent - transfert d'info d'un onglet à un autre [Résolu]

Signaler
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012
-
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
-
Bonjour à tous,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






Je suis novice en VBA et dans le cadre de mon travail je viens de reprendre un fichier Excell avec une Macro.





Ce fichier Excell est constitué de deux onglets « Validation Contestation » et « Synthèse contestation du mois ». Le but de la Macro est de faire passer certaines infos du premier onglet dans le deuxième.






 






Le premier onglet est construit comme cela :
n° de contestation

, XXXXX

, ----
Client

,  THYSSEN

, ----
Compte fournisseur (8 chiffres)

, 53479023

, ----
Site fournisseur (2 chiffres)

, 00

, ----
Mois industriel

, Octobre

, ----
Année

, 2006

, ----
Date début période

, 15-oct

, ----
Date fin de période

, 20-oct









La Macro doit normalement  prendre les 6 indicateurs du clients et la rajouter dans l’autre onglet comme ceci :







contestation

,
Client

,
Compte
fournisseur
 (8 chiffres)

,
Site
 fournisseur
(2 chiffres)

,
Mois
 industriel

,
Année

,
Date
début période

,
Date
fin de période

,

----

XX28

,
THYSSEN

,
52479023

,
00

,
Octobre

,
2006

,
15-oct

,
20-oct

,

----

XX27

,
THYSSEN

,
0024713

,
00

,
Octobre

,
2006

,
15-oct

,
20-oct

















Le problème est qu’à l’heure actuelle la Macro me permet juste d’indiquer automatiquement un seul indicateur cad le compte fournisseur.





Voici se qui se passe après l’activation de la Macro :






 






contestation

,
Client

,
Compte
fournisseur
 (8 chiffres)

,
Site
 fournisseur
(2 chiffres)

,
Mois
 industriel

,
Année

,
Date
début période

,
Date
fin de période

,

----

 

,

 Libellé

,
0024713

,
 

,
 

,
 

,
 

,
 

,

----

XX28

,
THYSSEN

,
0024713

,
00

,
Octobre

,
2006

,
15-oct

,
20-oct




 







 







 







 







 







 







 







 







 






Voici la Macro que j’ai à l’heure actuelle : Comment l’améliorer pour indiquer tous les indicateurs en ligne  comme ci-dessus ?





Merci Beaucoup








Sub Macro1()


'


' Macro1 Macro


' Macro enregistrée le 09/11/2006 par p039631


'



 




'



    Cells.Select



    Selection.ClearContents



    Selection.Delete Shift:=xlUp


End Sub


Sub Valider()


'


' Valider Macro



' Macro enregistrée le 09/11/2006 par p039631





'






 






'






    Sheets("Synthèse contestation du mois ").Select






   
Rows("2:2").Select



    Selection.Insert Shift:=xlDown



    Sheets("Validation Contestation").Select



    Range("B3").Select



   
Selection.Copy






    Sheets("Synthèse contestation du mois ").Select






   
Range("B2").Select



    ActiveSheet.Paste



    Sheets("Validation Contestation").Select



    Range("B4").Select



    Application.CutCopyMode = False



   
Selection.Copy






    Sheets("Synthèse contestation du mois ").Select






   
Range("C2").Select



    ActiveSheet.Paste


End Sub


Sub Macro3()


'


' Macro3 Macro


' Macro enregistrée le 09/11/2006 par p039631


'



 




'


End Sub

24 réponses

Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Si l'indice n'appartient pas à la selection ça veut dire que la feuille n'existe pas!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Salut, précise un peu plus quel paramètre tu veux voir sur le deuxième onglet, car là d'après ce que tu dis, ce que tu obtient est bon, ou alors j'ai pas tout saisie!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Bonjour Drikce,

Je veux en gros que toutes les infos du client THYSSEN cad ,le compte fr, le site fr, le mois industriel, l'année, et les dates aillent dans le deuxième onglet en ligne.

1er onglet<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>n° de contestation

, XXXXX

, ----
Client

,  THYSSEN

, ----
Compte fournisseur (8 chiffres)

, 53479023

, ----
Site fournisseur (2 chiffres)

, 00

, ----
Mois industriel

, Octobre

, ----
Année

, 2006

, ----
Date début période

, 15-oct

, ----
Date fin de période

, 20-oct

Il faudrait que j'ai ça dans le 2ème onglet cad ttes la ligne renseignée mais le Pb c'est qu'avec la macro (voir premier message) que j'ai ,seul le compte fr est renseigné (il me manque donc les autres infos que je dois retaper à la main).


contestation

, Client

, Compte
fournisseur
 (8 chiffres)

, Site
 fournisseur
(2 chiffres)

, Mois
 industriel

, Année

, Date
début période

, Date
fin de période

, ----
 

,  ,  ,  

,  

,  

,  

,  

, ----
XX28

, THYSSEN

, 534790023 , 00

, Octobre

, 2006

, 15-oct

, 20-oct

 

 

 

 

 
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
ok, c'est pas trop dur, par contre tu veux faire ça par rapport à un numéro de contestation ou à partir d'un client sortir ces contestations?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Je veux faire ça à partir d'un client sorti de ces contestations. Le numéro de contestation est renseigné à la main.

Je m'y connais vraiment pas beaucoup mais je pense que le début de la macro peut rester fixe. cad cette partieSheets("Synthèse contestation du mois ").Select<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

Rows("2:2").Select
Selection.Insert Shift:=xlDown
Sheets("Validation Contestation").Select
Range("B3").Select
Selection.Copy

Sheets("Synthèse contestation du mois ").Select

Range("B2").Select
ActiveSheet.Paste

Et c'est dans l'autre parti qu'il faudrait étendre le code. Car pour moi cette parti ne prend en compte que l'indicateur compte fr et non les autres.

A titre d'info dans mon fichier Excell la cell B4 est le numéro du compte fournisseur (cad 53479023) dans la feuille Validation Contestation et la cell C2 et la cell où ce numero de compte fr réapparait dans la feuille Synthèse contestation du mois.

Sheets("Validation Contestation").Select
Range("B4").Select
Application.CutCopyMode = False
Selection.Copy

Sheets("Synthèse contestation du mois ").Select

Range("C2").Select
ActiveSheet.Paste
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Sur ta feuille "Validation Contestation" les données sont en colonne ?
 Et sur ta feuille "Synthèse contestation du mois " en ligne ?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

OUi c'est ca
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Et sur ta feuille "Validation Contestation" tu as plusieurs colonnes pour chaque contestation?

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Non il y a juste un tableau comme cela: (donc une seule contestation )

Colonne A                                                          ColonneBn° de contestation <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

, XXXXX

, ----
Client

,  THYSSEN

, ----
Compte fournisseur (8 chiffres)

, 53479023

, ----
Site fournisseur (2 chiffres)

, 00

, ----
Mois industriel

, Octobre

, ----
Année

, 2006

, ----
Date début période

, 15-oct

, ----
Date fin de période

, 20-oct

Et en bas de ce petit tableau il ya un bouton appelé archiver qui active la macro et crée une ligne supplémentaire sur la feuille Synthèse contestation du mois.
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Ok; hé bé il faut te tirer les vers du nez  !
Je regarde ça et je reviens!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Dim NumContestation As String
Dim NomClient As String
Dim CptClient As String
Dim SiteFournisseur As String
Dim MoisIndus As String
Dim Annee As String
Dim DebutPeriode As String
Dim FinPeriode As String
Dim i As Integer


Private Sub CmdArchiver_Click()
 
NumContestation = Sheets("Validation Contestation").Range("B1").Text
NomClient = Sheets("Validation Contestation").Range("B2").Text
CptClient = Sheets("Validation Contestation").Range("B3").Text
SiteFournisseur = Sheets("Validation Contestation").Range("B4").Text
MoisIndus = Sheets("Validation Contestation").Range("B5").Text
Annee = Sheets("Validation Contestation").Range("B6").Text
DebutPeriode = Sheets("Validation Contestation").Range("B7").Text
FinPeriode = Sheets("Validation Contestation").Range("B8").Text


i = PremiereLigneVide(1)


Dim j As Integer
For j = 1 To i - 1
If NumContestation = Sheets("Synthèse contestation du mois").Range("A" & j).Text Then
MsgBox "Ce numéro de contestation existe déjà!"
Exit Sub
End If
Next


Sheets("Synthèse contestation du mois").Range("A" & i) = CStr(NumContestation)
Sheets("Synthèse contestation du mois").Range("B" & i) = NomClient
Sheets("Synthèse contestation du mois").Range("C" & i) = CptClient
Sheets("Synthèse contestation du mois").Range("D" & i) = SiteFournisseur
Sheets("Synthèse contestation du mois").Range("E" & i) = MoisIndus
Sheets("Synthèse contestation du mois").Range("F" & i) = Annee
Sheets("Synthèse contestation du mois").Range("G" & i) = DebutPeriode
Sheets("Synthèse contestation du mois").Range("H" & i) = FinPeriode


End Sub




Public Function PremiereLigneVide(Colonne As Integer) As Integer


    PremiereLigneVide = Sheets("Synthèse contestation du mois").Columns(Colonne).Find("", , , , xlByRows, xlNext).Row
   
End Function

CODE A METTRE DANS THISWORKBOOK :


Private Sub Workbook_Open()


Application.ScreenUpdating = False


    Sheets("Validation Contestation").Activate
    Cells.NumberFormat = "@"
    Sheets("Synthèse contestation du mois").Activate
    Cells.NumberFormat = "@"


    Sheets("Validation Contestation").Activate
    Range("A1").Select
 
Application.ScreenUpdating = True
 
End Sub

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Il semblerait qu'il y est un Pb avec une partie de ce code car je reçoit un message :

Erreur d'execution '9' 
L'indice n'appartient pas à la sélection

Public Function PremiereLigneVide(Colonne As Integer) As Integer
    PremiereLigneVide = Sheets("Synthèse contestation du mois").Columns(Colonne).Find("", , , , xlByRows, xlNext).Row
   
End Function
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Hé bien je sais pas moi je n'ai pas cet erreur!
En tout cas ne nomme pas tes feuille excel comme ça: avec des accents et espace, choisit plutôt ça et relance la macro avec les nouveaux noms :

"Synthese_contestation_du_mois"

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Et "Validation_Contestation"

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Ok ça marche !!!!!!!!  

Merci beaucoup Gain de temps énorme.
C claire que tu peux sortir tes petites lunettes de soleil

Je valide ta réponse

encore merci et bonne journée
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
De rien!  lol!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Ha oui! Mais valide le code aussi! C'est mieux pour les autres membres qui viennent sur le topic!
@+

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Valider le code ? comment tu fais ça ?


Juste une denière petite question pour relier ce code à un bouton?
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Sur mon poste où j'ai mis le code!

Et tu m'a dit que tu avais un bouton archiver sur ta veuille, dans mon code j'ai mis :
Private Sub CmdArchiver_Click() où CmdArchiver est le nom du bouton (propriété name)

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
19
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
17 octobre 2012

Ok c bon pour le bouton merci

Par contre j'ai bien peur  de ne pas comprendre comment valider le code comment accèder à ton poste?