traduction algo en vba ?

dgino

XLDnaute Nouveau
Quelqu'un pourrait-il m'aider à traduire en vba un algorithme que j'ai écrit en langage naturel s'il vous plait ?
Si ce n'est pas trop compliqué bien sur, je ne me rends pas trop compte car je m'y connais très peu en vba.
je pense exécuter cet algorithme à l'ouverture d'excel mais si il y a mieux à faire, dîtes-moi.
Le voici :

soit nom-feuille une variable de type feuille
nom-feuille = 1

soit num-cellule une variable de type cellule

soir nom-classeur une variable de type classeur

tant que nom-feuille inférieur à 47
faire

nom-classeur = la variable nom-feuille suivi de -PPI.xlsx (par exemple 1-PPI.xlsx)

pour num-cellule de A1 à D20, sauf les cellules vides
(c'est à dire A1, A2...A20, pui B1, B2...B20 etc. jusqu'à D20 sauf les cellules vides)
faire

la valeur de la cellule num-cellule de la feuille nom-feuille
= la valeur de la cellule num-cellule de la feuille A
du classeur nom-classeur dont le chemin d'accès est C:\

fin de la bouche pour

nom-feuille = nom-feuille+1
fin de la boucle tant que
 
Dernière édition:

dgino

XLDnaute Nouveau
Re : traduction algo en vba ?

Mais ça vide toutes les cellules de A1 à D20, ce que je ne veux pas.
Je voudrais un algo du type : pour la feuille 1, si A1 de l'autre classeur n'est pas vide alors recopier dans A1 du classeur actuel et passer à A2, sinon on passe à la feuille 2, jusqu'à 47. ce qui fait que si A1 est vide, ça épargne la recopie de A2 et A2 garde sa valeur initiale.
Je comprends mieux maintenant le sens de ta question quand tu me demandais si'l fallait préalablement vider les cellules
J'ai compris pour le flag aussi comment ça marche
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : traduction algo en vba ?

Re,

Si l'on veut conserver les valeurs antérieures, la seule solution est d'utiliser la macro du post #13.

En supprimant bien sûr la ligne :

Code:
w.[A1:D20].ClearContents 'est-ce nécessaire ???
Mais comme je l'ai dit cette macro est bien lente sur 46 (ou 47 ?) feuilles.

A+
 

dgino

XLDnaute Nouveau
Re : traduction algo en vba ?

Ok, ça marche super bien maintenant, exactement comme je voulais.
Si c'est un peu lent mais que c'est le seul moyen, tant pis ça fera l'affaire.
Merci bien en tout cas.
A une prochaine peu-être.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : traduction algo en vba ?

Re,

Voici quand même une solution beaucoup plus rapide que celle du post #13.

Elle consiste à utiliser un document auxiliaire :

Code:
Private Sub Workbook_Open()
Dim waux As Worksheet, w As Worksheet, nf&, F$, j As Byte, i As Byte
Application.ScreenUpdating = False 'fige l'écran
Application.DisplayAlerts = False 'si un fichier n'existe pas
Set waux = Workbooks.Add.Sheets(1) 'nouveau document
For Each w In ThisWorkbook.Worksheets
  nf = Val(w.Name)
  If nf > 0 And nf < 47 Then
    F = "=IF('C:\[" & nf & "-PPI.xlsx]A'!RC="""","""",'C:\[" & nf & "-PPI.xlsx]A'!RC)"
    waux.[A1:D20].FormulaR1C1 = F
    For j = 1 To 4 'colonnes A à D
      For i = 1 To 20
        If waux.Cells(i, j).Text <> "" Then _
          w.Cells(i, j) = waux.Cells(i, j) Else GoTo 1
      Next
    Next
  End If
1 Next
waux.Parent.Close False 'fermeture du document auxiliaire
End Sub
Je pense qu'on a maintenant fait le tour de la question.

A+
 

dgino

XLDnaute Nouveau
Re : traduction algo en vba ?

Bravo. je pense en effet qu'on a bien fait le tour.
Je ne pouvais pas espérer mieux.
Un grand merci à toi.
Sur un autre forum, au lieu de me donner des lignes de code ils en sont encore à me dire : "Alors, il est temps de t'investir un peu en te documentant, je ne connaissais rien non plus et me suis formé seul à l'aide des différents tutos sur internet, je suis encore loin, très loin de tout maitriser".
Grace à toi, non seulement j'ai pas besoin d'éplucher des tutos pendant des mois pour réussir à coder un truc précis, mais en plus ça me fait bien progresser en vba tout ça.
 

job75

XLDnaute Barbatruc
Re : traduction algo en vba ?

Re,

Encore une petite amélioration tout de même :)

Si des fichiers sources sont ouverts et qu'on les modifie, il vaut mieux une macro Workbook_Activate pour que le fichier se mette à jour quand on le réactive :

Code:
Private Sub Workbook_Activate()
Dim waux As Worksheet, w As Worksheet, nf&, F$, j As Byte, i As Byte
Application.ScreenUpdating = False 'fige l'écran
Application.DisplayAlerts = False 'si un fichier n'existe pas
Set waux = Workbooks.Add.Sheets(1) 'nouveau document
For Each w In Me.Worksheets
  nf = Val(w.Name)
  If nf > 0 And nf < 47 Then
    F = "=IF('C:\[" & nf & "-PPI.xlsx]A'!RC="""","""",'C:\[" & nf & "-PPI.xlsx]A'!RC)"
    waux.[A1:D20].FormulaR1C1 = F
    For j = 1 To 4 'colonnes A à D
      For i = 1 To 20
        If waux.Cells(i, j).Text <> "" Then _
          w.Cells(i, j) = waux.Cells(i, j) Else GoTo 1
      Next
    Next
  End If
1 Next
Application.EnableEvents = False 'désactive les événements
waux.Parent.Close False 'ferme le document auxiliaire
Application.EnableEvents = True 'réactive les événements
End Sub
Noter que Application.EnableEvents = False évite la relance de la macro quand on ferme le document auxiliaire (évite donc un bouclage sans fin).

Noter aussi le remplacement de ThisWorkbook par Me puisqu'on est dans ThisWorkbook.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 339
Membres
103 524
dernier inscrit
Smile1813