[EXCEL->VBA] Passé des variable entre feuille

Fermé
mEhO - 27 déc. 2007 à 16:38
 ego - 28 déc. 2007 à 15:42
Bonjour,

Depuis peux je travaille sous excel et plus precisement sous VBA.

Mon probleme est le suivant:
J ai une plage de données, je récupere les valeurs dont j ai besoin (tri...)

Dim tabCommande() As Commande

Private Type Commande
    Client As String
    NomProduit As String
    Atelier As String
    NumLot As String
    NbPalette As Integer
    DateFinFab As Date
    Pharmacien As String
End Type


Une fois récupéré les valeurs dans un tableau de structure, je dois :
- creer des feuilles (chaque feuille contiendra des petites vignettes)
- formater ces feuilles de facon à afficher des petites vignettes prete à être découper (j ai déjà la fonction de formatage)

Le probleme est que je n arrive pas a passer les données ( du tableau de commande ) d une feuille a une autre.


Pouvez vous m aider ?

Merci
A voir également:

5 réponses

tu peux reformuler stp?
la je comprends : j ai en feuil1 dans des cellules des noms, adresses, etc que je dois transferer en feuil2 dans 1 autre cellule pour editer une feuille d etiquettes.
comment se presente la feuil1? comment se presente la feuil2?
dois tu incrementer automatiquement X cellules (x fixe) ou X variable? etc...
ou peux tu faire ca de facon transparente (creer 1 variable contenant tous les champs mis en forme).
y a trop de possibilités pour 1 reponse claire
@+
0
desolé si c etait pas clair

la je comprends : j ai en feuil1 dans des cellules des noms, adresses, etc que je dois transferer en feuil2 dans 1 autre cellule pour editer une feuille d etiquettes.

oui c est ça, j ai un tableau ac plusieur ligne et colonne dans la feuille 1.

comment se presente la feuil1? comment se presente la feuil2?

la feuille 1 contient un tableau et la feuille 2 n est pas creer. je la créé en appuyant sur un bouton en fonction de certaines donnees contenues de mon tableau. chaque ligne de mon tableau sera traité par un pharmacien et je vais creer une feuille par pharmacien. une fonction va formater la feuille 2 (colonnes et lignes) et va creer des petites etiquettes.

dois tu incrementer automatiquement X cellules (x fixe) ou X variable? etc...
ou peux tu faire ca de facon transparente (creer 1 variable contenant tous les champs mis en forme).
y a trop de possibilités pour 1 reponse claire 

oui c est ca je créé une variable (de type tableau() de commande ci dessus) qui contient toutes les données necessaires.
le probleme est que dans les feuilles créées, je n arrive pas a recuperer le tableau contenant mes donnees.


voila j espere que c est plus clair
0
Sub MaMacro()
Dim var As String
var = ActiveCell
If var <> "" Then
Do While ActiveCell.Next.Value <> ""

var = var & Chr(10) & ActiveCell.Next.Value
ActiveCell.Next.Select
Loop
End If
Sheets("Feuil2").Select
Range("A1").Value = var
End Sub
il te reste a modifier l endroit (cellules, feuilles) ou tu veux coller ta variable
@+
0
mEhO_ Messages postés 1 Date d'inscription vendredi 28 décembre 2007 Statut Membre Dernière intervention 28 décembre 2007
28 déc. 2007 à 14:47
J ai pas trop compris ce que tu avais fait O_o ou voulait faire mais j ai reussi a avancé. Je te remerci de t on aide.

J ai un autre soucis.

Je suis sur la feuille 1 , j appelle la procedure "générerEtiquette", pour formater la mise en forme de la feuille 2 (passé en parametre a la procedure) en plusieurs etiquettes.
Je voudrais que la feuille 2 ressemble à ça : http://pix.nofrag.com/2/b/b/0071aadc70425b1671bbd13f9efe8.jpg

Le probleme est que qd j appele la procedure "générerEtiquette", c est la feuille 1 qui se formate et pas la feuille 2.
Comment faire pour que ce soit bien la feuille 2 qui seformate ?

Pourtant pour tester, qd je fais ça
sheets("feuille 2").Range("A1").Value = "plop"
ça me marque bien "popo" dans la celule a1

Ci-dessous le code de la procedure:
Public Sub GenererEtiquette(pharmacien As String) ' pharmacien => nom de la feuille
    Dim i, j, nbEtiquette, nbLigne As Integer
    
    nbEtiquette = 3 ' nombre d etiquettes à creer
    
    nbLigne = (Fix(nbEtiquette / 5) + 1) * 7

    sheets(pharmacien).Range("A1").Value = "plop"

 
    For i = 0 To nbLigne Step 7
        For j = 0 To 20 Step 5
        
            'Dessine le contour de la case de la 3eme ligne de l'étiquette
            Range(Cells(i + 3, j + 2), Cells(i + 3, j + 4)).Borders.LineStyle = xlContinuous
    
            'Fusionne les cellules des lignes 2, 3 et 4
            Range(Cells(i + 2, j + 2), Cells(i + 2, j + 4)).Merge
            Range(Cells(i + 3, j + 2), Cells(i + 3, j + 4)).Merge
            Range(Cells(i + 4, j + 3), Cells(i + 4, j + 4)).Merge
            
            'Dessine le contour et l'interieur de chaque étiquette
            With Range(Cells(i + 1, j + 1), Cells(i + 7, j + 5)).Borders
                .Item(xlEdgeBottom).Weight = xlThin
                .Item(xlEdgeLeft).Weight = xlThin
                .Item(xlEdgeTop).Weight = xlThin
                .Item(xlEdgeRight).Weight = xlThin
            End With
        
            'Les lignes du nom du client
            With Range(Cells(i + 2, j + 2), Cells(i + 2, j + 4))
                .Font.Name = "Times New Roman"
                .Font.Size = 14
                .HorizontalAlignment = xlHAlignCenter
                .VerticalAlignment = xlVAlignTop
            End With
        
            'Les lignes du nom du produit
            With Range(Cells(i + 3, j + 2), Cells(i + 3, j + 4))
                .Font.Name = "Times New Roman"
                .Font.Size = 10
                .HorizontalAlignment = xlHAlignCenter
                .VerticalAlignment = xlVAlignTop
            End With
            
            'Les lignes du n° du lot
            With Range(Cells(i + 4, j + 3), Cells(i + 4, j + 4))
                .Font.Name = "Times New Roman"
                .Font.Size = 12
                .HorizontalAlignment = xlHAlignCenter
                .VerticalAlignment = xlVAlignTop
            End With
            
            'Les lignes du nombre de palettes
            With Cells(i + 5, j + 3)
                .Font.Name = "Times New Roman"
                .Font.Size = 14
                .HorizontalAlignment = xlHAlignRight
                .VerticalAlignment = xlVAlignTop
            End With
            
            'hauteur de la 1ere ligne
            With Range(Cells(i + 1, j + 1), Cells(i + 1, j + 1))
                .RowHeight = 3.4
            End With
        
            'hauteur de la 7eme ligne
            With Range(Cells(i + 7, j + 1), Cells(i + 7, j + 5))
                .RowHeight = 3.4
            End With
            
            'Largeur et hauteur des lignes 2 et 3 (sans les colonnes 1 et 5)
            With Range(Cells(i + 2, j + 2), Cells(i + 3, j + 4))
                .RowHeight = 26.5
                .ColumnWidth = 4.5
            End With
            
            'Largeur et hauteur de la lignes 4 (sans les colonnes 1 et 5)
            With Range(Cells(i + 2, j + 2), Cells(i + 3, j + 4))
                .RowHeight = 24
                .ColumnWidth = 4.5
            End With
            
            'Largeur et hauteur des lignes 5 et 6 (sans les colonnes 1 et 5)
            With Range(Cells(i + 5, j + 2), Cells(i + 6, j + 4))
                .RowHeight = 26.5
                .ColumnWidth = 4.5
            End With
            
            'Largeur de la 1ere colonne
            With Range(Cells(i + 1, j + 1), Cells(i + 7, j + 1))
                .ColumnWidth = 1
            End With
            
            'Largeur de la 5ere colonne
            With Range(Cells(i + 1, j + 5), Cells(i + 7, j + 5))
                .ColumnWidth = 1
            End With
        
            With Cells(i + 4, j + 2)
                .Value = "Lot:"
                .Font.Name = "Times New Roman"
                .Font.Size = 14
                .VerticalAlignment = xlVAlignTop
            End With
            
            With Cells(i + 5, j + 4)
                .Value = "Pal."
                .Font.Name = "Times New Roman"
                .Font.Size = 14
                .VerticalAlignment = xlVAlignTop
            End With
        Next
    Next



End Sub




0

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

Posez votre question
ce qui est completemnt different de ce que tu avais demandé initialement.
tu avais dit ; sur 1 ligne (pas cellule) j ai mes données, je veux concatener chaque cellule de cette ligne pour en faire 1 etiquette preformatée.
la c est quand meme different. il te faut imaginer un moyen de parametrer le nb d etiquettes, leurs positionnements, faire un select case selon la valeur du pharmacien pour aller sur sa feuille etc...

pour t expliquer ce que je voulais faire plus haut, je te detaille :

Sub MaMacro()
Dim var As String ->ca ca va
var = ActiveCell -> la c est la cellule ou tu as positionné ton curseur qui devrait constituer le debut de ton etiquette
If var <> "" Then ->si c est pas nul (sait on jamais)
Do While ActiveCell.Next.Value <> "" -> je lis chaque cellule de la ligne jusqu'a une valeur nulle

var = var & Chr(10) & ActiveCell.Next.Value ->je concatene la valeur de la cellule initiale + la valeur de la 2eme cellule avec un saut de ligne
ActiveCell.Next.Select ->je deplace le curseur sur la cellule suivante dans la meme ligne
Loop j-> je boucle pour arriver a la fin de ligne ecrite
End If->je termine le if pas null
Sheets("Feuil2").Select -> j active la feuil2 par defaut
Range("A1").Value = var ->je recopie la variabvle concatenee sur la cellule A1
End Sub ->je termine ma macro

tu peux imaginer toute solution sans deplacer le curseur.
il suffit de dire par ex :
sur la feuil1 tu a DUCON comme pharmacien en A1
son adresse en A2
Son lot en A3
et une feuille qui s appelle DUCON
tu peux dire que la feuille de destination s appelle range("A1).value (DUCON) ou activecell si tu es positionné sur la A53 (par ex)
si tes etiquettes sont fixes, tu peux dire
sheets(DUCON).range("A1").value = Activecell.value
tu peux meme ecrire s il te faut 3 etiquettes

sheets(DUCON).range("A1" ).value = Activecell.value (pour A1)
sheets(DUCON).range("A4").value = Activecell.value (pour A4)
sheets(DUCON).range("A7").value = Activecell.value (pour A7)
et continuer comme ca avec activencell.next.select puis .value

@+
0