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

Boucle for next renvoyant 0

  • Initiateur de la discussion Initiateur de la discussion Nashou
  • 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 !

N

Nashou

Guest
Bonjour,

Je me suis créé une macro de rangement pour des numéros de série.
A l'exécution de ma macro, ça ne me renvoie que des 0.
Je ne comprends pas car le balayage a l'air de se faire sur la bonne base et ça m'affiche bien 2000 "0" sur la feuille de rangement (sur une seule colonne ce qui est souhaité).

J'ai pensé à un problème de format de cellule texte en nombre mais je ne pense pas que ce soit cela.

je vous joins mon classeur.

Si quelqu'un pouvait analyser mon soucis, je lui en serait reconnaissant.

D'avancer merci beaucoup.

Cdt,

Nashou
 

Pièces jointes

Re : Boucle for next renvoyant 0

Je pense que ça peut venir du fait que tu ne précises jamais la feuille pour tes
Cells(X, X)
remplace les par
worksheets("LE_NOM_DE_LA_FEUILLE").Cells(X, X)
et reviens nous dire si ça marche 🙂
 
Re : Boucle for next renvoyant 0

Bonjour Nashou, Tashiqi, bonjour le forum,

D'accord avec Tashiqi. Essaie comme ça :
Code:
Private Sub CommandButton1_Click()
Dim o As Object
Dim a As Integer
Dim y As Integer
Dim z As Integer

a = 1
Set o = Sheets("Base")
For y = 1 To o.Range("IV1").End(xlToLeft).Column
    For z = 2 To o.Range("A65536").End(xlUp).Row
        If o.Cells(z, y) = "" Then o.Cells(z, y) = 0
        Sheets("RANGEMENT").Range("A" & a) = o.Cells(z, y)
        a = a + 1
    Next z
Next y
End Sub
 
Re : Boucle for next renvoyant 0

Bonjour à tous

En grand aficionados des endives, je propose cette version légèrement remanié du code soumis par Robert.
Code:
Private Sub CommandButton1_Click()
Dim a%, y%,z%
a = 1
With Sheets("Base")
For y = 1 To .Range("IV1").End(xlToLeft).Column
    For z = 2 To .Range("A65536").End(xlUp).Row
        If .Cells(z, y) = "" Then .Cells(z, y) = 0
        Sheets("RANGEMENT").Range("A" & a) = .Cells(z, y)
        a = a + 1
    Next z
Next y
End With
End Sub
 
Re : Boucle for next renvoyant 0

Bonjour !
Je viens de tester la version de Robert. Cela fonctionne parfaitement. Merci pour votre temps. Cela m'a permis de comprendre plusieurs choses. Cela me servira à l'avenir je pense.

Je testerai également la version de Staple1600.

A bientôt
 
Re : Boucle for next renvoyant 0

Bonjour le fil, bonjour le forum,

La version de Staple est plus fruitée... Il a économisé une variable (o) qu'il a remplacé par le With... End With. Mais sinon c'est la même (en plus malin).
 
Re : Boucle for next renvoyant 0

Bonjour à tous

Robert:
Tu ranges les endives dans la famille des fruits ?
J'espère que tu ne tiendras pas grief d'avoir modifié ton code à l'insu de ton plein gré.
Une petite question au passage:
Pourquoi Dim o As Object plutôt que Dim o As Worksheet voir pour rester dans les canons de la syntaxe VBA la plus courante chez nos amis d'outre-atlantique: Dim ws As Worksheet ou pour garder le bénéfice d'un seul caractère Dim s as Worksheet ?
Sur cette question existentielle des plus essentielle, je te souhaite un bon week-end inside or outside the Cellule. 😉
 
Re : Boucle for next renvoyant 0

Bonjour le fil, bonjour le forum,

@ Staple. Non, non le mets bien les endives au rayon des légumes mais si je parlais de fruits c'était en fonction de ton nouvel avatar, bien fruité lui...
Quant à la variable, j'ai lu un jour une longue discussion sur le sujet par des éminents membres de ce forum dans laquelle ils préconisaient d'utiliser le type Objet pour un composant WorkSheet. Je n'ai plus en mémoire ni le lien ni les arguments mais j'ai, depuis ce jour, adopté leur méthode...
 
Re : Boucle for next renvoyant 0

Bonsoir à tous.


Une variante (plus rapide ?)​
VB:
Private Sub CommandButton1_Click()
Dim j&, v&, h&, Plg As Range
    With Worksheets("BASE")
        v = .Cells(2 ^ 16, 1).End(xlUp).Row - 1
        If v Then
            h = .Cells(1, 2 ^ 8).End(xlToLeft).Column
            With .Cells(2, 1).Resize(v, h)
                If .Cells.Count > 1 Then
                    On Error Resume Next
                    .SpecialCells(xlCellTypeBlanks).Value = 0
                    On Error GoTo 0
                End If
                Set Plg = Worksheets("RANGEMENT").Cells(1, 1).Resize(v)
                For j = 1 To h
                    Plg.Offset(v * (j - 1)) = .Columns(j).Value
                Next
            End With
        End If
    End With
End Sub


ROGER2327
#6733


Samedi 28 Tatane 140 (Nativité de Saint Bruggie - fête Suprême Quarte)
23 Thermidor An CCXXI, 9,7308h - lentille
2013-W32-6T23:21:14Z
 
Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

L
  • Question Question
Réponses
10
Affichages
860
C
Réponses
0
Affichages
1 K
C
P
  • Résolu(e)
Microsoft 365 Macro comparaison
Réponses
2
Affichages
1 K
pierau666
P
M
Réponses
9
Affichages
1 K
Mr.Nobody
M
K
  • Question Question
Réponses
1
Affichages
531
M
Réponses
2
Affichages
1 K
mad4max
M
Réponses
10
Affichages
3 K
HervéDuval
H
C
Réponses
7
Affichages
13 K
Citronflexe
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…