Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Espace et adaptation au nombre de lignes

  • Initiateur de la discussion Initiateur de la discussion Everlast03
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Everlast03

XLDnaute Occasionnel
Bonjour,

J'ai créé une macro pour le remplissage automatique de données dans une feuille prête à être imprimée, cependant j'ai quelques petits soucis.
Je vous joint la feuille pour une meilleure compréhension.
Exécutez la macro et voyez par vous même...

Je voudrais que lorsque l'on passe d'une marche à une autre, il y est un saut de ligne. (De 1 à 2 dans la colonne B dans 'Rotor')

De plus je voudrais que lorsque mon nombre de "marqueurs" change, c'est à dire que je n'ai plus 8 vitesses différentes comme ici, ça s'adapte.

Exemple :
1 781,27
1 1036,40
1 1368,40
1 1620,10
1 1861,60
1 2259,40
1 2768,20
1 3293,20

2 650,10
2 1248,20
2 1540,10
2 2319,40
2 3417,20

Pouvez-vous me dire comment faire j'avoue que je suis un peu perdu...

Merci d'avance ...

Ps : Voici ma macro pour les impatients 😀

Code:
Dim NbMarqueurs As Integer, NbCapteurs As Integer
Dim IMark As Integer, ICapt As Integer

Sub Macro1()
'
' Macro1 Macro
'
'ICellD As Integer, CcellD As Integer                          ' Cellule de destination (l=ligne, C=colonne)
'ICellS As Integer, CcellS As Integer                            ' Cellule source(l=ligne, C=colonne)
Dim temp As String
'
' Nombre de marqueurs
'Open "c:\temp\trace.txt" For Output As #1
    Sheets("Données Brutes").Select
    Range("C152").Select
    ActiveCell.FormulaR1C1 = "=MAX(R[-145]C:R[-3]C)/2"
    NbMarqueurs = ActiveCell.Value
' Nombre de capteurs
    Range("C153").Select
    ActiveCell.FormulaR1C1 = "=COUNT(R[-146]C:R[-4]C)/R[-1]C/2"
    NbCapteurs = ActiveCell.Value


' Nombre de marche
    NbMarche = WorksheetFunction.Max(Range("B:B"))



For marche = 0 To NbMarche - 1


' Lecture des données
    Sheets("Rotor").Select
' Vitesses
    ' Positionnement sur la première ligne
    ICellD = 11 + NbMarqueurs * marche: ICellS = (155 * (marche) + 7)
    CcellD = 4: CcellS = 6
   
             For ICapt = 1 To NbCapteurs
           
           'récupération depuis la source de données
            vitesse = Sheets("Données Brutes").CellS(ICellS, CcellS).Value
            ampX = Sheets("Données Brutes").CellS(ICellS, CcellS + 2).Value
            phX = Sheets("Données Brutes").CellS((NbCapteurs + 1) * NbMarqueurs + ICellS, CcellS + 2).Value
            ampY = Sheets("Données Brutes").CellS(ICellS + 1, CcellS + 2).Value
            phY = Sheets("Données Brutes").CellS((NbCapteurs + 1) * NbMarqueurs + ICellS + 1, CcellS + 2).Value
            
            'affectation des valeurs sur la feuille rotor
            Sheets("Rotor").CellS(ICellD, CcellD - 2).Value = marche + 1
            Sheets("Rotor").CellS(ICellD, CcellD).Value = vitesse
            Sheets("Rotor").CellS(ICellD, CcellD + 2).Value = ampX
            Sheets("Rotor").CellS(ICellD, CcellD + 3).Value = phX
            Sheets("Rotor").CellS(ICellD, CcellD + 4).Value = ampY
            Sheets("Rotor").CellS(ICellD, CcellD + 5).Value = phY
            
            ICellS = ICellS + NbMarqueurs + 1
            ICellD = ICellD + 1
            
            
        Next ICapt
        
        Next marche
Close #1
  
End Sub

Pièce Jointe :
Cijoint.fr - Service gratuit de dépôt de fichiers
 
Dernière édition:
Re : Espace et adaptation au nombre de lignes

Bonjour Everlast,
j'ai fais comme tu dis et j'ai lancé la macro, mais comme tu n'as mis dans le fichier aucunes indications, aucunes explications, il faut donc que l'on connaisse ton travail pour juger du résultat !!!!!
et surtout aucun résultat exemple de ce que tu souhaites obtenir ??
alors j'ai refermé le fichier
bonne journée
Papou 🙂
 
Re : Espace et adaptation au nombre de lignes

Je souhaiterai obtenir un tableau de la forme suivante :



Si on imagine que dans la feuille "Données Brutes" il y ait que 4 valeurs de vitesses pour la marche 2.
 
Dernière édition:
Re : Espace et adaptation au nombre de lignes

Bonjour

Est-ce que ta macro Macro1 ainsi modifiée donne la même chose
que ta MAcro1 initiale ?

(Modifs faites pour éviter les Select et pour faire plaisir à mes endives 😉 )

Code:
Dim NbMarqueurs&, NbCapteurs&
Dim IMark&, ICapt&

Sub Macro1_2()
Dim temp$, fs As Worksheet
Set fs = Sheets("Données Brutes")
' Nombre de marqueurs
'Open "c:\temp\trace.txt" For Output As #1
Application.ScreenUpdating=False
    With fs
    .Range("C152").FormulaR1C1 = "=MAX(R[-145]C:R[-3]C)/2"
    NbMarqueurs = .Range("C152").Value
' Nombre de capteurs
    .Range("C153").FormulaR1C1 = "=COUNT(R[-146]C:R[-4]C)/R[-1]C/2"
    NbCapteurs = .Range("C153").Value
' Nombre de marche
    NbMarche = WorksheetFunction.Max(.Range("B:B"))
End With

With Sheets("Rotor")
For marche = 0 To NbMarche - 1
' Lecture des données
' Vitesses
    ' Positionnement sur la première ligne
    ICellD = 11 + NbMarqueurs * marche: ICellS = (155 * (marche) + 7)
    CcellD = 4: CcellS = 6
    For ICapt = 1 To NbCapteurs
    'récupération depuis la source de données
    With fs
        vitesse = .CellS(ICellS, CcellS).Value
        ampX = .CellS(ICellS, CcellS + 2).Value
        phX = .CellS((NbCapteurs + 1) * NbMarqueurs + ICellS, CcellS + 2).Value
        ampY = .CellS(ICellS + 1, CcellS + 2).Value
        phY = .CellS((NbCapteurs + 1) * NbMarqueurs + ICellS + 1, CcellS + 2).Value
    End With
     'affectation des valeurs sur la feuille rotor
        .CellS(ICellD, CcellD - 2).Value = marche + 1
        .CellS(ICellD, CcellD).Value = vitesse
        .CellS(ICellD, CcellD + 2).Value = ampX
        .CellS(ICellD, CcellD + 3).Value = phX
        .CellS(ICellD, CcellD + 4).Value = ampY
        .CellS(ICellD, CcellD + 5).Value = phY
     ICellS = ICellS + NbMarqueurs + 1
     ICellD = ICellD + 1
    Next ICapt
Next marche
End With
'Close #1
End Sub
 
Re : Espace et adaptation au nombre de lignes

J'ai ajouté quelques trucs donc en adaptant avec ton code ça donne donc :

Code:
Dim NbMarqueurs&, NbCapteurs&
Dim IMark&, ICapt&

Sub Macro1_2()
Dim temp$, fs As Worksheet
Set fs = Sheets("Données Brutes")
' Nombre de marqueurs
'Open "c:\temp\trace.txt" For Output As #1
Application.ScreenUpdating = False
    With fs
    .Range("C152").FormulaR1C1 = "=MAX(R[-145]C:R[-3]C)/2"
    NbMarqueurs = .Range("C152").Value
' Nombre de capteurs
    .Range("C153").FormulaR1C1 = "=COUNT(R[-146]C:R[-4]C)/R[-1]C/2"
    NbCapteurs = .Range("C153").Value
' Nombre de marche
    NbMarche = WorksheetFunction.Max(.Range("B:B"))
End With

With Sheets("Rotor")
For marche = 0 To NbMarche - 1
' Lecture des données
' Vitesses
    ' Positionnement sur la première ligne
    ICellD = 12 + NbMarqueurs * marche: ICellS = (155 * (marche) + 7)
    CcellD = 4: CcellS = 6
    For ICapt = 1 To NbCapteurs
    'récupération depuis la source de données
    With fs
            vitesse = .CellS(ICellS, CcellS).Value
            ampX = .CellS(ICellS, CcellS + 2).Value
            phX = .CellS((NbCapteurs + 1) * NbMarqueurs + ICellS, CcellS + 2).Value
            ampY = .CellS(ICellS + 1, CcellS + 2).Value
            phY = .CellS((NbCapteurs + 1) * NbMarqueurs + ICellS + 1, CcellS + 2).Value
            ampoX = .CellS(ICellS + 1, CcellS + 2).Value
            phoX = .CellS((NbCapteurs + 1) * NbMarqueurs + ICellS + 2, CcellS + 2).Value
            ampoY = .CellS(ICellS + 1, CcellS + 2).Value
            phoY = .CellS((NbCapteurs + 1) * NbMarqueurs + ICellS + 3, CcellS + 2).Value
    End With
     'affectation des valeurs sur la feuille rotor
            .CellS(ICellD, CcellD - 2).Value = marche + 1
            .CellS(ICellD, CcellD).Value = vitesse
            .CellS(ICellD, CcellD + 2).Value = ampX
            .CellS(ICellD, CcellD + 3).Value = phX
            .CellS(ICellD, CcellD + 4).Value = ampY
            .CellS(ICellD, CcellD + 5).Value = phY
            .CellS(ICellD, CcellD + 11).Value = ampoX
            .CellS(ICellD, CcellD + 12).Value = phoX
            .CellS(ICellD, CcellD + 13).Value = ampoY
            .CellS(ICellD, CcellD + 14).Value = phoY
            ICellS = ICellS + NbMarqueurs + 1
            ICellD = ICellD + 1
    Next ICapt
Next marche
End With
'Close #1
End Sub

Apparemment pas de changements donc c'est bon 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
28
Affichages
2 K
Réponses
6
Affichages
645
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…