Copier sous condition, plusieurs bouton de contrôle
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je tente de créer une feuilles résumé avec un VBA qui copie mes données sous conditions.
Je veux utiliser le même type de VBA pour tout mes boutons mais pour chaque bouton je change le range de cellule et les autres valeurs associé aux bonnes colonnes source et destination.
Ce n'est pas le bouton qui ne fonctionne pas mais le VBA qui m'indique un erreur.
Je dois créer une nouvelle feuille résumé pour chaque étape du projet. Soit pour chaque load(chargement de ce qu'on envoie).
Celà fonctionne pour mes 2 premiers boutons ("load 1 et Load 2") mais pas pour les autres.
Ce serait la ligne en gras italique qui ne fonctionne pas
Sub LOAD3()
Dim Source As Worksheet, Cible As Worksheet, RgSource As Range, Rgcible As Range, i%
Dim Données(), Résultats()
Set Source = ActiveWorkbook.Worksheets("Shipping List")
Set Cible = ActiveWorkbook.Worksheets("LACEY")
Set RgSource = Source.Range("E12:AB2019") 'Plage contenant toutes les données
Set Rgcible = Cible.Range("N23") '1ère cellule de la plage cible
'On nettoie la cible (valeurs et formats)
Rgcible.Resize(2008, 5).Clear
Application.ScreenUpdating = False
'on stocke dans un tableau de variables toutes les valeurs de la plage de données
Données = RgSource.Value2
'i : Index pour de décalage en ligne de la plage cible
i = 0
For j = 1 To UBound(Données, 1) 'J varie de 1 aux nombre de lignes de la plage des données (ici 2008 lignes)
If IsNumeric(Données(j, 20)) And Not IsEmpty(Données(j, 20)) Then
If Données(j, 20) > 0 Then
'Ici Données(j,20) est une valeur numérique supérieure à 0
Select Case Données(j, 1)
Case "CAP", "USA", "SPF", "LAM", "LVL", "PLY"
'On incrémente i pour le prochain résultat
i = i + 1
'on redimensionne le tableau Résultats et on le remplit (au début i vaut 1)
'remarque le tableau est en colonnes, lignes et non pas en lignes, colonnes
ReDim Preserve Résultats(1 To 5, 1 To i)
Résultats(1, i) = 3
Résultats(2, i) = Données(j, 1)
Résultats(3, i) = Données(j, 4)
Résultats(4, i) = Données(j, 24)
Résultats(5, i) = Données(j, 20)
Case Else
'Rien
End Select
End If
End If
Next
'On attribue à la plage cible redimensionnée les résultats
'(on utilise la fonction TRANSPOSE pour passer le tableau en lignes, colonnes)
Rgcible.Resize(i, 5).Value2 = Application.Transpose(Résultats)
Application.Goto Rgcible.Offset(-1, 0), True
Application.ScreenUpdating = False
End sub
Merci de votre aide
Je suis encore débutante dans les VBA
Windows / Chrome 131.0.0.0
- Copier sous condition, plusieurs bouton de contrôle
- Excel cellule couleur si condition texte - Guide
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Fan controle - Télécharger - Optimisation
- Diagnostic bouton photo - Accueil - Outils
1 réponse
bonjour,
Cela me semble inutilement compliqué.
Pourquoi ne pas construire directement Résultats avec les bonnes dimensions, pour éviter de le transposer ensuite?
Pourquoi passer par le tableau "Résultats", au lieu de directement enregistrer les valeurs dans les cellules à partir de "Rgcible"?
A tout hasard:
Rgcible.offset(i-1,1)= 3 Rgcible.offset(i-1,2) = Données(j, 1) Rgcible.offset(i-1,3) = Données(j, 4) Rgcible.offset(i-1,4) = Données(j, 24) Rgcible.offset(i-1,5) = Données(j, 20)